PHP购物车,添加多个项目
问题描述:
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购物车,添加多个项目
答
您正在将数组的内容合并到名为“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]作为项目的关键。
答
为什么不把它推入数组而不是替换它?
替换这一行(并同为下面的代码在else)
$_SESSION["cart_item"] = $array;
通过
$_SESSION["cart_item"][$j] = $array;
或更好:
$_SESSION['cart'][$j] = $array;
确保你定义$ _SESSION ['cart']在会议开始附近的某处
答
使存储在会话中的购物车成为一个字符串,元素由一个字符分隔,如';'而这些元素本身可以是由不同字符分隔的列表,如','。
会话/饼干看起来像:
<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查询并损坏数据库。
https://*.com/help/how-to-ask - 阅读本文,然后您可以编辑此问题。我不确定你想要完成什么,也不应该为了帮助你解决问题而弄清楚。给你的问题多一点背景。如果你愿意,我会收回我的投票;) – Jase