Я пытаюсь создать диаграмму, используя API визуализации Google, с фоном PHP и MySQL.
Что я делаю:
получение данных из базы данных с использованием 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"}]
Итак,
- ДБ соединение в порядке.
- Создание JSON из PHP-массива в порядке.
- Формат JSON в порядке.
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>