2017-09-06 109 views
0
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方法发送的。问题是什么?谢谢。PHP购物车,添加多个项目

+0

https://stackoverflow.com/help/how-to-ask - 阅读本文,然后您可以编辑此问题。我不确定你想要完成什么,也不应该为了帮助你解决问题而弄清楚。给你的问题多一点背景。如果你愿意,我会收回我的投票;) – Jase

回答

0

您正在将数组的内容合并到名为“cart_item”的现有数组中。但是,数组中的任何键只能存在一次。所以通过合并另一个购物车项目,你已经覆盖已经存在的那个。

你能处理这样的:

if (isset($_SESSION["cart_item"])) { 
     // make sure the cart_item key exists before adding anything to it. 
     $_SESSION['cart_item'] = array(); 
     $_SESSION["cart_item"][] = $array; 
    } 
    else { 
     $_SESSION["cart_item"][] = $array; 
    } 

然而,这意味着您可以添加两次相同的产品。由于一切都有自己的ID,你可以考虑使用$ row ['id]作为项目的关键。

0

为什么不把它推入数组而不是替换它?

替换这一行(并同为下面的代码在else)

$_SESSION["cart_item"] = $array; 

通过

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

或更好:

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

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

0

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

会话/饼干看起来像:

<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查询并损坏数据库。