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的新值。