2

助けが必要です。Google のチャート API と MySql 経由で取得したデータを使用して、動的な折れ線グラフを作成したいと考えています。ページの作成にはPHPを使用しています。ハードコーディングされた値で問題なく単純なグラフを作成できました。現在、代わりにMySqlデータを使用しようとしていますが、うまくいきません。私のウェブページは次のようになります。

<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;
?>

ブラウザーでページを読み込むと、「テーブルには列がありません」という赤いボックスが表示されます。誰が私が間違っているのか教えてもらえますか? それとも、より良い/より簡単な方法ですか? どんな助けでも大歓迎です!!

4

2 に答える 2

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出力が必要なものであることを確認していません。生成しようとしていたものと同じにしただけです。また、JSON オブジェクトで無効な状態を返すために die() を取得する必要があるため、失敗したことがわかります。

于 2012-10-24T17:03:21.217 に答える
2

はい、json_encode機能を使用します。それはあなたの頭痛の多くを救います。また、あなたがあなたの数字をintval()何らかの方法で実行していることを確認します.

Google チャート API での私の経験では、数値を引用符で囲んで送信すると、チャートの描画に失敗するため、PHP 配列のデータ型が正しい必要があり、json_encode結果の構文が正しくなります。

于 2012-10-24T17:06:40.573 に答える