0

データベースからデータを取得して、週ごとのカレンダーのようなテーブルに予約を表示しようとしています。予約時間は「予約」クラスを取る必要があります。何らかの理由で、foreach ループが実行されていないようです。コードが現在書かれている方法では、テーブルは各データ エントリに対して "test" を読み取る必要があります。

$schedule = mysql_query ("SELECT * FROM reservation WHERE location_id = '$reserve' AND year = '$year' AND quarter = '$quarter' AND date_note = 'Quarter' ORDER BY hour_start ASC");

foreach ($time as $hour) {
    $endhour = $hour + 30;
    foreach ($week as $day) {
        while ($sched_table = mysql_fetch_array($schedule)) {
            if ($sched_table['day_of_week'] == $day) {
                if ($sched_table['hour_start'] == "") {
                    echo "<td>test</td>";
                } elseif ($sched_table['hour_start'] >= $hour && $sched_table['hour_start'] < $endhour) {
                    echo "<td class='reserve'>test</td>";
                } else {
                    echo "<td>test</td>";
                }
            }
        }
    }
}

上記のすべての変数は、次のように以前に定義されています。

$reserve = $_POST['reserve'];
$year = 2013;
$quarter = "Fall";

$week = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$time = array();
for ($x = 800; $x < 2001; $x += 100) {
    $y = $x + 30;
    array_push($time, $x, $y);
}

簡単なメモ -- foreach ループの前に が設定されていないことに気付きました。各行の開始位置と終了位置を決定する前に、ループが実行されていることを確認したかったので、echo ""; を挿入しました。そしてエコー ""; ステートメント全体の最初と最後に。これにより、「テスト」の長いリストが 1 つ作成されるはずですが、何も表示されません。

データベースは、開始時刻を「900」ではなく「0900」として保存します。ループが実行されない理由を説明できますか? その場合、$time を再定義して文字列として存在させる必要がありますか、それとも値として扱うことができるでしょうか。

助けてくれてありがとう。

4

2 に答える 2

0

テストすべきこと:

  • $time最初の foreach に入る前に入力されていることを確認します (<?echo count($time);?>その foreach の前に追加します)
  • $week2 番目の foreach に入る前に入力されていることを確認します (<?echo count($week);?>その foreach の前に追加します)。
  • クエリが何かを返すことを確認してください。(生成されたクエリ文字列を出力し、phpmyadmin などのデータベース ソフトウェアで実行します。)

この 3 つの手順を実行すると、問題が見つかり、解決できます。

于 2013-09-10T18:56:18.737 に答える