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

《PHP和MySQL Web开发(原书第4版)》28.4 实现在线目录

关灯直达底部

在这个应用程序中,将使用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生成,用以识别目录)。

这个将要传递给下一个脚本的参数将确定我们需要查看哪一个目录。