0

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

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

4

1 回答 1

0

未设置是正确的,但 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 中删除项目,使用表格有点棘手,因为没有一个很酷的效果会真正起作用,例如 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 或索引是否确实存在一个值,然后取消设置它。如果它到达最后,输出成功。

于 2013-05-15T23:07:01.530 回答