未设置是正确的,但 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 或索引是否确实存在一个值,然后取消设置它。如果它到达最后,输出成功。