【发布时间】: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,感谢您的回答。你能帮我写更多代码吗?因为如果我删除数组,它将如何工作?