2012-10-11 84 views
0

我正在構建一個網頁來提交相機預訂到MYSQL數據庫。這個網頁有一個html前端,將其轉發到以下PHP頁面,然後將該信息提交給MYSQL 目前,客戶希望無法對攝像機進行重複預訂。爲了實現這一點,我構建了下面的PHP頁面,該頁面檢查html前端($ _POST [camera])中選定的相機是否與$ result_array數組中的任何相同。代碼如下:in_array函數返回true總是

<?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); 
?> 

但是,即使這些條件未得到滿足,它也始終如此預訂。爲什麼會這樣? 謝謝, Dayne。

+1

看起來像一個複雜的方式去實現你想實現的目標......究竟是什麼?此外,可能希望更改您的in_array POST檢查以引用元素 - '(in_array($ _ POST ['camera'],$ result_array)' – PenguinCoder

+0

您是如何驗證$ x和$ y的值的?應該清理你的查詢... –

+0

在in_array條件下,你可以打印POST ['camera']和result_array的銷售並分享結果。 – Gavin

回答

0

mysql_fetch_array($結果)返回類似

array('Camera' => 'Whatever') 

陣列因此改變線下閱讀

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

有一個在你的邏輯根本缺陷。你有一個獨特的價值要求,目前的實施不提供任何這樣的保證(瞭解維基百科上的ACID:http://en.m.wikipedia.org/wiki/ACID)。

雖然你很幸運。 MySQL恰好提供了你所需要的一切,只需很少的努力。在相機列上創建唯一索引(http://dev.mysql.com/doc/refman/5.5/en/create-index.html)。然後不要檢查具有相同名稱的以前的條目。只需嘗試做一個插入。 MySQL將返回一個容易處理的錯誤,你的代碼變得更簡單,更易於閱讀和管理。