PHP购物车,添加多个项目

时间:2017-09-06 17:17:25

标签: php cart shopping shop

if (!empty($_GET['action'])) {
    $j = $_GET['id_'];
    switch($_GET['action']) {
        case "add":
        $query = "select * from ogl where id = $j";
        $result = mysqli_query($conn, $query);
        $row = mysqli_fetch_assoc($result); 
        $array = array($row["id"]=>array('seller'=>$row["seller"], 
        'name'=>$row["name"], 'cpu'=>$row["CPU"], 'size'=>$row["size"], 
        'price'=>$row["price"], 'img'=>$row["img"])); 

        if (empty($_SESSION["cart_item"])) {
            $_SESSION["cart_item"] = $array;
        } else {
            $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"], $array);
        } 
        break;
    }
}

问题是它通过替换之前添加的项目只添加一个项目。每个项目的ID都由其按钮发送--GET方法。问题是什么?感谢。

3 个答案:

答案 0 :(得分:0)

您正在将数组的内容合并到名为" cart_item"的现有数组中。但是,数组的任何键只能存在一次。因此,通过合并另一个购物车项目,你将超越那里的那个。

你可以这样处理:

def method_name
  total_value < item_value
end

但是,这意味着您可以添加两次相同的产品。由于所有内容都有自己的ID,因此您可以考虑使用$ row [&#39; id]作为项目的键。

答案 1 :(得分:0)

为什么不将项目推入数组而不是替换它?

替换此行(并在else中为下面的代码添加相同的内容)

$_SESSION["cart_item"] = $array;

通过

$_SESSION["cart_item"][$j] = $array;

或更好:

$_SESSION['cart'][$j] = $array;

确保在会话开始附近的某处定义$ _SESSION ['cart']

答案 2 :(得分:0)

使存储在会话中的购物车成为字符串,其中的元素由“;”之类的字符分隔这些元素本身可以是由不同的字符分隔的列表,如','。

会话/ cookie看起来像:

<id>,<seller>,<name>,<CPU>,<price>,<img>;
<id>,<seller>,<name>,<CPU>,<price>,<img>;
<id>,<seller>,<name>,<CPU>,<price>,<img>

这意味着你可以用“;”拆分字符串然后使用“,”。

在该数组中的每个元素

要实现这一点,您可以切换它:

$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"], $array);

为此:

$_SESSION["cart_item"] .= $row["seller"] . "," . $row["CPU"] . "," //and so on

另外,请注意sql_injection。您可以将“id_”参数更改为SQL查询并损坏数据库。