正在通过 $_SESSION 更新 PHP 购物卡数据
Updating PHP Shopping Card Data via $_SESSION
我在更新购物车中的产品数量时遇到问题。
我使用数组 $productArray
来存储数据库中的 product_id
、product_name
、quantity
和 product_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"]))) {
这会起作用。
我在更新购物车中的产品数量时遇到问题。
我使用数组 $productArray
来存储数据库中的 product_id
、product_name
、quantity
和 product_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"]))) {
这会起作用。