2015-06-24 92 views
0

當我單擊立即購買按鈕時,我正在檢查記錄(產品ID)是否存在於我的mysql數據庫表中,如果它們沒有創建另一個,並且if他們這樣做,只是更新現有的。在MySQL中檢查記錄並創建(如果不存在)

它創建第一個記錄罰款,它甚至更新時,我再次點擊它沒有另一條記錄,但當我點擊另一個產品時,它創建另一個記錄,它永遠不會更新以下記錄。

換句話說,它只是更新第一個產品ID,併爲其餘的創建新的記錄。

這裏是我的表enter image description here

function add_to_cart(){ 

global $connection; 

$ip = getIp(); 



if(isset($_GET['add'])) { 

$product_id = $_GET['id']; 
$product_price = get_item_price($product_id); 


$query = "SELECT * FROM cart WHERE ip_address = '{$ip}' "; 
$check_query = query($query); 
confirm($check_query); 
$row = fetch_array($check_query); 
$db_product_id = $row['product_id']; 

if(mysqli_num_rows($check_query) === 0 || $product_id != $db_product_id) { 

$query = "INSERT INTO cart(product_id,ip_address,quantity,price_sum) VALUES('{$product_id}', '{$ip}' ,1, '{$product_price}')"; 

$send_query_cart = query($query); 
confirm($send_query_cart); 
redirect("index.php"); 

} else { 

$query = "UPDATE cart SET quantity = quantity + 1, price_sum = price_sum + '{$product_price}' WHERE product_id = '{$product_id}' "; 
$update_records = query($query); 
confirm($update_records); 
redirect("index.php"); 



} 




} 








} 
+0

對不起,我做到了,我有我的帽子上,並沒有發現太多.... – ricosuave

+1

,而不是'死(「查詢失敗」 );'do'或死(mysqli_error($ con))'到'mysqli_query()'並查看是否有錯誤。 –

+0

是的,我也這麼做......我沒有得到任何錯誤。 – ricosuave

回答

0

也許是最好的解決方案是建立在(我假設)一UNIQUE約束product_idip_address的圖像。

ALTER TABLE `cart` ADD UNIQUE `unique_index`(`ip_address`, `product_id`); 

然後,我不會將商品的價格存儲在購物車中。物品的價格可以在物品表中查找。訂單完成後,您可以保存單個商品的價格,因爲它可能會發生變化,但是當它在購物車中時,您需要最近的價格。

一旦你這樣做,你的查詢可以簡化爲

$query = "INSERT INTO cart(product_id,ip_address,quantity) 
       VALUES ('{$product_id}', '{$ip}', 1) 
      ON DUPLICATE KEY UPDATE 
       quantity = quantity+1"; 

,你甚至不用檢查它 - 查詢將處理更新或自動插入。

此外,我不會依賴ip_address來識別用戶 - 如果某人在乘坐汽車時在他們的手機上購物,它很容易改變。同一路由器上的兩個人可能會看起來與您的網站具有相同的IP地址。我會在會話或安全cookie中保存某些內容並使用它來識別它們。

要獲得總計,你會做這樣的事情:

$totals = "SELECT cart.product_id, cart.quantity * products.price as product_price_total 
      FROM cart 
      LEFT JOIN products USING(products.id = cart.product_id) 
      WHERE ip_address = '{$ip}'"; 
+0

謝謝戴夫,如何在phpmyadmin中創建約束?我需要把它放在一個函數中,但對約束還不太瞭解。 – ricosuave

+0

'ALTER TABLE'cart' ADD UNIQUE'unique_index'('ip_address','product_id');' – dave

+0

什麼意思是什麼,如果ALTER TABLE購物車ADD UNIQUE unique_index(ip_address,product_id)在phpmyadmin查詢窗口中?或者我可以使用$ query =「ALTER TABLE cart ADD ADD UNIQUE unique_index(ip_address,product_id)」發送它; $ alter_table = query($ query); – ricosuave

相關問題