从会话购物车中删除商品数组

问题描述 投票:0回答:2

我在会话购物车中保存了一系列商品。它被填充在表格中。每行都有一个索引和一个按钮,用于从$ _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
2个回答
0
投票

设置正确,但是PHP在服务器端执行。因此,由于这是一个客户端操作,因此您需要使用JavaScript来执行操作。 (您也可以使用旧的fasion表单)。我更喜欢使用jQuery,因为它已经具有内置的ajax支持并使其变得简单。基本上,只需从onClick调用一个函数即可,该函数传递要删除的元素的“ ID”。然后,该函数将对另一个采用该ID并删除该元素的脚本进行AJAX调用。当该脚本返回成功时,使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调用。您会注意到我使用了<?= tag而不是完整的<?php echo。这是因为从php5开始,您可以使用速记<?=回显表达式。

在脚本部分,您可以执行以下操作。我使用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,animate等。我会考虑使用div重新格式化它。

至于它调用的php脚本,就像调用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。然后,如果Item ID小于0(肯定是错误的),我告诉脚本输出消息并退出。最后,我检查该ID或索引是否确实有一个值,然后将其取消设置。如果成功,则输出成功。


0
投票

要从购物车中删除商品,请删除click。要等到第二天才能购买购物车中的某些商品,请单击“保存以备后用”。这会将项目移到购物车下方的“保存以供以后使用”列表。准备购买商品时,单击商品旁边的移至购物车。

© www.soinside.com 2019 - 2024. All rights reserved.