28.5 实现购物车
购物车功能都是围绕名为cart的会话变量展开的。该变量是一个相关数组,它以ISBN作为主键,以图书的数量作为值。例如,如果在购物车中添加了一本图书,那么该数组将包含:
0672329166=>1
也就是说,这是ISBN为0672329166的一本书。当我们将该书添加到购物车的时候,此信息也加到了该数组。当浏览购物车的时候,就是使用cart数组查看数据库中存储该物品的详细信息。
我们还使用了另外两个会话变量来控制标题栏的显示,该标题栏显示了全部物品数和总价格。这两个变量分别是items和total_price。
28.5.1 使用show_cart.php脚本
通过了解show_cart.php脚本,可以明白购物车代码是如何实现其功能的。如果我们点击"View Cart"或"Add to Cart"链接的话,show_cart.php脚本将显示我们要访问的页面。如果不使用任何参数来调用show_cart.php,将看到购物车的内容;如果用一个ISBN作为参数,该ISBN对应的物品被将添加到购物车中。
要完全理解这些,请参阅图28-6。
图 28-6 不使用参数,show_cart.php脚本只显示购物车的内容
在这个例子中,我们点击了"View Cart"链接,此时购物车为空;也就是说,我们还没有选中任何要买的物品。
图28-7进一步显示了用户的购物车的记录,此时我们已经选中了两本要买的书。在这种情况下,我们是通过点击该书在show_book.php页面上的"Add to Cart"链接而进入本页面的,该书为《PHP和MySQL Web开发》。如果仔细查看URL地址栏,可以看到这次我们使用了一个参数来调用该脚本。该参数为new,其值为067232976X——即刚刚添加到购物车的图书的ISBN。
图 28-7 带有参数new的show_cart.php脚本将添加一个物品到购物车
从这个页面,可以看到我们已经多了两个其他选项。一个是"Save Changes"按钮,它可以用来修改购物车中物品的数量。要修改数量,我们可直接改变物品的数量并点击"Save Changes"按钮。它实际上是一个提交按钮,可以将我们带到show_cart.php脚本以更新购物车。
除此之外,该页面中还有一个"Go To Checkout"按钮,当用户准备离开的时候,可以点击此按钮。稍后,我们将详细介绍它。
从现在开始,我们来了解show_cart.php脚本的代码。该脚本如程序清单28-9所示。
程序清单28-9 show_cart.php——该脚本控制购物车
<?php
include('book_sc_fns.php');
//The shopping cart needs sessions,so start one
session_start();
@$new=$_GET['new'];
if($new){
//new item selected
if(!isset($_SESSION['cart'])){
$_SESSION['cart']=array();
$_SESSION['items']=0;
$_SESSION['total_price']='0.00';
}
if(isset($_SESSION['cart'][$new])){
$_SESSION['cart'][$new]++;
}else{
$_SESSION['cart'][$new]=1;
}
$_SESSION['total_price']=calculate_price($_SESSION['cart']);
$_SESSION['items']=calculate_items($_SESSION['cart']);
}
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']);
}
do_html_header("Your shopping cart");
if(($_SESSION['cart'])&&(array_count_values($_SESSION['cart']))){
display_cart($_SESSION['cart']);
}else{
echo"<p>There are no items in your cart</p><hr/>";
}
$target="index.php";
//if we have just added an item to the cart,continue shopping in that category
if($new){
$details=get_book_details($new);
if($details['catid']){
$target="show_cat.php?catid=".$details['catid'];
}
}
display_button($target,"continue-shopping","Continue Shopping");
//use this if SSL is set up
//$path=$_SERVER['PHP_SELF'];
//$server=$_SERVER['SERVER_NAME'];
//$path=str_replace('show_cart.php','',$path);
//"go-to-checkout","Go To Checkout");
//if no SSL use below code
display_button("checkout.php","go-to-checkout","Go To Checkout");
do_html_footer();
?>
该脚本主要由3个部分组成:显示购物车、添加物品到购物车以及保存购物车的修改结果。接下来,我们将在下面3个小节里分别讨论它们。