刷新页面产品后自动添加到购物车

时间:2017-09-22 16:12:45

标签: javascript php jquery ajax session

我正在尝试制作购物车的代码,该代码正常运行。但是,当我刷新页面时,它会自动将产品添加到我的购物车中。

例如,我的网站上有3个产品,Apple, Banana, Orange。 我点击Apple,它已添加到我的购物车中,数量为1,网址显示

`mydomain.com/my-cart?action=addcart&p_id=FylvGt6Yyb6n%2BzTXcJHwjBawOY%2Fw3QSZxF7rdUJLqhA%3D#`

现在,如果我刷新页面,那么它会将另一个Apple添加到我的购物车(QTY 2)。然后,如果我再次刷新页面,则会添加另一个Apple(QTY 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

2 个答案:

答案 0 :(得分:0)

我找到了这段代码:

$currentQty = $_SESSION['products'][$decrypted_p_id]['qty']+1;

当您重新加载页面时,此代码始终运行, 如果你想手动添加,请给出一些条件

答案 1 :(得分:0)

如果您只是点击同一页面上的刷新,那么action=addcart等仍在网址中。因此,当页面加载时,它不可避免地再次运行该动作,并再次将项目添加到购物车。

像这样的“添加”动作最好作为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的引用替换为$_POST,然后从POST请求中读取值。

这样做的好处是变量不会保存到URL中,因此如果有人试图刷新URL,它将不会根据这些变量自动重复相同的操作。

您还可以考虑通过AJAX发送数据以添加购物车项目,这样它根本不需要回发,通常会带来更流畅的用户体验 - 如果您现在查看大多数购物网站,通常他们做了什么。