我正在构建一个网页,将摄像机预订提交到MYSQL数据库。此网页有一个html前端,将其转发到以下PHP页面,然后将该信息提交给MYSQL 目前,客户希望无法对相机进行重复预订。为了实现这一点,我构建了以下PHP页面,它检查html前端($ _POST [camera])中选择的摄像头是否与$ result_array数组中的任何相同。代码如下:
<?php
$con = mysql_connect("****","*****","*******");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("****", $con);
$query = "SELECT Camera FROM T_Bookings";
$result = mysql_query($query) or die ("no query");
$result_array = array();
while($row = mysql_fetch_array($result)) {
$result_array[] = $row;
}
$fixed_array = array_keys($result_array);
if (in_array($_POST[camera],$result_array)){
$x = 1;
$y = 2;
}
if($x + $y == 3){
echo "Camera already booked!";
}
else {
mysql_query("INSERT INTO T_Bookings (F_Name, L_Name, Camera, Bag, Cable, Tripod, MemoryCard, Date, Authorised)
VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[camera]','$_POST[bag]','$_POST[cable]','$_POST[tripod]','$_POST[memory]','$_POST[date]',)");
echo "1 record added";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
}
mysql_close($con);
?>
但是,即使不符合这些条件,也会一直预订。为什么会这样? 谢谢, 戴恩。
答案 0 :(得分:0)
mysql_fetch_array($ result)返回一个类似
的数组array('Camera' => 'Whatever')
所以改变下面的行来阅读
$result_array[] = $row['Camera'];
答案 1 :(得分:0)
你的逻辑存在根本缺陷。您需要一个唯一的值,并且当前的实现不提供任何此类保证(在维基百科上了解ACID:http://en.m.wikipedia.org/wiki/ACID)。
你很幸运。 MySQL碰巧只需要很少的努力即可提供您所需要的功能。在Camera列上创建一个唯一索引(http://dev.mysql.com/doc/refman/5.5/en/create-index.html)。然后不要检查具有相同名称的先前条目。只需尝试插入即可。 MySQL将返回一个容易处理的错误,您的代码变得更简单,更易于阅读和管理。