0

SQLite データベースがあり、Highcharts、PHP、および Javascript を使用して折れ線グラフでデータをグラフ化しようとしています。ユーザーごとに 1 つのシリーズをグラフ化しています (ユーザーはタプルごとのテキスト値です) が、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

結果は 2 つの追加の系列をグラフ化しますが、どちらも同じユーザーからの同じデータです。sqlite_fetch_array() を使用したループが次のユーザーを正しく返すようには見えません。誰でもここで問題を見ることができますか? JavascriptをPHPに統合する方法に何か問題があるのでしょうか?

4

2 に答える 2

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

この行をループ$array = sqlite_fetch_array($ok0, SQLITE_ASSOC);内に移動する必要があるだけかもしれませんが、結果から利用可能な行数に同意しないリスクがあります。for$i$diff+1

于 2013-03-06T00:03:17.397 に答える
0

私はそれを理解しました。PHP がサーバー側で実行されるため、ブラウザが Javascript を実行すると、エコーされた Javascript ループ内のコード ブロックが同じ値になると思います。サーバーは単に js ループを表す文字列をエコーし​​、その後コード ブロックを実行します。すべてがブラウザーに送信されると、Javascript は通常どおりループし、コード ブロックの結果を 2 回出力するだけです。PHP 経由の JS ループをやめて、PHP ループに置き換えました。

于 2013-03-06T20:01:47.050 に答える