我一直在做很多研究,但我想我仍然没有找到答案。这是一个座位预订,我在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.我不知道哪个部分是错的。我真的需要你的帮助,谢谢你!
答案 0 :(得分:2)
在reservation.php
中,您SELECT
仅chair_status
,但后来尝试访问$row['room_id']
和$row['chair_number']
:结果集中都没有。但是,两者都已知,因为它们已在查询的WHERE
子句中修复,因此可以使用这些值而无需借助MySQL查询。
即使你想使用这样的查询来设置$_SESSION
变量,也很难在结果集上循环,用每个结果覆盖这些变量。最好LIMIT
查询并仅使用一个结果记录。
但是,您可能希望输出表单元素而不是设置$_SESSION
变量,以便用户可以选择他们希望保留哪些可用席位?在这种情况下,您可能需要在过滤条件中加入chair_status = 0
。
mysql_query
函数的返回值是资源标识符;将此与reserve.php
中的0进行比较可能与您的预期不同。也许你想要mysql_num_rows
而不是?
请停止使用古老的MySQL扩展程序编写新代码:它已不再维护,社区已开始deprecation process。相反,您应该使用改进的MySQLi扩展名或PDO抽象层。
请避免将变量(尤其是来自用户的变量)放入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'");
}