从session中删除数组中的一个项目

3

我正在尝试从存储的会话中删除一个数组项。我尝试了以下方法,但它会反转并实际上增加更多!

因此,这是我的foreach循环,其中产品显示在购物车中,并带有从购物车中删除的按钮:

foreach ($_SESSION['products'] as $product) {
    $name = $product['name'];
    $id = $product['id'];
    $price = $product['price'];
    $img = $product['img'];
    $sku = $product['sku'];
    $description = $product['description'];

    echo '<a href="single_product.php?product_id=' . $product['products'] . '">';
    echo "<img src='$img'><br />";
    echo "Product: $name<br />";
    echo "Price: $price | ID: $id<br />";
    echo "$description";
    echo '</a><br /><br />';
    echo '<form action="removeItem.php" method="post">
            <input type="hidden" name="product_id" value="' . $product['id'] . '" />
            <button name="removeItem">Remove</button>
          </form>';    

    $sum += $price;

}

这里是用于删除该元素的表单,但实际上当你点击删除时会添加更多内容:

$_SESSION['products'][] = $itemid;  
$id = $_POST['id']; 

unset($_SESSION['products'][$id]);  
header("location:basket.php"); 

你只是在单个产品中取消设置ID,你可能想要取消设置整个产品。 - Martijn
是的,没错,我很困惑,不知道我在这里做错了什么... - PhpDude
1个回答

2
尝试像这样做:

试试以下方法:

$product_id = $_POST["id"];
foreach($_SESSION['products'] as $key=>$product) {
   if($product['id'] == $product_id) {
      unset($_SESSION['products'][$key]);
      break;
   }
}

它给了我白屏幕的死亡之屏!Sublime将unset($_SESSION['products'][$key];标记为错误。 - PhpDude
你复制的那一行有一个错别字,应该是:unset($_SESSION['products'][$id]); - Martijn
嗯,我已经纠正了错误,但是该商品仍然留在购物篮中... - PhpDude
执行 var_dump($_POST); 命令会输出 array(2) { ["product_id"]=> string(1) "1" ["removeItem"]=> string(0) "" },这是该产品的正确 ID。 - PhpDude
那么,您可能想将 $product_id = $_POST['id'] 更改为 $product_id = $_POST['product_id]。 - Martijn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接