2

ユーザーが(別のページで)予約するカレンダーシステムを作成しています。このページで、ユーザーは関連するボックスをクリックして、新しい予約の開始時刻を選択します。データベースで既存の予約をチェックし、二重予約を防ぐためにクリックできないようにしています。

私の質問は、なぜその日の最初の予約だけがテーブルに表示されるのですか?

変数は$bookedtrueのままなので、他の予約は表示されませんか?頭が回らない!

MySQL:

$query="SELECT * FROM bookings WHERE DateBooked = '{$year}-{$month}-{$selectedday}' AND Approved = 1";
$result = mysql_query($query);
$todayarray = mysql_fetch_assoc($result);

そしてPHP:

while ($room <= $roomcount) {
    echo "\n<div class=\"roomtimes\">";
    echo "\n<table border=1>";
    echo "\n<tr><th class=\"titlecell\">Room $room</th></tr>";
    $cellnum = 10;
    while ($cellnum <= 22) {
        if (($todayarray['StartTime'] <= $cellnum) && ($todayarray['EndTime'] >= $cellnum) && ($todayarray['Room'] == $room)) {
            $booked = true;
        } else {
            $booked = false;
        }
        echo "\n<tr>";
        if ($booked) {
            echo "\n<td class=\"blankcell";
        } else {
            echo "\n<td class=\"linkcell";
        }

        if ($selectedtime == $cellnum) {
            echo " selectedcell";
        }
        echo "\">";
        if ($booked) {
            echo "$cellnum:00 --BOOKED--";
        } else {
            echo "<a href=\"newbooking.php?m=$selectedmonth&d=$selectedday&t=$cellnum&r=$room\">$cellnum:00</a>";
        }
        echo "</td>";
        echo "\n</tr>";
        $cellnum++;
    }
    $room++;
    echo "\n</table>";
    echo "\n</div>";
}
echo "\n</div>";
?>
4

1 に答える 1

0

問題は、テーブルの結果セットの最初の行のみを見ていることです。呼び出すmysql_fetch_assoc($result)のは1回だけで、この関数は一度に1つの結果行のみを返します。$resultクエリ呼び出しから取得したものを反復処理する必要があります。次のようなwhileループを使用できます。

while ($row = mysql_fetch_assoc($result) {
   //this can be your php code from above 
} 
于 2013-02-24T15:51:11.397 に答える