首页 > 解决方案 > 未设置的问题(PHP)

问题描述

我正在尝试从会话数组中取消设置一个项目,它取消设置一次然后再次返回。 对于 exg:-

如果我单击删除 itemId = 5,它将从会话数组中删除,然后我单击删除 itemId = 6,然后我看到旧的 itemId = 5 再次回到数组中。

/*** 从购物车中删除商品 ***/

       public function deleteCartItem($id, $customerId, $cartId, $wishlistFlag=false) // Param: ProductID, CustomerID, CartID, WishlistFlag
        {
            $conn = $_SESSION['conn'];
            $itemId = false;
            $chk = array();
           
                    $sql = "DELETE FROM cart_items WHERE product_id=? AND cart_id=?";
                    $stmt = mysqli_prepare($conn, $sql);//$result = $conn->query($sql);
                    $stmt->bind_param('ii', $item['id'],$cartId);
                    $stmt->execute();
                    $itemId = $i;
                    echo $itemId; 
                    $chk[] = $_SESSION['cart'];
                    echo'</br>'; 
                    print_r($chk);
                }
            }
            if (isset($_SESSION['cart'][$itemId])){
                unset($_SESSION['cart'][$itemId]);
       }    
} 





<?php

    $_SESSION['cart'] = array (
  0 => 
  array (
    'id' => 6154353459,
    'name' => 'pro one Night Out Mesh Tee',
    'display_brand' => 'Widow',
    'qty' => 1,
    'price' => '28.0000',
    'special_price' => 0,
    'rule_price' => '',
    'attributes' => 
    array (
      0 => 'BLACK',
      1 => 'XX-Large',
    ),
    'option80' => 18,
    'option125' => 3457,
    'child_product_id' => 61535897,
    'giftcard' => '',
    'whole_preorder' => 0,
    'preorder_shipping_date' => NULL,
    'available_qty' => 5,
    'isRefundable' => true,
    'max_sale_qty' => false,
    'isFree' => 0,
    'segment' => 
    array (
      'magento_product_id' => '65315459',
      'product_id' => 'P19335935',
      'quantity' => 1,
      'name' => 'pro one Night Out Mesh Tee',
      'brand' => 'Widow',
      'price' => 28.0,
      'special_price' => NULL,
      'regular_price' => 28.0,
      'size_type' => 'Regular',
      'manufacturer' => 'Widow',
      'trend' => 'WID goodie Hour 2020',
      'microcategory' => 'Mesh Shirt',
      'doll_category' => NULL,
      'stock_quantity' => 10,
      'sku' => 'S493660',
      'child_stock_quantity' => 1,
      'size' => 'XX-Large',
      'swatch' => 'BLACK',
    ),
  ),
  5 => 
  array (
    'id' => 615345465,
    'name' => 'pro one Night Out Mesh Leggings',
    'display_brand' => 'Widow',
    'qty' => 1,
    'price' => '30.0000',
    'special_price' => 0,
    'rule_price' => '',
    'attributes' => 
    array (
      0 => 'BLACK',
      1 => 'Medium',
    ),
    'option80' => 18,
    'option125' => 3454,
    'child_product_id' => 6315890,
    'giftcard' => '',
    'whole_preorder' => '',
    'preorder_shipping_date' => NULL,
    'available_qty' => 37,
    'isRefundable' => true,
    'max_sale_qty' => false,
    'isFree' => 0,
    'segment' => 
    array (
      'magento_product_id' => '64334515465',
      'product_id' => 'P193936',
      'quantity' => 1,
      'name' => 'pro one Night Out Mesh Leggings',
      'brand' => 'Widow',
      'price' => 30.0,
      'special_price' => NULL,
      'regular_price' => 30.0,
      'size_type' => 'Regular',
      'manufacturer' => 'Widow',
      'trend' => 'WID goodie Hour 2020',
      'microcategory' => 'Printed Leggings',
      'doll_category' => NULL,
      'stock_quantity' => 10,
      'sku' => 'S493664',
      'child_stock_quantity' => 10,
      'size' => 'Medium',
      'swatch' => 'BLACK',
    ),
  ),
  2 => 
  array (
    'id' => 615445348,
    'name' => 'pro two My Lashes Sunglasses',
    'display_brand' => '',
    'qty' => 1,
    'price' => '15.0000',
    'special_price' => 0,
    'rule_price' => '',
    'attributes' => 
    array (
      0 => 'BLACK',
      1 => 'ONE SIZE',
    ),
    'option80' => 18,
    'option125' => 6212,
    'child_product_id' => 6154345358,
    'giftcard' => '',
    'whole_preorder' => '',
    'preorder_shipping_date' => NULL,
    'available_qty' => 295,
    'isRefundable' => true,
    'max_sale_qty' => false,
    'isFree' => 0,
    'segment' => 
    array (
      'magento_product_id' => '6153453448',
      'product_id' => 'P19645642180',
      'quantity' => 1,
      'name' => 'pro two My Lashes Sunglasses',
      'brand' => '',
      'price' => 15.0,
      'special_price' => NULL,
      'regular_price' => 15.0,
      'size_type' => 'Regular',
      'manufacturer' => 'CIEL',
      'trend' => 'WID goodie Hour 2020',
      'microcategory' => 'Cat Eye Sunglasses',
      'category' => 'Accessories,Sunglasses,Cat Eye Sunglasses',
      'special_category' => 'What\'s New,Char Test Category,Widow',
      'doll_category' => NULL,
      'stock_quantity' => 10,
      'sku' => 'S486477',
      'child_stock_quantity' => 10,
      'size' => 'ONE SIZE',
      'swatch' => 'BLACK',
    ),
  ),
  3 => 
  array (
    'id' => 61465645461,
    'name' => 'pro one Night Out goodie Dress',
    'display_brand' => 'Widow',
    'qty' => 1,
    'price' => '45.0000',
    'special_price' => 0,
    'rule_price' => '',
    'attributes' => 
    array (
      0 => 'BLACK',
      1 => 'X-Large',
    ),
    'option80' => 18,
    'option125' => 3456,
    'giftcard' => '',
    'whole_preorder' => '',
    'preorder_shipping_date' => NULL,
    'available_qty' => 12,
    'isRefundable' => true,
    'max_sale_qty' => false,
    'isFree' => 0,
    'segment' => 
    array (
      'magento_product_id' => '616465461',
      'product_id' => 'P1935446934',
      'quantity' => 1,
      'name' => 'pro one Night Out goodie Dress',
      'brand' => 'Widow',
      'price' => 45.0,
      'special_price' => NULL,
      'regular_price' => 45.0,
      'size_type' => 'Regular',
      'manufacturer' => 'Widow',
      'trend' => 'WID goodie Hour 2020',
      'microcategory' => 'goodie Dresses',
      'category' => 'Clothing,Dresses,Mini,goodie Dresses',
      'special_category' => 'Brandsgoodie,Char Test Category,Widow,Widow',
      'doll_category' => NULL,
      'stock_quantity' => 10,
      'sku' => 'S493652',
      'child_stock_quantity' => 10,
      'size' => 'X-Large',
      'swatch' => 'BLACK',
    ),
  ),
  4 => 
  array (
    'id' => 6154566225,
    'name' => 'Feelings Maxi Dress',
    'display_brand' => 'Widow',
    'qty' => 1,
    'price' => '58.0000',
    'special_price' => 0,
    'rule_price' => '',
    'attributes' => 
    array (
      0 => 'BLACK',
      1 => 'Large',
    ),
    'option80' => 18,
    'option125' => 3455,
    'child_product_id' => 61456455677,
    'giftcard' => '',
    'whole_preorder' => '',
    'preorder_shipping_date' => NULL,
    'available_qty' => 30,
    'isRefundable' => true,
    'max_sale_qty' => false,
    'isFree' => 0,
    'segment' => 
    array (
      'magento_product_id' => '614565225',
      'product_id' => 'P1945652050',
      'quantity' => 1,
      'name' => 'Phantom Feelings Maxi Dress',
      'brand' => 'Widow',
      'price' => 58.0,
      'special_price' => NULL,
      'regular_price' => 58.0,
      'size_type' => 'Regular',
      'manufacturer' => 'Widow',
      'trend' => 'WID goodie Hour 2020',
      'microcategory' => 'Maxi Dresses',
      'category' => 'Dresses,Midi & Maxi,Maxi Dresses',
      'special_category' => 'Brandsgoodie,Char Test Category,Widow,Widow',
      'doll_category' => NULL,
      'stock_quantity' => 10,
      'sku' => 'S485794',
      'child_stock_quantity' => 10,
      'size' => 'Large',
      'swatch' => 'BLACK',
    ),
  )
  );

$itemId = 5; // comes dybamically;
   if (   isset($_SESSION['cart'][$itemId])) {
            unset($_SESSION['cart'][$itemId]);
    }
?>

我不明白,有什么想法吗?

您还可以查看沙箱 - http://sandbox.onlinephpfunctions.com/code/6bab394d1da39a301ce82b974022da7b7efaface

请在此处参考整个代码 - PHP SESSION UPDATE ISSUE

谢谢

标签: phpsession

解决方案


您可能正在重新读取会话数据,以便您所做的删除被覆盖。

<?php
$cart = $_SESSION['cart'];
unset($cart[5]);
echo 'deletion confirmed';

//later in execution..
//accidental re-read of cart from session-variable.
//BAD CODE STARTS HERE
$cart = $_SESSION['cart']; //error since you're re-reading cart from session.
//BAD CODE END
//calc totals in basket or something..
$totals = 0;
foreach($cart as $item) {
  $totals = $totals + $item['qty'] * $item['price'];
}

//somewhere in the script, the session variable is updated.
$_SESSION['cart'] = $cart;

重要知识 PHP 默认按值传递大多数变量,这意味着

$cart = $_SESSION['cart'];

将 $_SESSION['cart'] 的内容复制到 $cart。

对 $cart 所做的任何更改都不会在 $_SESSION['cart'] 中自动更新。

如果您不想要副本而是参考,您可以使用:

$cart = &$_SESSION['cart'];

并且您不需要将 $cart 保存到 $_SESSION。

(只需确保 $_SESSION['cart'] 在进行引用时已初始化)

** 和 **

会话变量往往会变得一团糟。在您的应用程序中使用 getter 和 setter。


推荐阅读