从我的购物车中删除商品。删除第2项时,代码删除错误的项目

时间:2014-01-08 19:49:18

标签: php forms

我正在尝试创建一个从我的购物车中删除特定项目的按钮,到目前为止它有点工作。问题是它不一致。当我尝试删除第二个项目时,它会删除第三个项目,当购物车中有两个项目并且我删除第二个项目时,单击该按钮时它不会执行任何操作。我一定错过了什么。

我从我的数据库中提取数据,并且我从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"]);
    }
}

你能帮忙吗?

2 个答案:

答案 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'
      );