首先是的,我确实检查了其他选项,问题和答案,但遗憾的是那些对我不起作用.
所以我目前正在开发一个包括购物车系统的小项目.
购物车系统是由PHP会话创建的,一切正常.可以添加产品,删除行,并可以完全清除购物车.
现在我想添加一些功能,比如计算购物车中的商品,计算总价和增值税价格.由于会话存储为JSON对象,因此我可以使用angularjs和$http.get()来读取JSON购物车对象并重新定义数据,以便在视图的ng-repeat中使用它.
因此,当访问者点击“添加到购物车”按钮时,以下代码正在创建会话:
session_start();
$product_id = $_REQUEST['product_id'];
$product_name = $_REQUEST['product_name'];
$product_price = round($_REQUEST['product_price'], 2);
$product_size = $_REQUEST['product_size'];
$product_quantity = $_REQUEST['product_quantity'];
$total_product_price = $product_price*$product_quantity;
round($total_product_price, 2);
// Add new item to session
$cartProduct = array(
"id" => $product_id,
"name" => $product_name,
"price" => $product_price,
"size" => $product_size,
"quantity" => $product_quantity,
"total_product_price" => $total_product_price,
"total_items" => 0
);
/*
* check if the 'cart' session array was created
* if it is NOT, create the 'cart' session array
*/
if(empty($_SESSION['cart']["cartItems"])){
$_SESSION['cart']["cartItems"] = array();
}
// check if the item is in the array, if it is, do not add
if(array_key_exists($product_id and $product_size, $_SESSION['cart'])){
// redirect to product list and tell the user it was added to cart
echo "<script> alert('Dit product staat al in de winkelwagen')</script>])";
}
// else, add the item to the array
else{
$_SESSION['cart']["cartItems"][$product_id]=$cartProduct;
}
$arr = json_decode($_SESSION['cart']['cartItems'][$product_id], true);
$total_items['total_items'] = count($_SESSION['cart']);
array_push($arr['cartItems'], $total_items);
但遗憾的是,这没有用.我也尝试将其添加到getCart部分.
session_start();
$json = json_encode($_SESSION['cart']["cartItems"]);
echo($json);
可悲的是也没有任何结果.
所以我的问题是如何将total_items计算添加到数组中.我如何计算总价,增值税价格等?
PS:一种产品的JSON结果:
{"16":{"id":"16","name":"TestDatumProduct","price":1000,"size":"M","quantity":"4","total_product_price":4000,"total_items":0}}
UPDATE
所以结合最近几天的进展的更新:
所以目前我的代码基于@devionNL的答案,因为我喜欢动作方法,@FranciscoRodríguez的答案几乎没有答案,因为他只向我提出了计数方法的建议,(没有用)
因此,使用@devionNL中的动作示例,我做了一些小的更改,并提出了以下代码.
<?PHP
session_start();
$cartItemID = $_REQUEST['cartItem_id'];
$product_id = $_REQUEST['product_id'];
$product_name = $_REQUEST['product_name'];
$product_price = round($_REQUEST['product_price'], 2);
$product_size = $_REQUEST['product_size'];
$product_quantity = $_REQUEST['product_quantity'];
$total_product_price = $product_price*$product_quantity;
round($total_product_price, 2);
// Add new item to session
$cartProduct = array(
"id" => $product_id,
"name" => $product_name,
"price" => $product_price,
"size" => $product_size,
"quantity" => $product_quantity,
"total_product_price" => $total_product_price
);
// If the session is empty create an empty array
if(empty($_SESSION['cart']["cartItems"])){
$_SESSION['cart']["cartItems"] = array();
}
// Add to cart
if ($_REQUEST['action'] == 'addToCart')
{
if (array_key_exists($product_id, $_SESSION['cart']['cartItems']))
{
$_SESSION['cart']['cartItems']['totalItems']++;
}
else
{
$_SESSION['cart']['cartItems']['totalItems']++;
array_push($_SESSION['cart']['cartItems'], $cartProduct );
}
}
// RemoveRow
else if ($_REQUEST['action'] == 'removeRow') // If you want a delete action
{
if (array_key_exists($product_id, $_SESSION['cart']['cartItems']))
{
if ($_SESSION['cart']['cartItems']['totalItems'] > 1)
{
foreach ($cartDecode as $key => $cartItem)
{
// IF THE TITLE MATCHES THE SIGNAL STRING
if ($cartItem->{"id"} == $cartItemID)
{
// REMOVE THIS OBJECT
unset($cartDecode[$key]);
}
}
$_SESSION['cart']['cartItems']['totalItems']--; // Deduct by 1.
}
else
{
$_SESSION['cart']['cartItems'] = $cartProduct;
}
}
$_SESSION['cart']['cartItems']['totalPrice'] = array_sum(array_map(function($item) {
return $item['price'] * $item['totalItems'];
},
$_SESSION['cart']['cartItems']));
}
$cart = json_encode($_SESSION['cart']['cartItems']);
echo ($cart);
因此添加到购物车,并计算cartItems正如预期的那样工作.但我仍然找不到删除行的方法.在车内.接下来,我仍然在努力获得购物车的总价. JSON结果如下:
{"totalItems":2,"0":{"id":"7","name":"bedrukt jurkje van chiffon","price":20.5,"size":"M","quantity":"3","total_product_price":61.5},"1":{"id":"5","name":"bedrukte Zomerjurk","price":30.5,"size":"M","quantity":"3","total_product_price":91.5}}
然后,JSON中的完整购物车将是:
{"cartItems":{"totalItems":2,"0":{"id":"7","name":"bedrukt jurkje van chiffon","price":20.5,"size":"M","quantity":"3","total_product_price":61.5},"1":{"id":"5","name":"bedrukte Zomerjurk","price":30.5,"size":"M","quantity":"3","total_product_price":91.5}}}
所以我的问题是?
1.我怎么能删除一行(ID ==“”,然后删除)
2.我如何计算购物车的全价?
3.为了将订单放在dabatase中,我如何能够选择每一行? (id,name等).我在考虑使用foreach()语句?
如果有任何问题,请在评论中询问.
一如既往,提前致谢!
解决方法:
最好的方法是将您的产品信息存储在数据库中,而不是让客户端将所有信息发送到服务器,因为您最初无法验证客户端是否说实话(阅读:永远不要信任客户端输入).
基本上客户端应该发送的只是添加/删除和它想要添加的productId,然后您可以返回完整的对象与价格等,但客户端不应该能够“更新”该价格.
session_start();
// If the cart or cartItems isn't set, create empty
if (empty($_SESSION['cart']) || empty($_SESSION['cart']['cartItems']))
{
$_SESSION['cart'] = array();
$_SESSION['cart']['cartItems'] = array();
$_SESSION['cart']['totalPrice'] = 0;
$_SESSION['cart']['totalItems'] = 0;
}
// Search the cartItems for the column named productId that matches the $product_id. This can return null, so always verify with !empty.
$arrayKeyId = array_search($product_id, array_column($_SESSION['cart']['cartItems'], 'productId'));
if ($_REQUEST['action'] == 'add')
{
if (!empty($arrayKeyId)) // If it isn't empty, append to the quantity
$_SESSION['cart']['cartItems'][$arrayKeyId]['totalItems']++;
else // It's new: Add it to the array
$_SESSION['cart']['cartItems'][] = $cartProduct;
}
else if ($_REQUEST['action'] == 'delete') // If you want a delete action
{
if (!empty($arrayKeyId))
{
// If more than 1 quantity, lower by 1
if ($_SESSION['cart']['cartItems'][$arrayKeyId]['totalItems'] > 1)
$_SESSION['cart']['cartItems'][$arrayKeyId]['totalItems']--;
else // Or if there was only 1, remove the item fully.
unset($_SESSION['cart']['cartItems'][$arrayKeyId]);
}
}
// Total price based on item count times their price.
$_SESSION['cart']['totalPrice'] = array_sum(array_map(function($item) {
return $item['price'] * $item['totalItems'];
}, $_SESSION['cart']['cartItems']));
// Total items based on the total amount of cartItems (without their quantity)
$_SESSION['cart']['totalItems'] = count($_SESSION['cart']['cartItems']);
echo json_encode($_SESSION['cart']['cartItems']);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。