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

Updating PHP Shopping Card Data via $_SESSION

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

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

我的代码如下。请让我知道我的 post 是否应该包含任何其他组件。谢谢。

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;
        }   
    }

语句 in_array([$productById[0]["product_id"]],$_SESSION["cart_item"]) 在您的情况下将始终 return false

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

我检查了代码,发现你的 $_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"]))) {

这会起作用。