【问题标题】:Google Chart Tools with PHP & MySQl带有 PHP 和 MySQl 的 Google 图表工具
【发布时间】: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>

【问题讨论】:

    标签: php mysql json google-visualization


    【解决方案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 转换为 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”的东西可能值得搜索,但它并不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多