繁体   English   中英

in_array函数始终返回true

[英]in_array function returning true always

我正在构建一个网页,以将相机预订提交到MYSQL数据库。 该网页具有html前端,可将其转发到下一个PHP页面,然后将其提交给MYSQL。当前,客户希望没有办法重复预订Cameras。 为实现此目的,我构建了以下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);
?> 

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

mysql_fetch_array($ result)返回数组

array('Camera' => 'Whatever')

因此,将以下行更改为

$result_array[] = $row['Camera'];

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM