![](/img/trans.png)
[英]Automatically 'refreshing' the woocommerce's shopping cart when programmatically adding to a cart
[英]After refreshing the page product adding automatically in cart
我正在尝试为正在工作的购物车制作代码。 但是,当我刷新页面时,它会自动将产品添加到我的购物车。
例如,我的网站上有 3 个产品,分别是Apple, Banana, Orange
。 我点击 Apple 并将其添加到我的购物车中,数量为 1,并且显示了 URL
`mydomain.com/my-cart?action=addcart&p_id=FylvGt6Yyb6n%2BzTXcJHwjBawOY%2Fw3QSZxF7rdUJLqhA%3D#`
现在,如果我刷新页面,则会将另一个Apple
添加到我的购物车中(数量 2)。 然后,如果我再次刷新页面,它会添加另一个Apple
(数量 3),依此类推。 我不知道为什么会这样。 它正在添加到 SESSION。
你会帮我吗?
下面是我的购物车代码。
$action = isset($_GET['action'])?$_GET['action']:"";
$p_id=$conn->real_escape_string($_GET['p_id']);
$decrypted_p_id = decryptIt($p_id);
//Add to cart
if($action=='addcart') {
//Finding the product by code
$query = "SELECT p_unique_id, p_images,p_name, p_currentprice FROM products WHERE p_id=?";
if ($stmt = $conn->prepare($query)) {
$stmt->bind_param("i", $decrypted_p_id);
$stmt->execute();
$stmt->bind_result($p_unique_id,$p_images, $p_name, $p_currentprice);
$stmt->fetch();
}
$currentQty = $_SESSION['products'][$decrypted_p_id]['qty']+1; //Incrementing the product qty in cart
$_SESSION['products'][$decrypted_p_id] =array(
'qty'=>$currentQty,
'p_unique_id'=>$p_unique_id,
'p_images'=>$p_images,
'p_name'=>$p_name,
'p_currentprice'=>$p_currentprice
);
$product='';
// header("Location:cart.php");
}
展示产品
<?php if(!empty($_SESSION['products'])):
foreach($_SESSION['products'] as $key=>$product):?>
/*some code here*/
endforeach;?>
<?php endif;?>
在此处编辑代码 ADyson 建议
if (isset($_POST['submit'])) {
$action=$conn->real_escape_string($_POST['action']);
$decrypted_p_id=$conn->real_escape_string($_POST['p_id']);
// whole code here
我找到了这个代码:
$currentQty = $_SESSION['products'][$decrypted_p_id]['qty']+1;
当您重新加载页面时,此代码始终运行,如果您想手动添加,请提供一些条件
如果您只是在完全相同的页面上单击刷新,则action=addcart
等仍在 URL 中。 因此,它不可避免地会在页面加载时再次运行该操作,并将商品再次添加到购物车中。
像这样的“添加”操作最好作为 POST 请求完成,部分是出于语义原因(它是“发送”数据而不是“获取”数据),部分是为了避免这样的烦恼。 理想情况下,GET 请求不应导致应用程序中的任何状态更改。
而不是
<a href="my-cart?action=addcart&p_id=<?php echo $p_user_id;?>">Add to cart</a>
您可以执行以下操作:
<form action="my-cart" method="POST">
<button type="submit">Add to cart</button>
<input type="hidden" name="action" value="addcart"/>
<input type="hidden" name="p_id" value="<?php echo $p_user_id;?>"/>
</form>
如果您愿意,您可以使用一些 CSS 使按钮看起来更像您的旧超链接。
然后,在您的 PHP 购物车代码中,只需将所有对$_GET
引用替换$_GET
$_POST
,即可从 POST 请求中读取值。
这样做的好处是变量不会保存到 URL 中,因此如果有人尝试刷新 URL,它不会根据这些变量自动重复相同的操作。
您还可以考虑通过 AJAX 发送数据以添加购物车项目,这样它根本不需要回发并且通常会带来更流畅的用户体验 - 如果您现在查看大多数购物网站,这通常是他们所做的.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.