我有产品的多维数组,我希望在用户更改数量而不是添加新数据时更新现有数据。我正在尝试合并,但由于某种原因,多维数组中的名称已更改,我不明白为什么。
看起来像是这样的: https://i.imgur.com/zEZVDXX.png
if(!empty($_POST["addquantity"])) {
$add_id = $_GET['add'];
$add_quantity = $_POST['addquantity'];
$sqlOrd = "SELECT * FROM products WHERE id_product = '$add_id'";
$result = mysqli_query($conn, $sqlOrd);
while($row=mysqli_fetch_assoc($result)) {
$productByCode[] = $row;
}
$itemArray = array(
$productByCode[0]["id_product"] => array(
'name' => $productByCode[0]["name"],
'id_product' => $productByCode[0]["id_product"],
'quantity' => $_POST["addquantity"],
'price' => $productByCode[0]["price"]
)
);
if(!empty($_SESSION["cart_item"])) {
if(in_array($productByCode[0]["id_product"],$_SESSION["cart_item"])) {
foreach($_SESSION["cart_item"] as $k => $v) {
if($productByCode[0]["id_product"] == $k)
$_SESSION["cart_item"][$k]["quantity"] = $_POST["addquantity"];
}
} else {
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
}
} else {
$_SESSION["cart_item"] = $itemArray;
}
}
答案 0 :(得分:1)
您可以大量简化整个代码。不需要循环,并且您知道购物车项目的键/ ID,您可以直接访问它们。除此之外,你应该注意sql注入并使用预备语句。
if (!empty($_POST["addquantity"])) {
// cast some vars around to prevent sql injection - better use prepared statements
$add_id = (int)$_GET['add'];
$add_quantity = (float)$_POST['addquantity'];
$sqlOrd = "SELECT * FROM products WHERE id_product = '$add_id' LIMIT 1";
$result = mysqli_query($conn, $sqlOrd);
$product = mysqli_fetch_assoc($result);
if (!$product) {
// some error handling..
}
$item = [
'name' => $product["name"],
'id_product' => $add_id,
'quantity' => $add_quantity,
'price' => $product["price"]
];
if (!isset($_SESSION["cart_item"])) {
$_SESSION["cart_item"] = [];
}
if (isset($_SESSION["cart_item"][$add_id])) {
$_SESSION["cart_item"][$add_id]["quantity"] += $add_quantity;
} else {
$_SESSION["cart_item"][$add_id] = $item;
}
}
答案 1 :(得分:0)
似乎问题出在in_array
,但您想使用array_key_exists
。
这个IF语句直接转到ELSE if(in_array($productByCode[0]["id_product"],$_SESSION["cart_item"]))
,因为$_SESSION["cart_item"]
中没有这样的值,然后array_merge
重置此代码$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
中的键,因为有两个项目使用相同的整数键。
所以,我的快速修复建议:
if(array_key_exists($productByCode[0]["id_product"],$_SESSION["cart_item"])) {
... rest of the code ...