用户应该能够删除特定行,但程序会一直删除第一行。我找到了答案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.';
答案 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'];?>">×</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");