28.4.2 列出一个目录中的所有图书
列出一个目录中的所有图书的处理过程与前面类似。实现此功能的函数称为show_cat.php,其源代码如程序清单28-6所示。
程序清单28-6 show_cat.php——该脚本显示特定目录中包含的所有图书
<?php
include('book_sc_fns.php');
//The shopping cart needs sessions,so start one
session_start();
$catid=$_GET['catid'];
$name=get_category_name($catid);
do_html_header($name);
//get the book info out from db
$book_array=get_books($catid);
display_books($book_array);
//if logged in as admin,show add,delete book links
if(isset($_SESSION['admin_user'])){
display_button("index.php","continue","Continue Shopping");
display_button("admin.php","admin-menu","Admin Menu");
display_button("edit_category_form.php?catid=".$catid,
"edit-category","Edit Category");
}else{
display_button("index.php","continue-shopping","Continue Shopping");
}
do_html_footer();
?>
该脚本在结构上与index页面非常类似,不同的是,在这里,我们获取的是图书信息而不是目录信息。
与列出目录信息示例类似,我们调用session_start()函数开始一个会话,然后调用函数get_category_name()将目录标识符转换为目录名,如下所示:
$name=get_category_name($catid);
该函数从数据库中查询目录名。其代码如程序清单28-7所示。
程序清单28-7 book_fns.php文件中的get_category_name()函数——该函数将一个目录标识符转换为一个目录名
function get_category_name($catid){
//query database for the name for a category id
$conn=db_connect();
$query="select catname from categories
where catid='".$catid."'";
$result=@$conn->query($query);
if(!$result){
return false;
}
$num_cats=@$result->num_rows;
if($num_cats==0){
return false;
}
$row=$result->fetch_object();
return$row->catname;
}
获得目录名称后,我们可以完成HTML标题并进而从数据库中获取和列出该选中目录的图书。如下所示:
$book_array=get_books($catid);
display_books($book_array);
函数get_books()和display_books()分别与函数get_categories()和display_categories()类似。因此,在这里我们将不再详细讨论。它们唯一的不同是前者从books表中获取信息,而后者是从categories表中获取。
display_books()函数通过show_book.php脚本为目录中的每一本书提供了链接。而且,每个链接后面都有一个参数。在本项目中,该参数是当前图书的ISBN。
在show_cat.php脚本的末尾,可以看到,如果是管理员登录的话,有一些函数将会显示一些附加的功能。我们将在管理函数部分讨论这些。