2016-12-16 48 views
-1

用戶應該可以刪除特定的行,但程序會繼續刪除第一行。我找到了答案here試過它沒有工作。我不知道我做錯了什麼。Mysql不斷刪除錯誤的表格行

cart.php

<form id='updateCartForm' action="update_cart.php" method="get"> 
      <input name="cart_item_name" type = "hidden" id ="cart_item_name" value='<?=$product['prod_name'];?>'> 
<input name="cart_item_id" type = "hidden" id ="cart_item_id" value='<?=$product['id'];?>'> 
</form> 

update_cart.php

<?php 
require_once "core/db.php" 

//get data from form 
$cart_item_name = $_GET['cart_item_name']; 
$cart_item_id = $_GET['cart_item_id']; 

//execute query 
$sql = "DELETE FROM cart WHERE id =" .$cart_item_id; 
$db->query($sql); 

//flash success message 
$domain =($_SERVER['HTTP_HOST'] != 'localhost')?'.'.$_SERVER['HTTP_HOST']:false; 
$_SESSION['success_flash'] = $cart_item_name. ' was deleted from your cart.'; 
+0

檢查您在'$ cart_item_id'獲得的價值。假設有人發送'cart_item_id'爲'1; DROP TABLE cart;'讀一下[SQL Injection](http://php.net/manual/en/security.database.sql-injection.php) – bansi

+0

@bansi他'只需發送'id'值,整個表就會被清除,因此'id = id'總是成立的。 –

回答

0

刪除查詢將刪除所有行,如果沒有WHERE子句在那裏, 否則刪除與WHERE匹配的行 caluse。

如果如預期比穿上變量檢查包含像ID它不工作:

echo $cart_item_id; 
exit; 

,看看它包含的內容。

1

設計是否正確?
在你之前的問題中,我評論你是否有你的設計。使用產品ID作爲購物車物品ID,因爲您正在進行購物時沒有意義。

<form id='updateCartForm' action="update_cart.php" method="get"> 
      <input name="cart_item_name" type = "hidden" id ="cart_item_name" value='<?=$product['prod_name'];?>'> 
<input name="cart_item_id" type = "hidden" id ="cart_item_id" value='<?=$product['id'];?>'> 
</form> 

使用該cart_item_id實際上意味着刪除從該產品是所有用戶的購物車的所有項目中刪除是$產品[「身份證」]

這使我的第二點。爲什麼你在表單中同時擁有產品名稱和產品ID?只需要產品ID。進入刪除。

結論,你有錯誤的表設計或錯誤的查詢設計。

第一行是什麼?

該程序保持刪除第一行。

查詢中沒有排序。所以這裏沒有第一行這樣的東西。實際上發生的事情可能是我在第一段中描述的。

SQL注入
現在是一個主要的安全問題。

$sql = "DELETE FROM cart WHERE id =" .$cart_item_id; 
$db->query($sql); 

這是一個可怕的方式來做一個查詢。你有一天會發現,不只是一行,而是整個數據庫已被刪除。閱讀PDO準備的報表。

+0

PHP和所有其他語言都很難;很多頭痛,但他們在我身上慢慢增長 – Chad

+0

PHP新手?希望你使用的是PDO而不是mysqli。 PDO更通用,可以與除mysql以外的數據庫一起使用。節省您不得不學習postgresql/php界面,mssql/php界面等。 – e4c5

+0

是的,我是新來的。但是,我認爲數據庫的設計是正確的,你在這裏沒有看到的是,在頁面上有一個查詢,它將產品和購物車表連接在一起,這使我可以顯示購物車中的產品信息。所以當我使用$ product ['id]時,它實際上是cart_item_id(cartRowId本身),但是如果我使用$ product ['product_id'],那麼這會給我產品的id。這就是爲什麼我很困惑,爲什麼錯誤的產品被刪除。 – Chad

-1

決定用更容易的方式使用href。

購物車。PHP

<a href="update_cart.php?productcartid=<?=$product['id'];?>">&times</a> 

update_cart.php

<?php 
ob_start(); 
require_once 'core/db.php'; 

//delete from cart 

      $productcartid =$_REQUEST['productcartid']; 

      // sending query 
      $del = "DELETE FROM cart WHERE id='$productcartid'"; 
      $db->query($del); 
      header("Location: cart.php"); 
+0

雖然這是你自己的答案這是錯誤的,因爲你仍然傾向於自己打開sql注入。 – e4c5

+0

@ e4c5:兄弟,顯然這是安全的。我在這裏閱讀了關於它的內容。 – Chad

+0

你已經弄錯了。並非所有的stackoverflow答案都是一樣的。比如你回答自己是錯誤的,同樣在這裏會有其他答案是錯誤的。只是搜索我如何防止PHP中的SQL注入 – e4c5