Я пытаюсь создать диаграмму, используя API визуализации Google, с PHP и MySQL в фоновом режиме.
Что я делаю:
получение данных из db с помощью PHP / SQL
$sth = mysql_query("SELECT * FROM Chart");
создание JSON с PHP
$rows = array(); while($r = mysql_fetch_assoc($sth)) { $rows[] = $r; } $jdata = json_encode($rows);
а затем загружать API визуализации Google с помощью JSON
var data = new google.visualization.DataTable(<?php echo $jdata ?>);
Просто чтобы убедиться, что JSON действительно в правильном формате, я сделал:
$jdata = json_encode($rows); print $jdata;
который вернулся:
[{"id":"1","quarters":"1","salary":"1250"},{"id":"2","quarters":"2","salary":"2500"},{"id":"3","quarters":"3","salary":"4526"},{"id":"4","quarters":"4","salary":"4569"}]
Так,
Firebug возвращает сообщение об ошибке:
В таблице нет столбцов. [Break On This Error] b, Sl), [b]} функция Zq (a, b) {var c = a [xc] … "].")): D (l («Таблица не имеет столбцов. «))}
Вопрос в том, как я могу создавать столбцы из данных JSON?
ОБНОВИТЬ:
Код, используемый для создания графика ниже:
// SQL Query $sth = mysql_query("SELECT * FROM Chart"); //$rows = array(); while($r = mysql_fetch_assoc($sth)) { if(!isset($google_JSON)){ $google_JSON = "{cols: ["; $column = array_keys($r); foreach($column as $key=>$value){ $google_JSON_cols[]="{id: '".$key."', label: '".$value."'}"; } $google_JSON .= implode(",",$google_JSON_cols)."],rows: ["; } $google_JSON_rows[] = "{c:[{v: '".$r['id']."'}, {v: '".$r['quarters']."'}, {v: '".$r['salary']."'}]}"; } // you may need to change the above into a function that loops through rows, with $r['id'] etc, referring to the fields you want to inject.. $data = $google_JSON.implode(",",$google_JSON_rows)."]}";
Выходной код HTML:
<!-- load Google AJAX API --> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> //load the Google Visualization API and the chart google.load('visualization', '1', {'packages':['columnchart']}); //set callback google.setOnLoadCallback (createChart); //callback function function createChart() { //create data table object var data = new google.visualization.DataTable({cols: [{id: '0', label: 'id'},{id: '1', label: 'quarters'},{id: '2', label: 'salary'}],rows: [{c:[{v: '1'}, {v: '1'}, {v: '1250'}]},{c:[{v: '2'}, {v: '2'}, {v: '2500'}]},{c:[{v: '3'}, {v: '3'}, {v: '4526'}]},{c:[{v: '4'}, {v: '4'}, {v: '4569'}]}]}); //instantiate our chart objects var chart = new google.visualization.ColumnChart (document.getElementById('chart')); //define options for visualization var options = {width: 400, height: 240, is3D: true, title: 'Company Earnings'}; //draw our chart chart.draw(data, options); } </script> <div id="chart"></div>
В документах вы пытались установить ссылки на столбцы и данные отдельно?
var data = new google.visualization.DataTable(); data.addColumn('string', 'Task'); data.addColumn('number', 'Hours per Day'); data.addRows([ ['Work', 11], ['Eat', 2], ['Commute', 2], ['Watch TV', 2], ['Sleep', {v:7, f:'7.000'}] ]);
Чтобы форматировать в правильный JSON для объекта, вы можете настроить его следующим образом:
while($r = mysql_fetch_assoc($sth)) { if(!isset($google_JSON)){ $google_JSON = "{cols: ["; $column = array_keys($r); foreach($column as $key=>$value){ $google_JSON_cols[]="{id: '".$key."', label: '".$value."'}"; } $google_JSON .= implode(",",$google_JSON_cols)."],rows: ["; } $google_JSON_rows[] = "{c:[{v: '".$r['id']."'}, {v: ".$r['quarters']."}, {v: ".$r['salary']."}]}"; } // you may need to change the above into a function that loops through rows, with $r['id'] etc, referring to the fields you want to inject.. echo $google_JSON.implode(",",$google_JSON_rows)."]}";
Complete Working Example: PHP/MYSQL/Google Chart/JSON
PHP MySQL Google Chart JSON – полный пример