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

时间:2015-11-17 08:24:23

标签: php mysql json charts google-visualization

我正在尝试从MySQL数据库生成谷歌图表。我对这篇文章进行了评论:PHP MySQL Google Chart JSON - Complete Example

我做了帖子中提到的所有内容,但在网页上提到了这一点:

  

'每周任务','键入' => ' string'),数组('标签' =>'百分比','类型' =>'数字' ;)); $ rows = array(); while($ r = mysql_fetch_assoc($ sth)){$ temp = array(); //以下行将用于切割饼图$ temp [] = array(' v' =>(字符串)$ r [' Weekly_task']); //每个切片的值$ temp [] = array(' v' =>(int)$ r [' percentage']); $ rows [] = array(' c' => $ temp); } $ table [' rows'] = $ rows; $ jsonTable = json_encode($ table); // echo $ 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 个答案:

答案 0 :(得分:1)

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

  1. 将所有内容放在一个文件上,这样可以减少混淆,分割代码没有任何实际好处。
  2. mysql_个函数换成至少mysqli_个函数。
  3. 将您的Google可视化JavaScript代码块移动到将接收它的DOM元素之后的行。 (如果你试图将内容放入一个不存在的元素中,你就不会看到任何东西。)
  4. 您的问题中没有提供样本数据,因此我不知道$jsonTable是否提供了正确的数据 - 您需要自己对此进行评估。
  5. 在执行上述更正时,请务必检查代码是否存在服务器端错误。

    如果没有服务器端错误,但未显示图形,则:

    1. 检查您网页的源代码,确认DateTable()函数包含$jsonTable变量中的正确/实际数据字符串。
    2. 访问浏览器的开发人员工具界面,查找任何错误消息。这些将是客户端错误。
    3. 如果您仍然被困,希望了解更多信息,或希望查看类似的工作示例,请转到here

      这是Google Charts Reference Page