在Highcharts中添加系列时,Javascript循环不通过sqlite_fetch_array()设置PHP值

时间:2013-03-05 20:11:00

标签: php javascript sqlite highcharts linechart

我有一个SQLite数据库,我正在尝试使用Highcharts,PHP和Javascript在线图上绘制数据。我正在为每个用户绘制一个系列(用户是每个元组的文本值),但是在通过PHP循环检索后续用户时遇到了麻烦。

$dbhandle = sqlite_open('db/test.db', 0666, $error);

if (!$dbhandle) die ($error);
$query5 = "SELECT DISTINCT User FROM Events";

$ok0 = sqlite_query($dbhandle, $query5, $error_msg);

if (!$ok0) 
{
    die("dead" . $error_msg);
}
$rows = sqlite_num_rows($ok0);

echo 
"for(var i=2; i<$rows; i++) // start of JS loop. 
                           //$rows is 4; I am graphing 2 series here
{";

  $array = sqlite_fetch_array($ok0, SQLITE_ASSOC); // $ok0 is the unique list
// of users. After graphing one series, I want to grab the next user to graph


        echo "chart.addSeries({
                name: '{$array["User"]}',
                data: [";
          for($i=0; $i<$diff+1; $i++)
          {
            $target = date("D, j M", (strtotime($_GET["start"]) + $i * 24 * 3600));
            $query6 = "SELECT * FROM Events WHERE User = '{$array["User"]}' AND Start LIKE '%{$target}%'";
            $result6 = sqlite_query($dbhandle, $query6);
            if (!$result6) die("Cannot execute query.");
            $num = sqlite_num_rows($result6);            
            if($i==($diff))
            {
              echo $num;
            }              
            else
              echo $num . ", ";
          }?>],

                pointStart: 


                 <?php
$date = DateTime::createFromFormat('D M d Y', urldecode($_GET["start"])); 
echo $date->getTimestamp()*1000;?>,
            pointInterval: 24 * 3600 * 1000 // one day

              });
      <?php echo "}";?> // end of JS loop

结果会绘制另外两个系列图,但它们都是来自同一用户的相同数据。它看起来不像sqlite_fetch_array()的循环正确返回下一个用户。谁能在这里看到问题?也许是我将Javascript与PHP集成的方式?

2 个答案:

答案 0 :(得分:0)

每次调用时,这行代码总是做同样的事情:

$query6 = "SELECT * FROM Events WHERE User = '{$array["User"]}' AND Start LIKE '%{$target}%'";

$array应该有一个不同用户的列表,但是您没有显示$ok0的查询。您正在此循环for($i=0; $i<$diff+1; $i++)内进行用户查找,但在确定要获取的用户时不使用这些变量。

我想发布正确的方法从$array查找下一个用户,但我不知道结构是什么。如果您无法弄清楚如何使$query6对每个用户都唯一,那么您必须发布更多信息,例如var_dump $array$ok0的查询文字1}}。

也许你只需要在$array = sqlite_fetch_array($ok0, SQLITE_ASSOC);循环中移动这一行for,但是你冒着$i$diff+1不同意可用行数的风险从你的结果。

答案 1 :(得分:0)

我已经弄清楚了。我相信由于PHP在服务器端执行,当浏览器执行Javascript时,回显的Javascript循环中的代码块会产生相同的值。服务器只是回显表示js循环的字符串,然后运行代码块。当所有内容都发送到浏览器时,Javascript将正常循环并简单地输出代码块的结果两次。我刚刚通过PHP放弃了JS循环,并将其替换为PHP循环。