通过$ _SESSION更新PHP购物卡数据

时间:2015-05-15 04:44:15

标签: php session session-variables shopping-cart

我在购物车中更新产品数量时遇到问题。 我使用数组$productArray来存储数据库中的product_idproduct_namequantityproduct_price。然后,检查我的$_SESSION中是否已有包含该产品ID的产品。如果是,则更新数量,如果不是,则将其合并到$_SESSION

这里的问题是我无法访问代码,它检查product_id已经在会话变量中的位置,因此它会将相同的产品合并到购物车而不是更新数量

我的代码如下。如果我的帖子中包含任何其他组件,请告知我们。感谢。

case "add":
    if(!empty($_POST["qty"])) {
        $productById = $db_handle->runQuery("SELECT * FROM products WHERE  product_id= " . $_GET["pid"]);

$productArray = array($productById[0] ["product_id"]=>array('product_name'=>$productById[0]["product_name"], 'product_id'=>$productById[0]["product_id"], 'quantity'=>$_POST["qty"], 'product_price'=>$productById[0]["product_price"]));

        if (!empty($_SESSION["cart_item"])) {
            if (in_array([$productById[0]["product_id"]],$_SESSION["cart_item"])) {
                foreach ($_SESSION["cart_item"] as $k => $v) {
                    if ($productById[0]["product_id"] == $k)
                        $_SESSION["cart_item"][$k]["quantity"] = $_POST["qty"];
                }
            } else {
                $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$productArray);
            }
        } else {
            $_SESSION["cart_item"] = $productArray;
        }   
    }

2 个答案:

答案 0 :(得分:0)

语句in_array([$productById[0]["product_id"]],$_SESSION["cart_item"])将始终返回false

您应该将其更改为isset($productById[0]["product_id"], $_SESSION["cart_item"])我将您将每个产品信息保存为元素的客户,其中密钥是$_SESSION["cart_item"]数组中的产品ID。

答案 1 :(得分:0)

我检查了代码,发现您的$ _SESSION [" cart_item"]变量将为

array(
    11=>array('product_name'=>'abc', 'product_id'=>11, 'quantity'=>2, 'product_price'=>20.00)
    12=>array('product_name'=>'xyz', 'product_id'=>12, 'quantity'=>3, 'product_price'=>23.22)
);

所以你必须更换

 if(in_array([$productById[0]["product_id"]],$_SESSION["cart_item"])) {

来自

 if(in_array([$productById[0]["product_id"]],array_keys($_SESSION["cart_item"]))) {

这样可行。