在这个应用程序中,将使用3个目录脚本:主页、目录页和图书详细信息页。
本站点的首页由脚本index.php产生。该脚本输出如图28-3所示。
图 28-3 该页列出了可在线购买图书的目录注意在站点中,除了给出了一个目录列表外,屏幕的右上角还有一个购物车链接,以及对该购物车的简要描述。在用户浏览站点和购买商品的时候,它会一直显示在每一个页面上。
如果用户点击其中的一个目录链接,它将进入一个目录页面,该页由脚本show_cat.php产生。Internet图书的目录页面如图28-4所示。
图 28-4 列出目录中的每本书,旁边附有一张图片所有包含在Internet目录的图书以链接形式列出。如果用户点击其中一个链接,将进入该书的详细信息页。一本书的详细信息页如图28-5所示。
图 28-5 每本书有一个详细信息页,该页详细地描述了该书在详细信息页中,除了/"View Cart/"链接外,我们还提供了/"Add to Cart/"链接,用户点击该链接可以选中一个物品。在讨论了如何创建购物车之后,我们再详细介绍它。
下面,让我们来了解这3个脚本。
28.4.1 列出目录
在本项目中使用的第一个脚本——index.php列出了数据库中的所有目录。该脚本如程序清单28-2所示。
程序清单28-2 index.php——该脚本产生本站首页
<?php
include(/'book_sc_fns.php/');
//The shopping cart needs sessions,so start one
session_start;
do_html_header(/"Welcome to Book-O-Rama/");
echo/"<p>Please choose a category:</p>/";
//get categories out of database
$cat_array=get_categories;
//display as links to cat pages
display_categories($cat_array);
//if logged in as admin,show add,delete,edit cat links
if(isset($_SESSION[/'admin_user/'])){
display_button(/"admin.php/",/"admin-menu/",/"Admin Menu/");
}
do_html_footer;
?>
在以上脚本的开始处,包含了book_sc_fns.php脚本,该文件包含该应用程序所有的函数库。
然后,我们必须开始一个会话。在购物车有了一个会话后,它才能正常工作。本网站中的每一页面都使用了会话。
index.php脚本还必须包含一些对HTML输出函数的调用,例如,do_html_header和do_html_footer(二者都包含在文件output_fns.php中)。该脚本还需要包含一些代码来检查用户是否以管理员的身份登录。如果是,就为它提供一些不同的导航选项。我们将在管理函数部分讨论它。
以上脚本最重要的部分是:
//get categories out of database
$cat_array=get_categories;
//display as links to cat pages
display_categories($cat_array);
函数get_categories和display_categories分别来自函数库book_fns.php和output_fns.php。函数get_categories将返回系统中的一组目录,我们将该组目录传递到display_categories函数。下面,我们来看一下get_categories函数的代码,如程序清单28-3所示。
程序清单28-3 book_fns.php文件中的函数get_categories——该函数从数据库中取回一个目录列表
function get_categories{
//query database for a list of categories
$conn=db_connect;
$query=/"select catid,catname from categories/";
[email protected]$conn->query($query);
if(!$result){
return false;
}
[email protected]$result->num_rows;
if($num_cats==0){
return false;
}
$result=db_result_to_array($result);
return$result;
}
可以看到,该函数连接到数据库并获得所有目录的标识符(ID)和名称。我们已经编写和使用了名为db_result_to_array的函数,该函数包含在db_fns.php中。其代码如程序清单28-4所示。它以一个MySQL搜索结果标识符作为参数,返回一组数字索引的行,其中每一行是一个相关数组。
程序清单28-4 db_fns.php文件中的db_result_to_array函数——该函数将一个MySQL结果标识符转换为结果数组
function db_result_to_array($result){
$res_array=array;
for($count=0;$row=$result->fetch_assoc;$count++){
$res_array[$count]=$row;
}
return$res_array;
}
在这个例子中,我们自始至终将这个数组返回给index.php,在该文件中,我们将该数组传递给output_fns.php的函数display_categories。display_categories函数以链接形式显示每个目录,此链接指包含该目录所有图书的页面。本函数源代码如程序清单28-5所示。
程序清单28-5 output_fns.php文件中的display_categories函数——该函数以一列指向目录链接的形式显示一组目录
function display_categories($cat_array){
if(!is_array($cat_array)){
echo/"<p>No categories currently available</p>/";
return;
}
echo/"<ul>/";
foreach($cat_array as$row){
$url=/"show_cat.php?catid=/".($row[/'catid/']);$title=$row[/'catname/'];
echo/"<li>/";
do_html_url($url,$title);
echo/"</li>/";
}
echo/"</ul>/";
echo/"<hr/>/";
}
该函数将数据库中的每一个目录转换成一个链接。每个链接导致下一个脚本的执行——show_cat.php——但是都有不同的参数,参数为目录的标识符或catid(这是一个唯一的标识数字,由MySQL生成,用以识别目录)。
这个将要传递给下一个脚本的参数将确定我们需要查看哪一个目录。