2012-05-28 55 views
0

我一直在做很多研究,但我想我仍然没有找到答案。这是一个座位预留,我不擅长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也是如此。当我检查数据库时,它已成功插入并且为0的chair_status。我不知道哪个部分是错误的。我真的需要你的帮助,谢谢!

+3

对于初学者来说,你不会逃避你的SQL查询。其次,你仍然使用mysql_ –

+2

@ColeJohnson除非你提供了关于你在说什么的提问者上下文,否则这个评论是非常无益的。不是每个人都知道PDO或MySQLi,以及计划中的[尽管尚未在手册中记录](http://us.php.net/manual/en/ref.mysql.php),而不赞同'mysql _ *( )'功能 –

回答

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注入的影响。您应该使用预准备语句,将变量作为参数传递给MySQL,而这些参数不会针对SQL进行评估。阅读关于Bobby Tables的更多信息。

0

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

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

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'"); 
}