Mysql继续删除错误的表行

时间:2016-12-16 04:51:41

标签: php mysql

用户应该能够删除特定行,但程序会一直删除第一行。我找到了答案here试过它没有用。我不知道我做错了什么。

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.'; 

3 个答案:

答案 0 :(得分:1)

设计正确吗?
在您之前的问题中,我评论了您的设计是否正确。使用产品ID作为购物车商品ID就像你在做ehre一样没有意义。

<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删除实际上意味着从产品所有用户中删除购物车中的所有商品$ product ['id']

这让我想到了第二点。为什么表格中同时包含产品名称和产品ID?只需要产品ID。进入删除。

结论,您的表设计错误或查询设计错误。

第一行是什么?

  

程序不断删除第一行。

您的查询中没有订单。所以这里没有第一行的东西。实际发生的事情可能就是我在第一段中描述的内容。

SQL注入
现在是一个重大的安全问题。

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

这是一种查询的可怕方式。有一天你会发现不只是一行,而是整个数据库都被删除了。阅读PDO准备好的声明。

答案 1 :(得分:0)

  

如果没有 WHERE 子句,删除查询将删除所有行,   否则它会删除与 WHERE caluse匹配的行。

如果它没有按预期工作,则检查包含id的变量,如:

echo $cart_item_id;
exit;

并查看它包含的内容。

答案 2 :(得分:-1)

决定使用href更简单的方法。

<强> cart.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");