相当新的php和关注电子商务教程。在探索解决我使用php代码块的问题的方法时,我遇到了另一个人使用相同代码块的帖子。 https://forums.phpfreaks.com/topic/272404-help-problem-with-some-line-of-codes/ 该帖子提出了一种简化代码的方法。
原始代码块:
<?php
if (isset($_POST ['pid'])) {
$pid = $_POST ['pid'];
$wasFound = false;
$i = 0;
if (!isset ($_SESSION["cart_array"]) || count($_SESSION ["cart_array"])<1){
$_SESSION["cart_array"] = array (0=> array("item_id"=> $pid, "quantity" => 1));
} else {
foreach ($_SESSION["cart_array"] as $each_item) {
$i++;
while(list($key,$value)=each($each_item)){
if ($key== "item_id" && $value == $pid) {
array_splice ($_SESSION["cart_array"], $i-1,1, array(array("item_id"=>$pid,"quantity"=> $each_item['quantity']+1)));
$wasFound = true;
}
}
}
if($wasFound==false) {
array_push ($_SESSION["cart_array"], array("item_id"=> $pid, "quantity" => 1));
}
}
header("Location: cart.php");
exit();
}
?>
这是建议的简化代码块以及更改代码后要执行的操作的说明。我不确定如何实现代码块后建议的部分。
if (isset($_POST['pid'])) {
// add (+1) item to cart
$pid = (int)$_POST['pid']; // cast as integer
// valid pids are > 0
if($pid > 0){
if(!isset($_SESSION['cart_array'][$pid])){
// item is not in the cart, add it with quantity = 1
$_SESSION['cart_array'][$pid] = array("item_id" => $pid, "quantity" => 1); // I left the array in the cart the same, but it could also be simplified so that it is only the quantity, since the item_id is now the cart array index
} else {
// item is in the cart, increment quantity
$_SESSION['cart_array'][$pid]['quantity']++;
}
}
header("location: cart.php");
exit();
}
要获取购物车商品的详细信息,您需要运行一个同时获取所有商品的查询(在循环中放置查询是资源杀手。)对于我购物车的定义建议,您可以使用array_keys来获取所有项ID。然后,您将这些内容拆分为逗号分隔列表,并将它们放入查询的WHERE子句中的IN()比较中,以便一次获取所有匹配的行。 由PFMaBiSmAd编辑,2012年12月27日 - 02:05 PM。
这是我正在考虑添加到代码块中的内容:
if ($result = print_r(array_keys('cart_array',$pid))) {
$comma_seperated = implode("," $result);
// then use use $comma_seperated in query where needed later in annother code block?
}
我是在正确的道路上吗?
答案 0 :(得分:0)
这是由Mike Brant在codereview.stackexchange中提供的。这就是我如何提取要在查询中使用的密钥。
$ pidsInCart = array_keys($ _ SESSION ['cart_array']);
答案 1 :(得分:0)
对我来说似乎很好 - 如果会话包含cart_array,也许你应该添加一个支票。非常重要 - 缩进代码!你提供的那个不太可读..
if (isset($_POST['pid'])) {
$pid = (int)$_POST['pid'];
if($pid > 0){
if (!isset($_SESSION['cart_array'])) {
$_SESSION['cart_array'] = [];
}
if(!isset($_SESSION['cart_array'][$pid])){
$_SESSION['cart_array'][$pid] = ["quantity" => 1];
} else {
$_SESSION['cart_array'][$pid]['quantity']++;
}
}
header("location: cart.php");
exit();
}