首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unset问题(PHP)

Unset问题(PHP)
EN

Stack Overflow用户
提问于 2020-11-12 09:10:44
回答 5查看 250关注 0票数 3

我试图从会话数组中取消一个项,它取消一次,然后再带回来。for exg :-

如果单击以删除itemId = 5,则从会话数组中删除,然后单击以删除itemId = 6,则会看到旧的itemId =5再次出现在数组中。

/***从购物车中删除项目*/

代码语言:javascript
复制
       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

谢谢你

EN

回答 5

Stack Overflow用户

发布于 2020-11-17 10:25:54

您可以很好地重新读取会话数据,这样您所做的删除就会被覆盖。

代码语言:javascript
复制
<?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;

很好地知道作为缺省值传递大多数变量,这意味着

$cart =$_SESSION‘’cart‘;

将$_SESSION‘$cart’的内容复制到$cart中。

对$cart所做的任何更改都将在$_SESSION‘’cart‘中自动更新而不是

如果您不想要一个副本而是一个引用,您可以使用:

代码语言:javascript
复制
$cart = &$_SESSION['cart'];

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

(只需确保在进行引用时初始化$_SESSION‘’cart‘)

**和**

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

票数 2
EN

Stack Overflow用户

发布于 2020-11-12 09:53:20

最好的方法是在取消设置之后,从会话中获取更新的数组并再次声明它。

代码语言:javascript
复制
$cart_array = 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',
        ),
    )
    );

if(!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = $cart_array;
} else {
    $_SESSION['cart'] = (array) $_SESSION['cart'];
}

$itemId = 3;

if (isset($_SESSION['cart'][$itemId])) {
    unset($_SESSION['cart'][$itemId]);
}

print_r($_SESSION['cart']);

现在它将不再返回删除项,除非您破坏了会话。

票数 1
EN

Stack Overflow用户

发布于 2020-11-18 14:08:38

为什么在$item['id']中使用$stmt->bind_param( (而不是$id)。$item不是函数的参数。

类似地,变量$i$itemId = $i;中来自何处?

我已经写了一个简化的版本,你的问题,它的工作,如预期。它使用一个表单和按钮将数组索引交给PHP脚本。如果您有不同的设置(比如使用Ajax),则需要澄清这一点。

代码语言:javascript
复制
session_start();

if (!isset($_SESSION['cart']) || sizeof($_SESSION['cart']) === 0)
 {
  echo('Resetting cart.' . PHP_EOL);
  $_SESSION['cart'] = [0 =>'zero', 1 =>'one', 2 =>'two', 3 =>'three', 4 =>'four'];
 }

echo('<pre>before ' . print_r($_SESSION['cart'], TRUE) . '</pre>');

$itemId = isset($_GET['itemid']) ? $_GET['itemid'] : FALSE;
if ($itemId !== FALSE)
 {
  if (isset($_SESSION['cart'][$itemId]))
   {
    echo('Unsetting &raquo;' . $itemId . '&laquo;.' . PHP_EOL);
    unset($_SESSION['cart'][$itemId]);
   }
  else
    echo('&raquo;' . $itemId . '&laquo; not in cart.' . PHP_EOL);
 }
else
  echo('No item ID given.' . PHP_EOL);

echo('<pre>after ' . print_r($_SESSION['cart'], TRUE) . '</pre>');

echo('<form method="get" action="' . $_SERVER['PHP_SELF'] . '">' . PHP_EOL);
foreach ($_SESSION['cart'] as $key=>$value)
  echo('<button name="itemid" value="' . $key .  '">' . $value . '</button>' . PHP_EOL);
echo('</form>' . PHP_EOL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64800921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档