【问题标题】:Remove array of items from session shopping cart从会话购物车中删除项目数组
【发布时间】:2013-05-15 23:01:48
【问题描述】:

我在会话购物车中保存了一系列物品。它被填充在一个表中。每行都有一个索引和一个按钮,用于从 $_SESSION['cart'] 中删除此特定项目(项目数组)..

这是我目前的代码:

 $i = 0;
 foreach($_SESSION['cart'] as $item)
{
    //Populate items in a table  ?>
<tr>
<td><center><?php echo $i; ?></center></td>
<td><center><?php echo $item['item'];?></center></td>
<td><center><?php echo '£'. $item['unitprice'];?></center></td>
<td><center><?php echo $item['quantity'];?></center></td>
    <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td>
<td><input type="submit" value="Remove" Onclick =  unset($_SESSION['cart'][$i]); ></td>
</tr>
<?php
 $total += ($item['unitprice'] * $item['quantity']);
$i++;
}

我要做的就是从会话购物车中删除一行数据(每行包含索引、项目、项目价格、总计(如果有多个项目)和删除按钮)。提前谢谢..

【问题讨论】:

    标签: php session-variables shopping-cart


    【解决方案1】:

    未设置是正确的,但是 PHP 是在服务器端执行的。因此,因为这是一个客户端操作,您需要使用 JavaScript 来获取该操作。 (您也可以使用旧的 fasion 形式)。我更喜欢使用 jQuery,因为它已经内置了 ajax 支持并且很容易。基本上,只需从传递要删除元素的“ID”的 onClick 调用一个函数。然后该函数将对另一个脚本进行 AJAX 调用,该脚本将采用该 ID 并删除该元素。当该脚本返回成功时,让 JavaScript 删除(或隐藏)该元素。这样用户就不会离开或刷新页面,并且脚本可以做一些额外的清理工作(如数据库更新、会话更新、验证请求等)

    i = 0;
     foreach($_SESSION['cart'] as $item)
    {
        //Populate items in a table  ?>
    <tr>
    <td><center><?php echo $i; ?></center></td>
    <td><center><?php echo $item['item'];?></center></td>
    <td><center><?php echo '£'. $item['unitprice'];?></center></td>
    <td><center><?php echo $item['quantity'];?></center></td>
        <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td>
    <td><input type="submit" value="Remove" onClick="RemoveItem(<?= $i ?>)" ></td>
    </tr>
    <?php
     $total += ($item['unitprice'] * $item['quantity']);
    $i++;
    }
    

    在这里,我将 onClick 部分更改为使用 javascript 调用。你会注意到我使用了&lt;?= tag 而不是完整的&lt;?php echo。这是因为从 php5 开始,您可以使用简写 &lt;?= 来回显表达式。

    在你的脚本部分,你可以做这样的事情。我使用 POST,因为它更安全。

    function RemoveItem(id) {
       $.post('script-to-remove.php',
          { ItemID: id },
          function(data) {
             if(data==='success') {
                //Remove item from DOM
             } else alert("There was an error!"); //If you want error handling
          }
       );
    }
    

    对于从 dom 中删除项目,使用表格有点棘手,因为没有一个很酷的效果会真正起作用,例如 fadeOut、slideUp、动画等。我会考虑用 div 重新格式化它。

    至于它调用的php脚本,就像调用unset一样简单。你可以进一步开发它,以便可能检查请求的有效性,但现在,我只是要做 unset。

    <?php 
    $ItemID = isset($_POST['ItemID'])?intval($_POST['ItemID']):-1;
    if($ItemID<0) die("Invalid ID"); //Change this if you want
    if(isset($_SESSION['cart'][$ItemID])) unset($_SESSION['cart'][$ItemID]);
    echo 'success';
    ?>
    

    基本上在这,我先检查传入的参数是否正确,确保是整数并保存,否则我默认为-1。然后,如果项目 ID 低于 0(肯定是错误的),我会告诉脚本输出消息并退出。最后,我检查该 ID 或索引是否确实存在一个值,然后取消设置它。如果成功到最后,输出成功。

    【讨论】:

    • 嘿!感谢您的快速回复...,但老实说,我从未尝试过 AJAX 或 jQuery,所以我认为我不明白...对不起,我不是很熟练,我是菜鸟)) )
    • 我对它进行了一些更新以帮助您,可以使用 google 完成一些额外的阅读。如果您真的不想深入研究 AJAX(但您应该),您也可以使用一个表单,该表单会转到未设置的脚本。但是您需要正确传递 ID。否则,这里有一些阅读。 phpcodeforbeginner.blogspot.com/2013/01/…net.tutsplus.com/articles/web-roundups/…
    • 太好了,非常感谢!那个函数 RemoveItem .. 是 php 函数吗?
    • 不,它是一个javascript函数。所以把它贴在你的&lt;/body&gt;标签上方的&lt;script&gt;&lt;/script&gt;中。如果您不了解 Javascript 或 jQuery,那么您真的应该阅读它。 codeproject.com/Articles/246701/JQuery-for-Beginners
    • 检查您的开发控制台日志中的 javascript 错误。确保将$.post('script-to-remove.php' 部分更改为驱动器上正确的现有脚本。并通过在您刚刚添加的脚本标记上方添加&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"&gt;&lt;/script&gt; 来验证您是否也包含了 jQuery。如果什么都没发生,那很可能就是这两个问题。如果您确实创建了 php 并将其添加到该 js 函数中,那么它可能是该脚本中的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2015-08-12
    • 2021-02-18
    相关资源
    最近更新 更多