从会话购物车中删除项目数组

时间:2013-05-15 23:01:49

标签: php session-variables shopping-cart

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

这是我目前的代码:

 $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++;
}

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

1 个答案:

答案 0 :(得分:0)

未设置是正确的,但PHP在服务器端执行。因此,这是一个客户端操作,您需要使用JavaScript来获取操作。 (你也可以使用旧的时尚形式)。我更喜欢使用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。然后,如果项目ID低于0(如此绝对错误),我告诉脚本输出消息并退出。最后,我检查该ID或索引的值是否真实,并取消设置。如果它到达最后,输出成功。