将产品添加到全局数组中我遇到了一个小问题。这可以用在商店购物车中。以下是我们关注的代码部分:
if ( isset($_POST['id']) ){ // If the product is adding to cart. This product Id is sended via form.
$productid = mysql_real_escape_string($_POST['id']);
$cartproduct = mysql_query("select * from stuff where id = '$productid'");
$Addrow=mysql_fetch_assoc($cartproduct);
if ($Addrow['qty']<$_POST['qty']){ // the product quantity that will add to cart can't be greater than in database
$_POST['qty']=$Addrow['qty'];
}
$new_product = array(array('name'=>$Addrow['name'], 'id'=>$Addrow['id'], 'price'=>$Addrow['price'], 'qty'=>$_POST['qty'])); // Creating new product info in array
if (isset($_SESSION['cart'])){ // If the cart exist
foreach ($_SESSION['cart'] as $add_product){
if ($add_product['id']==$_POST['id']){ // checking that product is already in $_SESSION
$exist = TRUE;
}else{
$exist = FALSE;
}
}
if ($exist == TRUE){ // If The product is in the $_SESSION: Update amount
// I dont have code for it.
}else{ // The product is not in array, add it.
$_SESSION["cart"] = array_merge($_SESSION["cart"], $new_product);
}
}else{ // If the cart is not exist
$_SESSION['cart']=$new_product;
}
}
问题是当我尝试添加已经在数组中的产品时。该功能是将其添加为新产品......
第二个问题是删除这些产品。我不能这样做:
foreach ($_SESSION['cart'] as $remove){
if($_GET["id"] == $remove['id']){
unset($_SESSION["cart"][$remove]);
}
}
任何人都可以帮忙解决它?
答案 0 :(得分:0)
我建议稍微更改一下这个数组。在“购物车”内,使用产品ID作为产品的钥匙。这样,您就可以轻松地在阵列中查找和更新产品。
您只需更改会话中的购物车数组即可。由于键在数组中是唯一的,因此为键设置值将覆盖前一个键。
所以我添加了一段内部代码的略微修改版本。它执行三个步骤:
将后置变量添加到常规变量中。我觉得这更容易使用,你可以在继续之前做各种其他检查(比如检查数量是否等于0等)。
从阵列中获取现有产品或初始化新产品。这使用array_key_exists
,因为我认为这是最纯粹的检查,但人们也使用了isset($_SESSION['cart'][$productId])
,这也应该有效。无论如何,这样的检查比使用循环更好(更快,更容易),但只有当您切换到使用产品ID作为密钥时它才会起作用。
只需设置或更新数量,然后将更新的产品写回数组。如果之前存在产品,则只会覆盖之前的值。
代码变为:
// Use a variable. It's easier and more readable.
$productId = $_POST['id'];
$quantity = $_POST['qty'];
// Your other checks go here. Left out for brevity.
// Get the current product from the cart, if it exists.
// If not, create a new product.
if (array_key_exists($productId, $_SESSION['cart'])) {
// Product found, get it and update its quantity.
$product = $_SESSION['cart'][$productId];
$product['qty'] += $quantity;
} else {
// Product not found. Initialize a new one.
$product = array(
'name' => $Addrow['name'],
'id' => $Addrow['id'],
'price' => $Addrow['price'],
'qty' => $quantity);
}
// Write updated or new product back to the array, and use the product id as key.
$_SESSION['cart'][$productId] = $product;
其他一些提示:
mysql_*
函数。不推荐使用mysql
函数。$Addrow
可能是false
或null
。请务必检查并显示相应的错误,而不是更新购物车,否则可能会损坏您的购物车。