0

私は多くの研究を行ってきましたが、まだ答えが見つからないと思います。これは席の予約で、私はphpとmysqlがあまり得意ではありません。だからここに私のコードがあります:

予約.php コード:

<?php 
mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db('seat_reservation') or die (mysql_error());

$insert = mysql_query("INSERT INTO reservation (chair_status, room_id, chair_number) VALUES (0, 400, 05)");
                                ?>
</td>
 <div id="popupContact">
  <a id="popupContactClose">x</a>
 <center><form method = "POST" action="reserve.php">
<?php
$query = mysql_query("SELECT chair_status FROM reservation WHERE room_id = '400' AND chair_number = '05'");
while($row = mysql_fetch_array($query)) {
$_SESSION['roomno'] = $row['room_id'];
$_SESSION['chairnum'] = $row['chair_number'];
}

?>

reserve.php コード:

<?php
$name = $_POST['student_name'];
$stud_id = $_POST['stud_id'];
$room_id = $_SESSION['roomno'];
$chair_num = $_SESSION['chairnum'];

mysql_connect("localhost", "root", "") or die (mysql_error());
mysql_select_db('seat_reservation') or die (mysql_error());

$query = mysql_query("SELECT chair_status FROM reservation WHERE room_id = '$room_id' AND chair_number = '$chair_num'");
if($query == 0)
{
$insert = mysql_query("UPDATE reservation SET chair_status = 1, student_name = '$name', stud_id = '$stud_id' WHERE room_id = '$room_id' AND chair_number = '$chair_num'");
}
else


die ("Sorry, seat taken! <br />Redirecting...<meta http-equiv='refresh' content=2;reservation.php>");

?>

私の問題は、座席を予約すると、chair_status フィールドが 0 の場合でも、座席が使用されていると表示されることです。DB を確認すると、chair_status が 0 の状態で正常に挿入されました。どの部分が間違っているのかわかりません。 . 私は本当にあなたの助けが必要です、ありがとう!

4

3 に答える 3

2
  1. ではreservation.php、アクセスしようとするSELECTだけですが、 and : どちらも結果セットにありません。ただし、クエリの句で修正されているため、両方とも既知であるため、MySQL クエリに頼らずにこれらの値を使用できます。chair_status$row['room_id']$row['chair_number']WHERE

  2. このようなクエリを使用して変数を設定したい場合でも$_SESSION、結果セットをループして各結果でそれらの変数をオーバーライドするのは愚かです。クエリLIMITに適し、結果のレコードを 1 つだけ使用します。

  3. しかし、変数を設定するのではなく、フォーム要素を出力$_SESSIONして、ユーザーが予約したい利用可能な座席を選択できるようにしたかったのではないでしょうか? その場合、おそらくchair_status = 0フィルター基準に含めるつもりでした。

  4. 関数の戻り値はmysql_queryリソース識別子です。これを 0 in と比較することreserve.phpは、おそらく意図したものではありません。おそらくあなたはmysql_num_rows代わりに望んでいましたか?

  5. 古い MySQL 拡張機能を使用した新しいコードの記述を停止してください。これはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています。代わりに、改善されたMySQLi拡張機能またはPDO抽象化レイヤーのいずれかを使用する必要があります。

  6. 変数 (特にユーザーから取得したもの) を SQL に入れないようにしてください。SQL インジェクションに対して脆弱になります。代わりに、準備済みステートメントを使用する必要があります。これにより、SQL で評価されないパラメーターとして変数を MySQL に渡すことができます。詳細については、ボビー テーブルについてお読みください。

于 2012-05-28T17:38:37.343 に答える
0

レコードが存在するかどうかを確認するには、mysql_num_rows を使用します。

$query = mysql_query("SELECT chair_status FROM reservation WHERE room_id = '$room_id' AND chair_number = '$chair_num'");
$rows = mysql_num_rows($query);
if($rows == 0)
{
$insert = mysql_query("UPDATE reservation SET chair_status = 1, student_name = '$name', stud_id = '$stud_id' WHERE room_id = '$room_id' AND chair_number = '$chair_num'");
}
于 2012-05-28T17:22:58.870 に答える
0

あなたはおそらく意味しif (mysql_num_rows($query) == 0) {ます。返された行数ではなく、クエリにエラーがあるかどうかを確認している方法です。詳細については、ドキュメントを確認してください。

また、これはオプションの場合もありますが、中かっこを使用してelseステートメントを囲みます。また、コメントに記載されているように、関数の代わりにmysqliを使用する方がよい場合がありmysql_...ます。または、クエリ文字列に追加する前に、ユーザー入力をエスケープするだけです。

于 2012-05-28T17:20:36.463 に答える