0

カメラの予約を MYSQL データベースに送信する Web ページを作成しています。この Web ページには、それを次の PHP ページに転送する html フロントエンドがあり、そこからその情報が 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

あなたの論理には根本的な欠陥があります。一意の値が必要であり、現在の実装ではそのような保証は提供されていません(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 に答える
0

mysql_fetch_array($result) は次のような配列を返します

array('Camera' => 'Whatever')

したがって、以下の行を変更して読んでください

$result_array[] = $row['Camera'];
于 2012-10-11T23:58:26.777 に答える