无法使用 MySQL 表数据作为数据源生成 Google 图表

Posted

技术标签:

【中文标题】无法使用 MySQL 表数据作为数据源生成 Google 图表【英文标题】:Not able to generate a Google Chart using MySQL table data as the data source 【发布时间】:2016-02-18 13:00:49 【问题描述】:

我正在尝试从 mysql 数据库生成谷歌图表。我参考了这篇文章:php MySQL Google Chart JSON - Complete Example

我做了帖子中提到的所有事情,但在网页上得到了这个:

'每周任务', 'type' => 'string'), array('label' => 'Percentage', 'type' => 'number') ); $rows = 数组(); while($r = mysql_fetch_assoc($sth)) $temp = array(); // 以下行将用于分割饼图 $temp[] = array('v' => (string) $r['Weekly_task']); // 每个切片的值 $temp[] = array('v' => (int) $r['percentage']); $rows[] = array('c' => $temp); $table['rows'] = $rows; $jsonTable = json_encode($table); //回显 $jsonTable; ?>

我尝试并检查了我的数据库,一切似乎都很好。

代码:

 <html>
  <head>
    <!--Load the Ajax API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', 'packages':['corechart']);

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() 

      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(<?=$jsonTable?>);
      var options = 
           title: 'My Weekly Plan',
          is3D: 'true',
          width: 800,
          height: 600
        ;
      // Instantiate and draw our chart, passing in some options.
      // Do not forget to check your div ID
      var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    
    </script>
  </head>

  <body>
    <?php
$con=mysql_connect("localhost","root","password") or die("Failed to connect with database!!!!");
mysql_select_db("googlecharts", $con); 
// The Chart table contains two fields: weekly_task and percentage
// This example will display a pie chart. If you need other charts such as a Bar chart, you will need to modify the code a little to make it work with bar chart and other charts
$sth = mysql_query("SELECT weekly_task, percentage FROM chart");

/*
---------------------------
example data: Table (Chart)
--------------------------
weekly_task     percentage
Sleep           30
Watching Movie  40
work            44
*/

$rows = array();
//flag is not needed
$flag = true;
$table = array();
$table['cols'] = array(

    // Labels for your chart, these represent the column titles
    // Note that one column is in "string" format and another one is in "number" format as pie chart only required "numbers" for calculating percentage and string will be used for column title
    array('label' => 'Weekly Task', 'type' => 'string'),
    array('label' => 'Percentage', 'type' => 'number')

);

$rows = array();
while($r = mysql_fetch_assoc($sth)) 
    $temp = array();
    // the following line will be used to slice the Pie chart
    $temp[] = array('v' => (string) $r['Weekly_task']); 

    // Values of each slice
    $temp[] = array('v' => (int) $r['percentage']); 
    $rows[] = array('c' => $temp);


$table['rows'] = $rows;
$jsonTable = json_encode($table);
//echo $jsonTable;
?>
    <!--this is the div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</html>

更新 我将 HTML 和 PHP 代码分成不同的文件。 现在我得到空白网页。 代码: PHP:

<?php
$con=mysql_connect("localhost","root","pass") or die("Failed to connect with database!!!!");
mysql_select_db("googlechart", $con); 
// The Chart table contains two fields: weekly_task and percentage
// This example will display a pie chart. If you need other charts such as a Bar chart, you will need to modify the code a little to make it work with bar chart and other charts
$sth = mysql_query("SELECT weekly_task, percentage FROM chart");

/*
---------------------------
example data: Table (Chart)
--------------------------
weekly_task     percentage
Sleep           30
Watching Movie  40
work            44
*/

$rows = array();
//flag is not needed
$flag = true;
$table = array();
$table['cols'] = array(

    // Labels for your chart, these represent the column titles
    // Note that one column is in "string" format and another one is in "number" format as pie chart only required "numbers" for calculating percentage and string will be used for column title
    array('label' => 'Weekly Task', 'type' => 'string'),
    array('label' => 'Percentage', 'type' => 'number')

);

$rows = array();
while($r = mysql_fetch_assoc($sth)) 
    $temp = array();
    // the following line will be used to slice the Pie chart
    $temp[] = array('v' => (string) $r['Weekly_task']); 

    // Values of each slice
    $temp[] = array('v' => (int) $r['percentage']); 
    $rows[] = array('c' => $temp);


$table['rows'] = $rows;
$jsonTable = json_encode($table);
//echo $jsonTable;
?> 

HTML:

<?php
    include('new.php');
    ini_set('display_errors', 1); 
    error_reporting(E_ALL);
?>

 <html>
  <head>
    <!--Load the Ajax API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', 'packages':['corechart']);

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() 

      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(<?=$jsonTable?>);
      var options = 
           title: 'No. of Kills',
          is3D: 'true',
          width: 800,
          height: 600
        ;
      // Instantiate and draw our chart, passing in some options.
      // Do not forget to check your div ID
      var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    
    </script>
  </head>

  <body>

    <!--this is the div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</html>

【问题讨论】:

【参考方案1】:

有几件事需要调整。我会尝试逐项列出它们。

    将所有内容放在一个文件中,这样可以减少混淆,并且拆分代码并没有真正的好处。 至少将 mysql_ 函数替换为 mysqli_ 函数。 将您的 google 可视化 javascript 代码块移动到将接收它的 DOM 元素之后的一行。 (如果您尝试将内容放入不存在的元素中,您将什么也看不到。) 您的问题中没有提供示例数据,所以我不知道$jsonTable 提供的数据是否正确——您需要自己评估。

当您实施上述更正时,请务必检查您的代码是否存在服务器端错误。

如果您没有服务器端错误,但没有显示图形,那么:

    检查页面的源代码并确认DateTable() 函数包含来自$jsonTable 变量的正确/实际数据字符串。 访问浏览器的开发人员工具界面并查找任何错误消息。这些将是客户端错误。

如果您仍然遇到困难、想要了解更多信息或想查看类似的工作示例,请转至here。

这里是Google Charts Reference Page

【讨论】:

以上是关于无法使用 MySQL 表数据作为数据源生成 Google 图表的主要内容,如果未能解决你的问题,请参考以下文章

一周入门MySQL—5

MySQL 数据透视表列数据作为行

MySQL必知必会-官方数据库表及SQL脚本导入生成

MySQL 使用动态行值作为列名

Mysql视图使用总结

AJAX 使用从 PHP 生成的 HTML 调用的函数更新 MYSQL 数据库