28.5.4 保存更新后的购物车
如果我们通过点击"Save Changes"按钮进入show_cart.php脚本,那么它的处理过程与前面有些不同。在这种情况下,我们是通过提交一个表单进入的。如果仔细查看这些代码,可以发现"Save Changes"按钮是一个表单的提交按钮。该表单包含了隐含变量save。如果该变量被赋了值,我们就可以知道是从"Save Changes"按钮的点击事件进入此页面的。这就意味着,该用户可能已经编辑了购物车中物品的数量值,我们需要更新它们。
在output_fns.php脚本中,如果查看display_cart()函数"Save Changes"表单部分的文本框,你将发现它们的命名是与ISBN相关联的,如下所示:
echo"<input type=\"text\"name=\"".$isbn."\"value=\"".$qty."\"size=\"3\">";
现在,让我们来看看保存修改部分的脚本:
if(isset($_POST['save'])){
foreach($_SESSION['cart']as$isbn=>$qty){
if($_POST[$isbn]=='0'){
unset($_SESSION['cart'][$isbn]);
}else{
$_SESSION['cart'][$isbn]=$_POST[$isbn];
}
}
$_SESSION['total_price']=calculate_price($_SESSION['cart']);
$_SESSION['items']=calculate_items($_SESSION['cart']);
}
可以看出,我们通过购物车完成了工作,对购物车中的每一个isbn,检查了该变量名称的POST变量。这些都是"Save Changes"表单的表单域。
如果将任何一个域设置为0,我们将使用unset()函数将购物车中该物品完全删除。否则,就更新该购物车,使之与该表单域匹配,如下所示:
if($_POST[$isbn]=='0'){
unset($_SESSION['cart'][$isbn]);
}else{
$_SESSION['cart'][$isbn]=$_POST[$isbn];
}
在完成购物车更新之后,我们又调用calculate_price()函数和calculate_items()函数计算出会话变量total_price和items的新值。