座位预订不起作用

时间:2012-05-28 17:16:48

标签: php mysql

我一直在做很多研究,但我想我仍然没有找到答案。这是一个座位预订,我在php和mysql方面不太好。所以这是我的代码:

reservation.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.我不知道哪个部分是错的。我真的需要你的帮助,谢谢你!

3 个答案:

答案 0 :(得分:2)

  1. reservation.php中,您SELECTchair_status,但后来尝试访问$row['room_id']$row['chair_number']:结果集中都没有。但是,两者都已知,因为它们已在查询的WHERE子句中修复,因此可以使用这些值而无需借助MySQL查询。

  2. 即使你想使用这样的查询来设置$_SESSION变量,也很难在结果集上循环,用每个结果覆盖这些变量。最好LIMIT查询并仅使用一个结果记录。

  3. 但是,您可能希望输出表单元素而不是设置$_SESSION变量,以便用户可以选择他们希望保留哪些可用席位?在这种情况下,您可能需要在过滤条件中加入chair_status = 0

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

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

  6. 请避免将变量(尤其是来自用户的变量)放入SQL中,这会使您容易受到SQL注入攻击。您应该使用预准备语句,使用这些语句可以将变量作为不参与SQL计算的参数传递给MySQL。有关详细信息,请参阅Bobby Tables

答案 1 :(得分:0)

你可能意味着if (mysql_num_rows($query) == 0) {。你的方式是检查查询是否有错误,而不是返回的行数。 Check the docs了解更多信息。

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

答案 2 :(得分: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'");
}