[英]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.