【问题标题】:Cant remove item with session array in shopping cart无法在购物车中删除带有会话数组的项目
【发布时间】:2015-08-19 21:08:35
【问题描述】:

我有一个用于购物车的会话数组,但问题是当我尝试使用 UNSET 命令删除所选项目时,它似乎不起作用。有人请帮助我。我喜欢根据产品 ID 和尺寸删除该项目,因为我的购物车中的某些其他项目可能具有相同的产品 ID 和不同的尺寸。下面是我的代码:

我的购物车会话结构:

$_SESSION['cart_items'][$id.'-'.$size] = array('id'=> $id,'code' => $code, 'Quantity' => $quantity, 'Size' => $size);

删除项目的编码:

    $size = $_GET['Product_Size'];
$id = $_GET['Product_ID'];

echo $id.$size;

if(!isset($_SESSION['cart_items'])){
    echo "<script type='text/javascript'>alert('Shopping list is empty!');
        window.history.back();</script>";   
}

if (isset($_SESSION['cart_items'])) {
    //print_r($_SESSION['cart_items']);
    foreach ($_SESSION['cart_items'] as $key => $value) {
    if ($key == $id.'-'.$size) {
        unset($_SESSION['cart_items'][$key]);
    //print_r($_SESSION['cart_items']);
        echo "<script type='text/javascript'>alert('Successful remove!');
        window.history.back();</script>";   
        break;  
                                                         }
    else
        {
        echo "<script type='text/javascript'>alert('Not found!');
        window.history.back();</script>";     
        }    
                                                        }

}

【问题讨论】:

  • 怎么不工作了?你能指出输出是什么,你实际上期望做什么?
  • 输出说“成功删除”,就像我放置的回声一样。但是当回到购物车页面时,我之前删除的项目仍然存在。我已经为我的购物车做 COUNT 和 PRINT_R 来检查它。删除所选项目之前的数量结果仍然相同。

标签: php session


【解决方案1】:

foreach循环语法中你犯了一个逻辑错误,$_SESSION['cart_items']的内容是一个包含一些键和值的数组,键是$id-$size格式,值是包含更多信息。所以“钥匙”是你应该检查的,改变你的代码如下:

foreach ($_SESSION['cart_items'] as $key => $value) {
    if ($key == $id.'-'.$size) {
        unset($_SESSION['cart_items'][$key]);
        // ... (the rest of the code)

【讨论】:

  • 无效。 :( 我尝试 PRINT_R 结果是:[0] => Array ([id] => 9 [code] => X001 [Quantity] => 1 [Size] => Free) [1] => Array ( [id] => 12 [code] => X004 [Quantity] => 3 [Size] => Free) [2] => Array ([id] => 10 [code] => X002 [Quantity] => 1 [大小] => M) [3] => 数组 ([id] => 10 [代码] => X002 [数量] => 1 [大小] => S)
  • @Joe 产生上述输出的print_r() 的参数是什么?
  • 对不起我的错误。发生这种情况是因为我添加了另一个代码,例如: $_SESSION['cart_items']=array_values($_SESSION['cart_items']);但我已经删除了它。现在的结果是: Array ( [ 9-Free] => Array ( [id] => 9 [code] => X001 [Quantity] => 1 [Size] => Free ) ) 但该物品仍在购物车中我试图删除它。
  • @Joe 我在本地测试过,没问题 :) 你注意到9-Free 键之前的空格了吗?另外,请在删除程序之前提供var_dump($_SESSION); 的输出。
  • 我已经更新了代码。请帮帮我..我被困了3天:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多