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脚本的末尾,可以看到,如果是管理员登录的话,有一些函数将会显示一些附加的功能。我们将在管理函数部分讨论这些。