我正在尝试创建一个从我的购物车中删除特定项目的按钮,到目前为止它有点工作。问题是它不一致。当我尝试删除第二个项目时,它会删除第三个项目,当购物车中有两个项目并且我删除第二个项目时,单击该按钮时它不会执行任何操作。我一定错过了什么。
我从我的数据库中提取数据,并且我从1开始i
。
$i=1;
foreach ($_SESSION["cart_array"] as $each_item) {
$item_id = $each_item['item_id'];
这是我尝试过的。我的表格看起来像这样..
<form action='cart.php' method='post'>
<input name='deleteBtn" . $item_id . "'type='submit' value='Remove This Item' />
<input name='index_to_remove' type='hidden' value='" . $i . "' /></form>
i++;
要删除该项目,我有:
if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "") {
// Access the array and run code to remove that array index
$key_to_remove = $_POST['index_to_remove'];
if (count($_SESSION["cart_array"]) <= 1) {
unset($_SESSION["cart_array"]);
} else {
unset($_SESSION["cart_array"]["$key_to_remove"]);
//In case I want it to sort - sort($_SESSION["cart_array"]);
}
}
你能帮忙吗?
答案 0 :(得分:1)
您发布的代码永远不会增加$i
,因此$_POST['index_to_remove']
始终为1
。这将每次都删除$_SESSION["cart_array"]["1"]
。
无法从此代码中了解"1"
中哪个项目具有索引$_SESSION["cart_array"]
,但关键点是您为每个项目使用$_POST['index_to_remove']
的相同值。
答案 1 :(得分:0)
你应该使用数组的索引(键)。数组是key =&gt;值对的列表:
foreach ($_SESSION["cart_array"] as $key => $each_item) {
...
}
现在在表单中使用该键:
<input name='index_to_remove' type='hidden' value='" . $key . "' />
最后取消设置array_key(如果存在):
...
$key_to_remove = $_POST['index_to_remove'];
if(array_key_exists($key_to_remove, $_SESSION["cart_array"])){
unset($_SESSION["cart_array"][$key_to_remove]);
}
....
建议:由于你有一个(唯一的)item_id,为什么不在你的数组中使用item_id作为键(标识符)来开始?而不是在你的价值观中。
所以这个:
$_SESSION["cart_array"][0] = array(
'item_id' => 'IdOfYourItem',
'item_name' => 'nameOfYourItem',
'quantity' => 1,
'other_key' => 'otherValue'
);
可能是这样的:
$_SESSION["cart_array"]['IdOfYourItem'] = array(
'item_name' => 'nameOfYourItem',
'quantity' => 1,
'other_key' => 'otherValue'
);