首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》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);

//display_button("https://".$server.$path."checkout.php",

//"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个小节里分别讨论它们。