使用json将数据从mysql解析为highchart

时间:2015-01-15 22:47:00

标签: php mysql json highcharts

这个和(几乎)绝望的新手。我想做的是以下几点:

  • 从传感器读取温度(工作,返回浮动)
  • 在mysql数据库中保存数据boxklima.sensorid(works - table is boxklima.0414604605ff)在日期 - 临时对中,日期存储为2014-01-01 09:00:00(datetime),temp为12.123 (真实)
  • 图形数据为x轴:日期y轴:temp(完全搞砸了)

所以我坚持使用看起来不错的高级图表,因为一切都发生在客户端(数据解析除外)。

现在我还不知道如何创建给予高图的数组。它应该看起来像这样( create-graph.html 的内容)

<!DOCTYPE html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script‌​>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>

<script type="text/javascript">
$(document).ready(function() {

    var options = {
        chart: {
            renderTo: 'container',
            type: 'spline'
        },
        series: [{}]
    };

    $.getJSON('data.php', function(data) {
        options.series[0].data = temp;
        var chart = new Highcharts.Chart(options);
    });

});
</script>

从sql-server解析数据与 data.php (内容如下所示),应该在通话时生成数据吧?

<php>
 $dbc = mysqli_connect("localhost", "pi", "pi", "boxklima");
 $query = "SELECT date,temp FROM 0414604605ff";
 $data = mysqli_query($dbc, $query);
 $i=0;
 while($row = mysqli_fetch_array($data)) {
    $rows[$i]=array($row['date'],$row['temp']);
    $i++;
 }
 echo json_encode($rows);
</php>

打开(在浏览器中)data.php只显示

$dbc = mysqli_connect("localhost", "pi", "pi", "boxklima"); $query = "SELECT date,temp FROM 0414604605ff"; $data = mysqli_query($dbc, $query); $i=0; while($row = mysqli_fetch_array($data)) { $rows[$i]=array($row['date'],$row['temp']); $i++; } echo json_encode($rows); 

在空白屏幕中打开create-graph.html结果。 凭据设置为755,php文件的执行位设置为。文件位于同一目录中。

帮助表示感谢,提前谢谢你,我迷失了信息并且确实感到困惑。 仔细阅读其他主题,但由于我是新手,所以它只给我一些我无法匹配的小块。 :S 更多信息:

lighttpd/1.4.31

PHP Version 5.4.36-0+deb7u1
additional config files parsed

/etc/php5/cgi/conf.d/10-pdo.ini, /etc/php5/cgi/conf.d/20-gd.ini, 
/etc/php5/cgi/conf.d/20-mcrypt.ini, /etc/php5/cgi/conf.d/20-mysql.ini, 
/etc/php5/cgi/conf.d/20-mysqli.ini, /etc/php5/cgi/conf.d/20-pdo_mysql.ini 

json support    enabled
json version    1.2.1 

mysql Client API version    5.5.40 

2 个答案:

答案 0 :(得分:0)

将您的php文件更改为:

<?php
  $dbc = mysqli_connect("localhost", "pi", "pi", "boxklima");
  $query = "SELECT date,temp FROM 0414604605ff";
  $data = mysqli_query($dbc, $query);
  $i=0;
  while($row = mysqli_fetch_array($data)) {
     $rows[$i]=array($row['date'],$row['temp']);
     $i++;
  }
  echo json_encode($rows);
?>

在create-graph.html中,'temp'变量未定义。(您可以打开JavaScript控制台并检查JavaScript错误)这就是该页面为空白的原因。

查看你的data.php文件,我认为$ .getJSON的回调函数中的'data'变量将具有如下结构:

[
   [2014-01-01 09:00:00, 12.43]
   [2014-01-02 09:00:00, 13.57]
]

基本上是阵列数组。 因此,将功能更改为此可能会有所帮助:

$.getJSON('data.php', function(data) {
    dataTemp = [];
    for(i=0;i<data.length;i++){
        dataTemp.push(data[i][1]);  // '1' index for getting that temp value. '0' for date.     
    }
    options.series[0].data = dataTemp;
    var chart = new Highcharts.Chart(options);
});

另外请在网页浏览器中打开data.php的内容 在进行更改后打开create-graph.html时,还要提及JavaScript控制台错误(如果有)。

答案 1 :(得分:0)

您需要将字符串日期转换为时间戳并设置xAxis的日期时间类型。要获得帮助,请参阅strtotime function并申请加入PHP脚本。