无法为Google图表

时间:2016-01-21 19:06:39

标签: javascript php mysql json

我现在已经在这个问题上停留了很长时间。我看了很多,但我似乎无法找到答案。请参阅以下链接,以获取有关Google开发人员的参考信息。

https://developers.google.com/chart/interactive/docs/reference#dataparam

我有这个PHP脚本从我的数据库中提取数据然后构建JSON。

我的代码如下:

<?php 

header('content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');//Include this header to make the requests cross-origin 
include 'dbconnect.php';//File for database connection


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

//Check if query GET parameters are defined 
if(isset($_GET['date1']) && isset($_GET['date2'])){

    $parm1=$_GET['date1'];    
    $parm2=$_GET['date2'];   
    //We build the metadata node of our json object with chart info / update time / chart title 
    //date_default_timezone_set('Etc/GMT+8');
    //$date = date('Y-m-d H:i:s');
    //$array['meta'][]=array('title'=>'Sales data for year'.$parm1.'-'.$parm2);
    //$array['meta'][]=array('LastUpdated'=>$date);
    //$array['meta'][]=array('Info'=>'This chart displays sales data on an annual basis');

    $array['data']['cols'][]=array('label'=>'2008','type' => 'number');
    $array['data']['cols'][]=array('label'=>'2009','type' => 'number');   



}else{    

    echo "No data available";

}

$sql = "CALL TEST('$parm1','$parm2');";
//We run the query, store all rows in an associative array, then json_encode it 
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // output data of each row
    $i = 0; 
    while($row = $result->fetch_row()) {

        $array['data']['rows'][]= array(
                            'c' => array( 
                               array('v'=>intval($row[$i]))
                           )); 

                           echo $row[1];                         
    $i++; 
    }

}else {
    echo "0 results";
}

//unset($array['data']['rows'][0]);
echo $_GET['callback'].'('.json_encode($array).')';
$conn->close();//We close the database connection here 

?>

这个php脚本的json输出如下:

 {
    data: {
        cols: [{
            label: "2008",
            type: "number"
        }, {
            label: "2009",
            type: "number"
        }],
        rows: [{
            c: [{
                v: 3016207
            }]
        }]
    }
}

我的第一个问题是,在c节点中,只应添加一个值,而应该有两个v:{object}。接受的格式afaik应该在我的特定情况下,v:{object}嵌套了两个c:[array]。我有一种强烈的感觉,json_encode()未能建立一个复杂的JSON,但我在过去投入了更多更强硬的东西并且它起作用了。谁能帮我 ?请:o

编辑:预期的json格式为:

{
    data: {
        cols: [{
            label: "2008",
            type: "number"
        }, {
            label: "2009",
            type: "number"
        }],
        rows: [{
            c: [{v: 3016207 },{v: 3000528}]
        }]
    }
}

我的查询正在返回:

+---------+---------+
|  2008   |  2009   |
+---------+---------+
| 3016207 | 3000528 |
+---------+---------+

所以基本上没有插入第二列的值:/

1 个答案:

答案 0 :(得分:1)

应该解雇那些提出JSON格式的人。看起来有人试图让事情变得困难。

但是,如果您了解数据库函数返回值是什么以及如何操作这些数组,那么生成并不难。例如:您在结果集上循环,即使它总是有一行,但您没有循环遍历列。然后,您尝试使用单个值c填充$row[$i]元素,并想知道为什么它只是一个值。 (我怀疑你可能误解了$var[]结构是如何工作的。)如果你想在这方面取得成功,请阅读这些功能。顺便说一下,你仍然容易受到SQL注入攻击。

无论如何,这显然是未经测试的,但至少应该让你开始。

$sql = "CALL TEST('$parm1','$parm2')";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    foreach ($row as $name=>$val) {
        $array['data']['cols'][] = array('label'=>$name, 'type'=>'number');
        $c[] = array("v"=>$val);
    }
    $array['data']['rows'] = array(array('c'=>$c));
} else {
    echo "0 results";
}