带有 PHP 和 MySQl 的 Google 图表工具
Posted
技术标签:
【中文标题】带有 PHP 和 MySQl 的 Google 图表工具【英文标题】:Google Chart Tools with PHP & MySQl 【发布时间】:2011-12-02 21:35:07 【问题描述】:我正在尝试使用 Google Visualization API 创建图表,后台使用 php 和 mysql。
我正在做的是:
使用 PHP / SQL 从数据库中获取数据
$sth = mysql_query("SELECT * FROM Chart");
用 PHP 创建 JSON
$rows = array();
while($r = mysql_fetch_assoc($sth))
$rows[] = $r;
$jdata = json_encode($rows);
然后用 JSON 输入 Google Visualization API
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"]
所以,
数据库连接正常。 从 PHP 数组创建 JSON 是可以的。 JSON 格式没问题。Firebug 返回一个错误:
表没有列。 [中断此错误] b,Sl),[b]function 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>
【问题讨论】:
【参考方案1】:根据docs,您是否尝试过分别建立列引用和数据?
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)."]";
【讨论】:
是的,我做到了。它确实有效。问题如何从 JSON 创建列? JSON 格式需要:code.google.com/apis/chart/interactive/docs/… 知道如何将 JSON 转换为 JS / PHP 中的正确格式吗? 我已经更新了答案,你可能需要调整,但它会给你一个大概的想法 这是否意味着列需要硬编码?不能从 JSON 中提取它们吗?我必须承认它看起来确实很复杂。谢谢!【参考方案2】:Complete Working Example: PHP/MYSQL/Google Chart/JSON
PHP MySQL Google Chart JSON - Complete Example
【讨论】:
这是一个仅链接的答案。如果链接失效,这里唯一有用的信息是可能有一个名为“PHP MYSQL Google Chart JSON Complete Example”的东西可能值得搜索,但它并不能解决问题。以上是关于带有 PHP 和 MySQl 的 Google 图表工具的主要内容,如果未能解决你的问题,请参考以下文章
用于 PHP 的带有电子邮件和密码的 Google Analytics Core Reporting API
Google Maps API 标记未显示 - 使用 MySQL 和 JSON