PHP 添加到购物车不超过 2 种产品


php add to cart not adding more than 2 products

提前感谢您的帮助。

我正在尝试制作购物车,它几乎完成了,但只有一个问题,那就是当我尝试添加第 3 个产品或说超过 2 个产品时,它只向我显示 2 个产品并从列表中删除第一个条目。这是我添加到购物车的代码。

<?php
session_start();
include_once './includes/conn_manager.php';
//empty cart by destroying current session
if (isset($_GET['empty_cart']) && $_GET['empty_cart'] == 1) {
    $return_url = base64_decode($_GET['return_url']); //retuen url
    unset($_SESSION['cart']);
    header("Location: " . $return_url);
}
//add item in cart
if (isset($_POST['type']) && $_POST['type'] == 'add') {
    $qtt = filter_input(INPUT_POST, 'qtt', FILTER_DEFAULT); //product quantity
    $e1 = explode(" - Rs.:", $qtt);
    $quantity = trim($e1[0]);
    $price = trim($e1[1]);
    $pid = filter_input(INPUT_POST, 'prid', FILTER_DEFAULT); // product id
    //$return_url = base64_decode($_POST['return_url']); // return url
    $result = $mysqli->query("select * from pro_data where pro_uid='$pid' limit 1");//getting product info from db
    $obj = $result->fetch_object(); //fetching product info as array of objects
    if($result)// check if $result worked
    {
        // now we have the product info
        // making product info array
        $new_product = array(array('pnm'=>$obj->pro_nm,'pcode'=>$pid,'pqtt'=>$quantity,'pprice'=>$price));
        if(isset($_SESSION['cart'])){
            $isin = false;
            foreach ($_SESSION['cart'] as $cart_item){
                if($cart_item['pcode'] == $pid){
                    $products = array(array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$quantity,'pprice'=>$price));
                    $isin = true;
                }  else {
                    $products = array(array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$cart_item["pqtt"],'pprice'=>$cart_item["pprice"]));
                }
            }
            if($isin == false){
                $_SESSION['cart'] = array_merge($products, $new_product);
            }  else {
                $_SESSION['cart'] = $products;
            }
        }  else {
            $_SESSION['check'] = 'reached';
            $_SESSION['cart'] = $new_product;
        }
    }
}
?>

问题在于生成$products数组的方式:

<?php
foreach ($_SESSION['cart'] as $cart_item){
    if($cart_item['pcode'] == $pid){
        $products = array(array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$quantity,'pprice'=>$price));
        $isin = true;
    }  else {
        $products = array(array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$cart_item["pqtt"],'pprice'=>$cart_item["pprice"]));
    }
}

生成的$products将始终是一个只有一个条目的数组,因为每次迭代 foreach 都会覆盖 $products 变量。

你最好做一些事情,比如:

<?php
$products = array();
foreach ($_SESSION['cart'] as $cart_item){
    if($cart_item['pcode'] == $pid){
        $products[] = array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$quantity,'pprice'=>$price);
        $isin = true;
    }  else {
        $products[] = array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$cart_item["pqtt"],'pprice'=>$cart_item["pprice"]);
    }
}

$products[] 语法会将每次迭代的 cart 条目附加到 $products 数组的末尾。通过快速重构(仍然可以更好(:

<?php
$new_product = array('pnm'=>$obj->pro_nm,'pcode'=>$pid,'pqtt'=>$quantity,'pprice'=>$price);
if (isset($_SESSION['cart'])) {
    $isin = false;
    $products = array();
    foreach ($_SESSION['cart'] as $cart_item) {
        if ($cart_item['pcode'] == $pid) {
            $products[] = array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$quantity,'pprice'=>$price);
            $isin = true;
        }  else {
            $products[] = array('pnm'=>$cart_item["pnm"],'pcode'=>$cart_item["pcode"],'pqtt'=>$cart_item["pqtt"],'pprice'=>$cart_item["pprice"]);
        }
    }
    // If the new product is not already in the list, we add it
    if ($isin == false) {
        $products[] = $new_product;
    }
    $_SESSION['cart'] = $products;
}  else {
    $_SESSION['check'] = 'reached';
    $_SESSION['cart'] = array($new_product);
}