我在购物车中更新产品数量时遇到问题。
我使用数组$productArray
来存储数据库中的product_id
,product_name
,quantity
和product_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;
}
}
答案 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"]))) {
这样可行。