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,也有人占用了座位。当我检查数据库时,它成功插入,chair_status 为0。我不知道哪个部分错了. 我真的需要你的帮助,谢谢!

4

3 回答 3

2
  1. reservation.php中,您SELECT只能chair_status尝试访问$row['room_id']并且$row['chair_number']: 都不在结果集中。然而,这两者都是已知的,因为它们在WHERE查询的子句中是固定的,因此可以使用这些值而无需求助于 MySQL 查询。

  2. 即使您想使用这样的查询来设置$_SESSION变量,循环遍历结果集并用每个结果覆盖这些变量也是愚蠢的。更好地LIMIT查询并仅使用一条结果记录。

  3. 但是,您可能想要输出表单元素而不是设置$_SESSION变量,以便用户可以选择他们希望保留的可用座位?在这种情况下,您可能打算将其包含chair_status = 0在您的过滤条件中。

  4. 函数的返回值mysql_query是一个资源标识符;将此与 0 in 进行比较reserve.php可能不是您想要的。也许你想要mysql_num_rows呢?

  5. 请停止使用古老的 MySQL 扩展编写新代码:它不再维护,社区已开始弃用过程。相反,您应该使用改进的MySQLi扩展或PDO抽象层。

  6. 请避免将变量(尤其是来自您的用户的变量)放入您的 SQL 中,这会使您容易受到 SQL 注入的影响。相反,您应该使用准备好的语句,通过这些语句,您的变量可以作为参数传递给 MySQL,而不会针对 SQL 进行评估。阅读Bobby Tables了解更多信息。

于 2012-05-28T17:38:37.343 回答
0

你可能的意思是if (mysql_num_rows($query) == 0) {。您检查查询是否有错误的方式,而不是返回的行数。查看文档以获取更多信息。

此外,这可能是可选的,但使用大括号将您的else语句括起来。使用mysqli而不是mysql_...您评论中提到的函数可能会更好。或者只是在将用户输入添加到查询字符串之前对其进行转义。

于 2012-05-28T17:20:36.463 回答
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 回答