取消设置会话将删除所有已保存的项目

时间:2016-07-26 09:55:16

标签: javascript php jquery ajax

阅读很多关于会话以及如何添加和删除项目的内容。我看到有很多不同的方法来完成这项工作。我有同样的问题。

我希望有人可以帮我解决这个问题。在这个社区的帮助下,我从无到有地走到了现在的位置(谢谢!)。

这是我的问题,我希望我能解释一下,这样你才能理解。

假设我有一家出售T恤和裤子的商店。当我将T-hirt项目保存到我的购物车时,它显示它应该如此。但是我无法删除该项目。如果我然后过滤我的页面for pans(这会触发AJAX事件)并尝试删除T恤,则删除该项目。但所有项目不仅仅是我点击要移除的项目。

以下是我添加产品的HTML:

<button type="submit" 
  class="btn btn-primary text-right add-product showtoast"
    data-target="post-<?php the_ID(); ?>" 
      data-attribute="<?php the_title(); ?>" 
         data-product="<?php the_title(); ?>">
         Add to cart
</button>

这是删除项目的HTML:

<div class="echo-product">
  <?php echo htmlspecialchars($product); ?>
    <input type="submit" class="delete-product" value="Remove">
</div>

这些是我添加和删除项目的Javascripts:

$('.add-product').click(function() {
    var productName = $(this).data('product');
        $.post('http://example.com/reload.php?addparam', 
        {productName: productName}, function(data) {
            $('.txtHint').html(data);
    })
});

$('.delete-product').click(function() {
    var productName = $(this).data('product');
        $.post('http://examples.com/reload.php?delparam', 
        {productName: productName}, function(data) {
            $('.txtHint').html(data);
    })
});

最后但并非最不重要的是,我的reload.php脚本:

<?php

session_start();

if (!array_key_exists('products', $_SESSION) || !is_array($_SESSION['products'])) {
    $_SESSION['products'] = [];
}

$productName = array_key_exists('productName', $_POST) ? (string) $_POST['productName'] : '';

if(isset($_GET['delparam'])){
   unset($_SESSION['products'][$productName]);
}
if(isset($_GET['addparam'])){
    $_SESSION['products'][] = $productName;
}
?>

    <?php foreach ($_SESSION['products'] as $product): ?>
        <div class="echo-product">
          <i style="color:#F60;padding-right:20px;" class="fa fa-anchor" aria-hidden="true"></i>
           <?php echo htmlspecialchars($product); ?>
             <input type="submit" class="delete-product" value="Remove">
         </div>
    <?php endforeach;?>

是否有人可以帮助我理解为什么(看起来像)AJAX事件必须在我能够移除项目之前进行。当我点击一个项目时,为什么它会删除所有项?

谢谢!

1 个答案:

答案 0 :(得分:0)

比较产品的添加方式与删除方式

if(isset($_GET['delparam'])){
   unset($_SESSION['products'][$productName]);
}
if(isset($_GET['addparam'])){
    $_SESSION['products'][] = $productName;
}

添加产品时,只需将productName附加到数组即可。该条目接收数字索引。

删除产品时,您会将productName作为索引查找 - 但这不存在!

我确定它没有回答为什么所有产品都被移除,但它可能有助于做正确的事情。