【问题标题】:Not able to add the same product to the cart无法将相同的产品添加到购物车
【发布时间】:2018-08-13 23:49:12
【问题描述】:

我使用 session 和 jquery 创建了添加到购物车的代码。快完成了,但我遇到了两个问题。

1) 刷新页面时出现错误

Notice: Undefined index: quantity in C:\xampp\htdocs\add-to-cart\ajax_cart.php on line 5

2) 我可以将产品添加到购物车,但如果我将相同的产品添加两次,则会出现错误。

 Notice: Undefined index: 250.00 in C:\xampp\htdocs\add-to-cart\ajax_cart.php on line 30
 Notice: Undefined offset: 1 in C:\xampp\htdocs\add-to-cart\ajax_cart.php on line 31

else 部分有问题(可能是价格)。

else{
    $_SESSION['product_cart'][$product_id][$product_price] = $_SESSION['product_cart'][$product_id][$product_price] + ($product_price*$quantity);
    $_SESSION['product_cart'][$product_id][$quantity] = $_SESSION['product_cart'][$product_id][$quantity]+$quantity;
    }

AJAX函数调用ajax_cart.php

function add_cart(p_id=""){
    var quantity = $(".quantity"+p_id).val();
    $.ajax({
        type:"post",
        url:"ajax_cart.php",
        data:{action:'add',p_id:p_id,quantity:quantity},
        success:function(result){
            $('.cart_data').html(result);
        }
    });
}

加入购物车

$action = $_POST['action'];
 $p_id   = trim($_POST['p_id']);
 $quantity = $_POST['quantity'];
if($action == 'add'){
     if(!empty($p_id)){
           $query = "SELECT product_id,product_title,product_price,product_image FROM product WHERE product_id=?";
            if ($stmt = $conn->prepare($query)) {
                $stmt->bind_param("i", $p_id);
                $stmt->execute();
                $stmt->bind_result($product_id, $product_title,$product_price, $product_image);
                $stmt->fetch();
              }

             $product = array(
                "p_id"=>$product_id,
                "title"=>$product_title,
                "price"=>$product_price*$quantity,
                "image"=>$product_image,
                "quantity"=>$quantity
             );
        if(isset($_SESSION['product_cart']) && !empty($_SESSION['product_cart']))
        {
            if(!array_key_exists($product_id,$_SESSION['product_cart']))
            {
                $_SESSION['product_cart'][$product_id] = $product;
            }
            else{
                $_SESSION['product_cart'][$product_id][$product_price] = $_SESSION['product_cart'][$product_id][$product_price] + ($product_price*$quantity);
                $_SESSION['product_cart'][$product_id][$quantity] = $_SESSION['product_cart'][$product_id][$quantity]+$quantity;
            }       
        }
        else{
          $_SESSION['product_cart'][$product_id] = $product;
        }
    }   
}

【问题讨论】:

  • 不要将$product_price$quantity 分配为数组键,将它们设置为值。 $_SESSION['product_cart'][$product_id][$quantity] 现在的耦合度有多高?您应该将 $product 放在 $_SESSION['product_cart'][$product_id]['product'] = $product 中,而不是使用 qty 字段。您不需要价格,您可以在输出时计算。
  • @LawrenceCherone,感谢您的回答。你能帮我写更多代码吗?因为如果我删除数组,它将如何工作?

标签: php jquery html session


【解决方案1】:

使用下面的else部分

else{
            $_SESSION['product_cart'][$product_id]['price'] += ($product_price*$quantity);
            $_SESSION['product_cart'][$product_id]['quantity'] += $quantity;
        }   

并添加以下代码

if(!isset($_POST['action']) || !isset($_POST['quantity'])) return;

上线

$action = $_POST['action'];

【讨论】:

  • @fayis003,我试过你的代码,但我得到了同样的错误。
  • 检查上面的更新代码。还有一个更正
  • 是的,这次成功了,请帮我解决第一个问题。
  • 请打印您遇到错误的确切行
  • 首先添加这个if(!isset($_POST['quantity']) || !isset($_POST['quantity'])) return;
【解决方案2】:

试试这个

if(!array_key_exists($product_id,$_SESSION['product_cart']))
{
    $_SESSION['product_cart'][$product_id] = $product;
}
else{
    $_SESSION['product_cart'][$product_id]['price'] += ($product_price*$quantity);
    $_SESSION['product_cart'][$product_id]['quantity'] += $quantity;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2012-06-09
    • 2012-01-06
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多