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方法。问题是什么?感谢。
答案 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查询并损坏数据库。