繁体   English   中英

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

[英]Remove array of items from session shopping cart

我在会话购物车中保存了一系列项目。 它被填充到一个表中。 每行都有一个索引和一个按钮,用于从 $_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++;
}

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

unset 是正确的,但是 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 调用。 您会注意到我使用了<?= 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 中删除项目,它对表格有点棘手,因为没有一个很酷的效果真的有效,例如淡出、滑动、动画等。我会考虑用 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 或索引是否有实际值,然后取消设置。 如果成功,则输出成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM