使用PHP和Javascript在30分钟后从用户的购物车中删除一个项目

时间:2017-05-14 02:51:37

标签: javascript php ajax

我有一个带购物车的典型电子商务网站,我想在30分钟(或其他一些定义的时间段)后自动从用户的购物车中删除一个项目。我真的不确定实现这一目标的最佳方法。我知道有一个php sleep()函数,但从性能角度看,这似乎是一个不受欢迎的等待30分钟或更长时间的方法。我尝试使用setTimeout()在我的javascript中设置超时,并让它调用一个函数,该函数将发送一个Ajax调用removefromcart.php以及项目的id。但是,我没有成功解决这个问题。以下是用于将项目添加到购物车的代码:

  session_start();
  require_once('../config.php');

try{ 
    $itemId = array_key_exists('itemId', $_POST) ? $_POST['itemId'] : null;

    if(!is_null($itemId)){
        if(!in_array($itemId, $_SESSION['cart'])){
            $i = count($_SESSION['cart']);
            $_SESSION['cart'][$i] = $itemId;
            $sql = "UPDATE 
                        titems 
                    SET 
                        intInactive = 1
                    WHERE 
                        intItemId = ? ";

            $stmt = $conn->prepare($sql);
            $stmt->execute([$itemId]);
            echo ("Success");
            $_SESSION['cart_count'] = count($_SESSION['cart']);
        }
    }
} catch(Exception $ex) {
    error_log($ex->getMessage());
    logError($conn, 'ADD TO CART FAILED. Error: '. $ex->getMessage());
    echo("Fail");
}

以下是用于触发此事件的Javascript:

// Add Item to Cart
    $('button.addtocart').on('click', function(){
        var btnId = this.id;
        var itemId = btnId.split('-')[1];

        $.ajax({
            method: 'POST',
            url: 'Backend/addtocart.php',
            data: {itemId: itemId},
            success: function(data){
                if(data == 'Success'){
                    swal({
                        title: "Item Added!",
                        text: "my message",
                        type: "success",
                        confirmButtonText: "OK"
                    },
                    function(isConfirm){
                        if (isConfirm) {
                            $("#row-"+itemId).fadeOut("slow");  
                            location.reload();                          
                        }
                    });
                } else {
                    swal({
                        title: "Error!",
                        text: "Something Went Wrong! Please Try Again.",
                        type: "error",
                        confirmButtonText: "OK"
                        });
                    }               
                } 
            })
        })

当用户点击“从购物车中删除”时删除项目的Javascript,我希望使用类似的Ajax调用来完成我的自动删除:

// Remove Item From Cart
    $('#CartTable :button').on('click', function(){
        var btnId = this.id;
        var itemId = btnId.split('-')[1];

        swal({
              title: "Remove?",
              text: "Are you sure you want to remove this item from your cart?",
              type: "warning",
              showCancelButton: true,
              confirmButtonText: "Yes, remove it!",
              cancelButtonText: "No, keep it!",
              closeOnConfirm: false
            },
            function(isConfirm){
                if (isConfirm) {
                    swal("Removed!", "That item has been removed from your cart!", "success");
                    location.reload();
                $.ajax({
                    method: 'POST',
                    url: 'Backend/removefromcart.php',
                    data: {itemId: itemId},
                    success: function(data){
                        if(data == 'Success'){
                            swal({
                                title: "Success!",
                                text: "Item Successfully Removed From Cart",
                                type: "success",
                                confirmButtonText: "OK"
                            });
                            $("#row-"+itemId).fadeOut("slow");
                        } else {
                            swal({
                                  title: "Error!",
                                  text: "Something Went Wrong! Please Try Again.",
                                  type: "error",
                                  confirmButtonText: "OK"
                                });
                            }
                        }
                    })
                } else {
                    swal("Cancelled", "Too good to let go!", "error");
                }
            }
        );
    })

最后,这里是用于实际从购物车中删除项目的php:

    session_start();
    require_once('../config.php');

try{

    $itemId = array_key_exists('itemId', $_POST) ? $_POST['itemId'] : null;

    if(!is_null($itemId)){
        $i = array_search($itemId, $_SESSION['cart']);
        unset($_SESSION['cart'][$i]);

        $sql = "UPDATE 
                    titems 
                SET 
                    intInactive = 0
                WHERE 
                    intItemId = ? ";

        $stmt = $conn->prepare($sql);
        $stmt->execute([$itemId]);
        echo ("Success");
        $_SESSION['cart_count'] = count($_SESSION['cart']);
    }

} catch(Exception $ex) {
    error_log($ex->getMessage());
    logError($conn, 'REMOVE ITEM FROM CART FAILED. Error: '. $ex->getMessage());
    echo("Fail");
}

我真的希望利用我已经拥有的代码来完成这项任务。我希望有人可以帮助我!谢谢。

0 个答案:

没有答案