首页 > 解决方案 > 在购物车中添加我的订单时重复的项目

问题描述

我的餐厅网站的购物车功能出现问题。

例如,如果我将一个项目添加到购物车,然后我添加另一个项目,然后如果我删除我最后添加的一个并再次添加它,它会在会话中添加一倍。在这里,我有添加和删除购物车中商品的功能:

    function AddProd($id_prod, $quant) {
        if(isset($_SESSION['cart'])){
            $_SESSION['cart'].=$id_prod.'>'.$quant.",";
        } else {
            $_SESSION['cart']=$id_prod.'>'.$quant.",";
        }
    }
    function RemoveFromCart($id_prod) {
        if(isset($_SESSION['cart'])) {
            $n = $_SESSION['cart'];
            $prod_id = substr($n, 0, -1);
            $ids = explode(',', $prod_id);
            $prods = '';
            foreach ($ids as $id) {
                $i = explode('>', $id);
                if($i[0] != $id_prod) $prods = $prods.''.$id.',';
            }
            $_SESSION['cart'] = $prods;
        }
    }

这里我有设置项目数量的功能:

    function SetCartNumber($conn) {
        if(isset($_SESSION['cart'])) {
            $n = $_SESSION['cart'];
            $prod_id = substr($n, 0, -1);
            $ids = array_map('trim', explode(',', $prod_id));
            foreach ($ids as $id) {
                $i = explode('>', $id);
                $total = $total + $i[1]; 
            }
            return $total;
        }
        return 0;
    }

在这里它插入数据库:

            function LastId($conn, $tbl){
                $s = 'SELECT `id` FROM `'.$tbl.'` ORDER BY `id` DESC LIMIT 1';
                if ($r = mysqli_query($conn, $s)) {
                    $rowd = mysqli_fetch_array($r, MYSQLI_NUM);
                    return $rowd[0];
                }
                return -1;
            }
            $t_price = (empty(GetPromotion($connect))) ? $total_price : '<span style="color: white; font-weight: bold;">'.SetPromotion($connect).'</span> <span style="text-decoration: line-through; color: red;">'.$total_price.'</span>';
            if(isset($_POST['delete_prod'])) {
                RemoveFromCart($_POST['delete_prod']);
                echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
            }
            if(isset($_POST['decrease_prod'])) {
                ProdsDecrease($_POST['decrease_prod']);
                echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
            }
            if(isset($_POST['increase_prod'])) {
                ProdsIncrease($_POST['increase_prod']);
                echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
            }
            if (!empty($_POST['trimite'])) 
            {
                $str_name = ($str_name[strlen($str_name)-2] == ',') ? substr($str_name, 0, -2) : $str_name;
                $str_name2 = ($str_name2[strlen($str_name2)-2] == ',') ? substr($str_name2, 0, -2) : $str_name2;
                $price = (empty(SetPromotion($connect))) ? SetCartPrice($connect) : SetPromotion($connect);
                $price = (!empty(GetPromotion($connect))) ? $price.' lei(Promotie activa: '.GetPromotion($connect).'%)' : $price;
                $prods = MailProds($connect);
                $quantity = SetCartNumber($connect);
                $price1 = (empty(SetPromotion($connect))) ? SetCartPrice($connect) : SetPromotion($connect);
                $price1 = floatval($price1);
                $quantity = floatval($quantity);
                 
                $email = filter_input(INPUT_POST, 'email');
                $telefon = filter_input(INPUT_POST, 'telefon');
                $mentiuni = filter_input(INPUT_POST, 'mentiuni');
                $tacamuri = filter_input(INPUT_POST, 'tacamuri');
                if(!empty(get())) { $email = getEmail($connect); } 
                $sql = "INSERT INTO `comenzi`(`name`, `pret`, `cantitate`, `adresa_mail`, `nr_telefon`, `mentiuni`, `tacamuri`) VALUES ('$prods', '$price1', '$quantity', '$email', '$telefon', '$mentiuni', '$tacamuri')";

我该如何解决这个问题?

标签: phpe-commerceshop

解决方案


问题出在 addProd 函数中。您的会话必须包含唯一的 prodId 值。但是当您再次添加相同的产品时。您没有删除第一个,那么您将面临问题。

所以你应该在添加之前检查产品是否已经在会话中。或者你应该更新它。


推荐阅读