簡體   English   中英

刷新頁面后產品自動加入購物車

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM