0

我正在构建一个网页以将相机预订提交到 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);
?> 

但是,即使不满足这些条件,它也会一直进行预订。为什么会这样?谢谢,戴恩。

4

2 回答 2

0

mysql_fetch_array($result) 返回一个数组,如

array('Camera' => 'Whatever')

所以将下面的行改为阅读

$result_array[] = $row['Camera'];
于 2012-10-11T23:58:26.777 回答
0

你的逻辑有一个根本性的缺陷。您需要唯一值,而当前的实现不提供任何此类保证(在 Wikipedia 上了解 ACID:http: //en.m.wikipedia.org/wiki/ACID)。

不过你很幸运。MySQL 恰好可以轻松提供您所需要的东西。在 Camera 列上创建唯一索引 (http://dev.mysql.com/doc/refman/5.5/en/create-index.html)。然后不要检查以前的同名条目。只需尝试进行插入。MySQL 将返回一个易于处理的错误,并且您的代码变得更简单、更易于阅读和管理。

于 2012-10-12T00:18:02.090 回答