2012-10-24 312 views
2

我需要一些幫助。我想用Google的圖表api和通過MySql獲取的數據創建一個動態折線圖。我使用PHP來創建頁面。我能夠創建一個硬編碼值的簡單圖表沒有問題。現在我試圖使用一些MySql數據,但沒有運氣。我的網頁看起來是這樣的:使用谷歌圖表,mysql和php創建動態圖表

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 
google.load("visualization", "1", {packages:["corechart"]}); 
google.setOnLoadCallback(drawChart); 

function drawChart() 
{ 
    var jsonData = $.ajax({ 
     url: "graphData.php", 
     dataType:"json", 
     async: false 
}).responseText; 

// Create our data table out of JSON data loaded from server. 
var data = new google.visualization.DataTable(jsonData); 

var options = {'title':'Ticket Sales', 
'width':500, 
'height':400}; 

// Instantiate and draw our chart, passing in some options. 
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div')); 
chart.draw(data,options); 
} 
</script> 
<? 
    PrintHeader($buf,$username,$userid,$session); 

    echo("<div id='chart_div'></div>"); 
?> 
</html> 

然後我graphData.php網頁看起來是這樣的:

$sql = "SELECT MONTHNAME(DATE_SOLD), COUNT(*) FROM TICKET_SALES WHERE YEAR(DATE_SOLD) = 2012 GROUP BY MONTHNAME(DATE_SOLD) ORDER BY MONTH(DATE_SOLD);"; 

$result = mysql_query($sql, $conn) or die(mysql_error()); 

//start the json data in the format Google Chart js/API expects to recieve it 
$JSONdata = "{ 
     \"cols\": [ 
      {\"label\":\"Month\",\"type\":\"string\"}, 
      {\"label\":\"Ticket Sales\",\"type\":\"number\"} 
     ], 
    \"rows\": ["; 

//loop through the db query result set and put into the chart cell values 
while($row = mysql_fetch_row($result)) 
{ 
    $JSONdata .= "{\"c\":[{\"v\": " . $row[0] . "}, {\"v\": " . $row[1] ."}]},"; 
}  

//end the json data/object literal with the correct syntax 
$JSONdata .= "]}"; 

echo $JSONdata; 
?> 

當我加載在瀏覽器中我只是得到一個紅色的盒子,上面寫着在網頁「表有沒有列。」誰能告訴我我做錯了什麼?或者也許更好/更簡單的方法?任何幫助將不勝感激!!

+0

請勿以這種方式構建JSON數據,創建一個PHP數組並使用'json_encode()'發回數據。 – Orbling

回答

2

請勿以這種方式構建JSON數據,創建一個PHP數組並使用json_encode()將數據發回。

<?php 

$sql = "SELECT MONTHNAME(DATE_SOLD), COUNT(*) FROM TICKET_SALES WHERE YEAR(DATE_SOLD) = 2012 GROUP BY MONTHNAME(DATE_SOLD) ORDER BY MONTH(DATE_SOLD);"; 

$result = mysql_query($sql, $conn) or die(mysql_error()); 

//start the json data in the format Google Chart js/API expects to recieve it 
$data = array('cols' => array(array('label' => 'Month', 'type' => 'string'), 
           array('label' => 'Ticket Sales', 'type' => 'string')), 
       'rows' => array()); 

while($row = mysql_fetch_row($result)) { 
    $data['rows'][] = array('c' => array(array('v' => $row[0]), array('v' => $row[1]))); 
}  

echo json_encode($data); 

我沒有檢查JSON輸出是什麼是想要的,只是使它與你試圖產生的一樣。此外,您應該讓die()在JSON對象中返回無效狀態,以便您可以告訴它失敗。

+0

太棒了!它的工作,非常感謝! – user1504583

2

是的,使用json_encode函數。它會爲你節省很多頭痛。我還會確保你通過intval()或其他什麼來運行你的號碼。

我對Google圖表API的使用經驗是,如果您使用引號發送數字,圖表將無法繪製,因此您的PHP數組中的數據類型必須正確,因此json_encode結果在語法上是正確的。