会话数组替换而不是添加

时间:2014-05-28 06:09:29

标签: php arrays session

<?php
    if(isset($_GET["product1"]) && $_GET["product1"] == "Add"){
        $_SESSION['cart']['product1'] = $_SESSION['pricebook']['product1'];
        header('Location: cart.php?');      
        }
    if(isset($_GET["product2"]) && $_GET["product2"] == "Add"){
        $_SESSION['cart']['product2'] = $_SESSION['pricebook']['product2'];
        header('Location: cart.php?');  
        }
 ?>

我试图允许用户将多个产品添加到购物车,但每次选择添加按钮时,阵列(使用print_r($_SESSION['cart']检查)都会更改阵列中的产品,而不是向阵列添加其他产品。

非常欢迎任何帮助/建议!

2 个答案:

答案 0 :(得分:0)

array_push($_SESSION['cart'], $_SESSION['pricebook']['product1']); 

http://www.php.net/manual/en/function.array-push.php

您的$_SESSION['cart']是一个多维数组。你现在拥有它的方式$_SESSION['cart']['product1']$_SESSION['cart']数组的一个元素,你试图修改它。修改$_SESSION['cart']而不是向其添加项目,而不是购物车内的项目。

答案 1 :(得分:0)

我不确定我理解你的方法,但你需要考虑改变这个&#39; productX&#39;处理动态内容的方式。

我在我的eshop插件中所做的是:(简化以满足您的代码)

<?php
// if user added the product named 'product1' by etc. a specific product page
if(isset($_GET["product1"]) && $_GET["product1"] == "Add"){
    if (!isset($_SESSION['cart'][1])) { $_SESSION['cart'][1] = array("quantity"=>0); }
    $_SESSION['cart'][1]["quantity"] = $_GET["product1_quantity"];
    header('Location: cart.php?');
}
?>

虽然更好的方法应该是这样的:

<?php
if (isset($_GET["product"]) && $_GET["product"]=="Add") {
    $pid = $_GET["product_id"];   // this is one you should add to target the product
    $quantity = $_GET["product_quantity"];   // also, the quantity coming from client
    if (!isset($_SESSION['cart'][ $pid ])) { $_SESSION['cart'][ $pid ] = array("quantity"=>0); }
    $_SESSION['cart'][ $pid ]["quantity"] = $quantity;  // store the new quantity
    header('Location: cart.php?');
}
?>

关于定价,您应该考虑每个添加产品的数量(通过for循环等)。 不要将价格存入会话,因为他们已为您所知。