当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

项目1系统及数据库结构设计

9/17/2020 9:38:49 PM 人评论

项目1系统及数据库结构设计

大作业:软件资源下载系统

软件资源下载系统是非常常见的网站应用程序,它可以帮助管理者整理软件资源、统计下载数量,可以帮助访问者快速方便地找到需要的软件。下面介绍一个软件资源下载系统的设计和实现过程。本实例采用PHP作为开发工具,MySQL作为后台数据库。

项目1 系统及数据库结构设计

要开发一个Web系统,首先需要进行需求分析和总体设计,分析系统的使用对象和用户需求,设计系统的体系结构和数据库结构,规划项目开发进度。在实际的项目开发过程中,这些工作是非常重要的。

1.系统总体设计

软件资源下载系统分为前台管理和后台管理。前台管理包括浏览软件信息、软件搜索、下载排行等功能。后台管理包括软件类别管理、软件资源管理、软件上传管理等模块。

本系统的功能模块如图A2所示。

figure_0290_0341

图A2 软件资源下载系统功能模块示意图

2.数据库结构设计与实现

在设计数据库表结构之前,首先要创建一个数据库。本系统使用的数据库为 Down,创建数据库和表的脚本保存为下载源代码“大作业\Down.sql”,读者可以在phpMyAdmin中执行此脚本。

本系统定义的数据库中包含以下5个表:下载软件表DownLoad、类别表Category、上传记录表UpFile、评论表Votes和用户信息表Users。

下面分别介绍这些表的结构。

(1)下载软件表DownLoad

下载软件表DownLoad用来保存下载软件的基本信息,其结构如表A1所示。

表A1 表DownLoad的结构

figure_0291_0342

(2)软件类别表Category

软件类别表Category用来保存软件的类别基本信息,其结构如表A2所示。

表A2 表Category的结构

figure_0291_0343

(3)上传记录表UpFile

上传记录表UpFile用来保存上传软件记录,其结构如表A3所示。

表A3 表UpFile的结构

figure_0292_0344

(4)评论表Votes

评论表Votes用来保存软件的评论信息,其结构如表A4所示。

表A4 表Votes的结构

figure_0292_0345

(5)用户信息表Users

用户信息表Users用来保存用户的基本信息,其结构如表A5所示。

表A5 表Users的结构

figure_0292_0346

在下载源代码“大作业\Down.sql”中,创建表Users后,将默认的用户Admin插入到表中,默认的密码为“111111”。

项目2 目录结构与通用模块

下面介绍实例的目录结构与通用模块。本实例的源代码存放在下载源代码的“大作业\down”目录下。

1.目录结构

在运行实例时,需要将 down 目录复制到 Apache 的根目录下。down 目录下包含下面的子目录。

• admin:用于存储系统管理员的后台操作脚本。

• class:保存数据库访问类。

• images:用于存储网页中的图片文件。

• soft:用于存储网站的软件资源。

其他PHP文件都保存在本实例的根目录下。

2.设计数据库访问类

为了使PHP程序条理更加清晰,本实例将对数据库表的访问操作封闭为一个类,每个类对应一个PHP文件,文件名与对应的数据库表名相同。所有数据库操作类都保存在class目录下,请参照源代码和注释理解。下面介绍这些类中定义的成员函数。

(1)DownLoad类

DownLoad类用来管理表DownLoad的数据库操作,类的成员函数如表A6所示。

表A6 DownLoad类的成员函数

figure_0293_0347

(2)Category类

Category类用来管理表Category的数据库操作,类的成员函数如表A7所示。

表A7 Category类的成员函数

figure_0293_0348

(3)UpFile类

UpFile类用来管理表UpFile的数据库操作,类的成员函数如表A8所示。

表A8 UpFile类的成员函数

figure_0294_0349

(4)Software类

Software类用来管理表Software的数据库操作,类的成员函数如表A9所示。

表A9 oftware类的成员函数

figure_0294_0350

(5)Votes类

Votes类用来管理表Votes的数据库操作,类的成员函数如表A10所示。

表A10 Votes类的成员函数

figure_0294_0351

(6)Users类

Users类用来管理表Users的数据库操作,类的成员函数如表A11示。

表A11 Users类的成员函数

figure_0295_0352

项目3 设计管理员主界面

本实例可以分为管理员用户管理界面和访客界面2个部分。本项目将介绍管理主界面的实现过程。

所有Admin用户管理部分的文件都保存在下载源代码的“大作业\Down\admin”目录下。

1.管理员登录页面

管理员用户需要首先登录到本系统,然后才能使用系统提供的管理功能。管理员登录页面的地址为:

http://localhost/down/admin/login.php

登录页面如图A3所示。

figure_0295_0353

图A3 管理员登录页面

在登录页面中,使用表单接收用户输入的用户名和密码数据,表单的定义代码如下:

<form name="myform" action="putSession.php" method="Post">

表单提交时,根据action属性将执行putSession.php,主要代码如下:

<?PHP

session_start();

//获取输入的用户名和密码

$UID= $_POST["loginname"];

$PSWD= $_POST["password"];

//把用户名和密码放入Session

$_SESSION["UserName"] = $UID;

$_SESSION["UserPwd"] = $PSWD;

header("Location: index.php");

?>

程序将接收到的用户名 loginname 和密码 password 数据赋值到 Session 变量 UserName 和UserPwd中,然后将页面转向index.php。因为index.php中包含IsUser.php,可以进行身份验证。不能通过身份验证的用户将直接转向普通用户使用的系统主界面。

IsUser.php的功能是判断当前用户是否已登录(即保存在表Users中的用户),如果不是,则显示登录界面,要求用户登录;如果是,则不执行任何操作,直接进入包含它的网页。

IsUser.php的代码如下:

<?PHP

//获取SESSION变量

session_start();

$UName = $_SESSION["UserName"];

$UPwd = $_SESSION["UserPwd"];

include('..\Class\Users.php');

$objUser = new Users();

//用户名是否为空

if($UName <> "") {

$objUser->UserName = $UName;

$objUser->UserPwd = $UPwd;

if(!$objUser->HaveUser()) {

header("Location: login.php");

}

}

else

header("Location: login.php");

?>

程序从 Session 变量中读取注册用户信息,并连接到数据库身份验证。如果是注册用户,则程序不执行任何操作(即通过验证,跳过此文件执行其他文件);否则转向到登录页。

在需要用户登录后才能访问的文件中引用此文件作为头文件,代码如下:

include('isUser.php');

在本系统中,IsUser.php保存在admin目录下。

2.设计管理员主界面

本实例的管理主界面为admin\index.php,它的功能是显示系统的管理链接。index.php的界面如图A4所示。

figure_0296_0354

图A4 index.php的运行界面

在index.php中,使用框架包含了文件left.php和NewsList.php,分别用来处理左侧和右侧的显示内容。框架定义代码如下:

<frameset framespacing="1" border="1" bordercolor= #333399 frameborder="yes">

<frameset cols="150,*">

<frame name="contents" target="main" src="left.php" scrolling="auto"frameborder=0>

<frame name="right" src="CategoryList.php" scrolling="auto" noresize frameborder=0>

</frameset>

<noframes>

<body>

<p>此网页使用了框架,但您的浏览器不支持框架。</p>

</body>

</noframes>

</frameset>

3.设计admin\left.php

left.php文件用于显示管理界面的左侧部分,它定义了一组管理链接,如表A12所示。

表A12 left.php中的管理链接

figure_0297_0355

这些功能的具体实现方法将在稍后介绍。

4.退出登录

管理员用户登录后,在左侧的功能列表中单击“退出系统”超链接,可以退出到未登录的状态。“退出登录”超链接的定义代码如下:

<A href="LogOut.php" target=_top><font color="#444444">退出系统</font></A>

LogOut.php的主要代码如下:

<?PHP

session_start();

$_SESSION["UserName"] = "";

$_SESSION["UserPwd"] = "";

header("Location: Login.php");

?>

程序将Session变量设置为空,然后将页面转向登录页面。

项目4 后台管理模块设计

后台管理可以实现以下功能。

• 上传软件。

• 添加、修改和删除软件信息。

• 添加、修改和删除软件类别信息。

• 添加、修改和删除系统用户信息。

• 修改个人密码。

只有管理用户才有权限进入后台管理模块。

1.设计上传软件页面

在admin\index.php中,单击“软件上传”超链接,将访问admin\UpLoad.php,用来上传软件资源,如图A5所示。

figure_0298_0356

图A5 上传软件页面

在上传软件页面UpLoad.php中,上传软件资源的表单定义如下:

<form name="form1" method="post" action="UpFile.php" enctype="multipart/form-data">

可以看到,上传软件的数据由upfile.php处理。Upfile.php将用户上传的软件存放到系统指定的software目录下,并将上传信息保存到数据库UpFile表中,代码如下:

<?PHP

date_default_timezone_set('Asia/Chongqing'); //系统时间差8小时问题

//此函数用于根据当前系统时间自动生成上传文件名

function makefilename() {

//获取当前系统时间,生成文件名

$curtime = getdate();

$filename =$curtime['year'] . $curtime['mon'] . $curtime['mday'] . $curtime['hours'] . $curtime['minutes'] . $curtime['seconds'];

Return $filename;

}

//检查上传文件的目录

$upload_dir = getcwd();

$len = strlen($upload_dir)-6;//去掉当前目录admin

$upload_dir = substr($upload_dir, 0, $len) . "\\software\\";

//如果目录不存在,则创建

if(!is_dir($upload_dir))

mkdir($upload_dir);

$newfilename = makefilename();

$oldfilename = $_FILES['file1']['name']; //服务器端临时文件名

$pos = strrpos($oldfilename, '.'); // 获取文件名中最右侧的

$ext = substr($oldfilename, $pos, strlen($oldfilename)-$pos);

//获取文件的扩展名

$newfile = $upload_dir . $newfilename . $ext;

if(file_exists($_FILES['file1']['tmp_name'])) {

move_uploaded_file($_FILES['file1']['tmp_name'], $newfile);

}

else {

echo("error");

}

echo("客户端文件名:" . $_FILES['file1']['name'] . "<BR>");

echo("文件类型:" . $_FILES['file1']['type'] . "<BR>");

echo("文件大小:" . $_FILES['file1']['size'] . "<BR>");

echo("服务器端临时文件名:" . $_FILES['file1']['tmp_name'] . "<BR>");

echo("上传后新的文件名:" . $newfile . "<BR>");

include('..\Class\UpFile.php');

$objUpFile = new UpFile();

$objUpFile->UpName = $newfilename . $ext; //不带路径的文件名

$objUpFile->URL = $newfile;  // 带路径的文件名

$objUpFile->InsertUpFile();

?>

文件上传成功 [ <a href=# onclick=history.go(-1)>继续上传</a> ]

makefilename()函数的功能是根据当前的系统时间生成文件名。关于上传文件的具体方法请参照5.4.1小节理解。上传文件的信息将保存在表UpFile中,程序调用$objUpFile->InsertUpFile()函数插入上传文件的数据。

上传成功后,将显示上传文件的基本信息,如图A6所示。

figure_0299_0357

图A6 上传成功

2.设计上传管理页面

在admin\index.php中,单击“上传管理”超链接,将访问admin\UpList.php,用来管理上传的软件资源,如图A7所示。

figure_0299_0358

图A7 上传软件管理页面

在上传管理页面UpList.php中,从数据库表UpFile中读取软件的上传信息,代码如下:

<?PHP

include('..\Class\UpFile.php');

$objUpfile = new UpFile();

$results = $objUpfile->GetUpFilelist();

$exist = false;

while($row = $results->fetch_row()) {

$exist = true;

?>

<tr>

<td align="center"><?PHP echo($row[0]); ?>&nbsp;</td>

<td><?PHP echo($row[1]); ?>&nbsp;</td>

<td align="left"><?PHP echo($row[2]); ?>&nbsp;</td>

<td align="center"><a href="UpDelt.php?id=<?PHP echo($row[0]); ?>">删除</a></td>

</tr>

<?PHP

}

if(!$exist) {

echo("<tr><td align=center colspan=4>没有上传的软件资源</td></tr></table>");

}

?>

用户可以通过单击“删除”超级链接,执行UpDelt.php,删除上传记录,同时删除上传的软件。UpDelt.php的主要代码如下:

<?PHP

//读取编号参数

$id = $_GET["id"];

//读取指定软件资源信息的数据

include('..\Class\UpFile.php');

$objUpfile = new UpFile();

$results = $objUpfile->GetUpFileInfo($id);

if($row = $results->fetch_row()) {

$URL = $row[2];

if(is_file($URL)) //如果存在,则删除文件

unlink($URL);

$objUpfile->DeleteUpFile($id);//删除数据库中的记录

}

?>

在PHP中,is_file()函数用于判断文件是否存在,unlink()函数用于删除指定的文件。

3.设计软件类别管理页面

在admin\index.php中,单击“软件类别管理”超级链接,执行admin\CategoryList.php,显示软件的类别列表,如图A8所示。

figure_0300_0359

图A8 类别管理页面

类别管理页面为 CategoryList.php,软件类别的添加、修改和删除都在这里完成。下面介绍CategoryList.php中与界面显示相关的部分代码。

(1)显示类别信息

为了便于用户管理类别信息,CategoryList.php以表格的形式按层次显示类别名称,即一级类别和二级类别显示在不同的表格列中,并在后面显示修改和删除链接。代码如下:

<?PHP

include('..\Class\Category.php');

$ca = new Category();

......

//读取一级类目数据到记录集$results中

$results = $ca->GetCategorylist();

$exist = false;//标识$results中是否存在数据

//在表格中显示类目名称

while($row = $results->fetch_row()) {

$exist = true;

?>

<tr>

<td><?PHP echo($row[1]); ?></td>

<td> </td>

<td  align="center"><a  href="CategoryList.php?Oper=update&did=<?PHPecho($row[0]); ?>&name=<?PHP echo($row[1]); ?>">修改</a></td>

<td  align="center"><a  href="CategoryList.php?Oper=delete&did=<?PHPecho($row[0]); ?>&name=<?PHP echo($row[1]); ?>">删除</a></td>

</tr>

<?PHP

//读取此类目下所有类目信息

$ca1 = new Category();

$results1 = $ca1->GetSublist($row[0]);

while($row1 = $results1->fetch_row()) {

?>

<tr>

<td> </td>

<td><?PHP echo($row1[1]); ?></td>

<td  align="center"><a  href="CategoryList.php?Oper=update&did=<?echo($row1[0]); ?>&name=<?PHP echo($row1[1]); ?>">修改</a></td>

<td  align="center"><a  href="CategoryList.php?Oper=delete&did=<?PHPecho($row1[0]); ?>&name=<?PHP echo($row1[1]); ?>">删除</a></td>

</tr>

<?PHP

}

}

if(!$exist) {

//如果记录集为空,则显示“目前还没有记录”

echo("<tr><td colspan=4 align=center><font style='COLOR:Red'>目前还没有记录。</font></td></tr></table>");

}

?>

可以看到,修改和删除类别信息的操作也在页面 CategoryList.php 中完成(超级链接的 href属性值为CategoryList.php)。参数Oper表示当前页面的操作状态,当Oper=edit时,表示当前操作为修改类别信息;当Oper=delete时,表示当前操作为删除类别信息。参数did表示要修改或删除的类别编号;参数name表示要修改或删除的类别名称。

(2)显示添加类别的表单

表单AForm和BForm用来添加类别信息,当Oper= add时,将显示添加类别的表单。添加类别有两种情况。如果添加一级类别名称,则在表单AForm的文本框txttitle中输入类别名称;如果添加二级类别信息,则需要在表单BForm中选择一级类别名称,然后在文本框txttitle中输入二级类别名称。具体代码如下:

<form name="AForm" method="post" action="CategoryList.php?Oper=add">

<p align="center">

<font color="#FFFFFF"><b><font color="#000000">添加一级类目:</font></b></font>

&nbsp;&nbsp;类目名称:&nbsp;&nbsp;<input type="text" name="txttitle" size="20">

<input type="hidden" name="sUpperId" value="0">&nbsp;&nbsp;

<input type="submit" name="Submit" value=" 添 加 " onclick="returnform_onsubmit1(this.form)">

</p>

</form>

<form name="BForm" method="post" action="CategoryList.php?Oper=add">

<p align="center">

<select name="cid">

<?PHP //将类目装入下拉菜单中

$results = $ca->GetCategorylist();

while($row = $results->fetch_row()) {

$sname = $row[1];

$did = $row[0]; ?>

<option value="<?PHP echo($did); ?>"><?PHP echo($sname); ?></option>

<?PHP } ?>

</select>

<font color="#FFFFFF"><b><font color="#000000">添加二级类目:</font></b></font>

&nbsp;&nbsp;类目名称:&nbsp;&nbsp;<input type="text" name="txttitle" size="20">

<input type="hidden" name="sUpperId" value="1">&nbsp;&nbsp;

<input type="submit" name="Submit" value=" 添 加 " onclick="returnform_onsubmit(this.form)">

</p>

</form>

当用户添加一级类别名称时,单击“添加”按钮,函数form_onsubmit1用来验证文本框中txttitle是否输入了数据。代码如下:

function form_onsubmit1(obj)

{

ValidationPassed = true;

if(obj.txttitle.value == "") {

alert("请输入类目名称");

ValidationPassed = false;

return ValidationPassed;

}

}

当用户添加二级类别名称时,单击“添加”按钮,函数 form_onsubmit 用来验证是否选择了一级类别以及文本框txttitle中是否输入了数据。代码如下:

function form_onsubmit(obj)

{

ValidationPassed = true;

if(obj.cid.selectedIndex <0) {

alert("请选择一级类目");

ValidationPassed = false;

return ValidationPassed;

}

if(obj.txttitle.value == "") {

alert("请输入类目名称");

ValidationPassed = false;

return ValidationPassed;

}

}

(3)显示修改类别的表单

表单UForm用来修改类别信息。当Oper= update时,将显示修改类别的表单,具体代码如下:

<?PHP

//如果当前状态为修改,则显示修改的表单,否则显示添加的表单

if($Soperate == "update") {

$sTitle = $_GET["name"];

?>

<form name="UFrom" method="post" action="CategoryList.php?did=<?PHPecho($Operid); ?>&Oper=edit">

<div align="center">

<input type="hidden" name="sOrgTitle" value="<?PHP echo($sTitle); ?>">

<font color="#FFFFFF"><b><font color="#000000">类目名称</font></b></font>

<input type="text" name="txttitle" size="20" value="<?PHP echo($sTitle); ?>">

<input type="submit" name="Submit" value="修改">

</div>

</form>

<?PHP

}

else {

?>

隐藏文本框(type="hidden")sOrgTitle 用于显示和保存修改前的类别名。添加和修改类别的脚本都是CategoryList.php,只是参数不同。当参数Oper=edit时,程序将处理修改的类别数据;当参数Oper=add时,程序将处理添加的类别数据。

(4)添加类别信息

在打开CategoryList.php时,如果参数Oper不等于update,页面的下方将显示添加数据的表单Aform。在文本域txttitle中输入类别的名称,然后单击“添加”按钮,将调用CategoryList.php,参数Oper等于add,表示插入新记录。

在执行CategoryList.php时,可以在url中包含参数,程序将根据参数Oper的值决定进行的操作。与添加数据相关的代码如下:

<?PHP

//处理添加、修改和删除操作

//读取参数oper,决定当前要进行的操作

$Soperate = $_GET["Oper"];

$Operid = $_GET["did"];

include('..\Class\Category.php');

include('..\Class\DownLoad.php');

$ca = new Category();

$dw = new DownLoad();

//删除记录

if($Soperate=="delete") {

……

}

//添加

elseif($Soperate == "add") {

$CName = $_POST["txttitle"];

$UpId = $_POST["sUpperId"];

if($UpId=="0")

$UId = 0;

else

$UId = $_POST["cid"];

//判断是否已经存在此类目名称

if(!$ca->HaveCategory($CName)) {

//如果没有此类目名称,则创建新记录

$ca->CName = $CName;

$ca->UpperId = $UId;

$ca->InsertCategory();

echo("类别已经成功添加!");

}

else {

echo("已经存在此类别名称!");

}

}

elseif($Soperate == "edit") {

……

}

?>

变量$Soperate用于接收参数Oper的值,当$Soperate等于“add”时,表示当前状态为插入记录。在插入新类别之前,应该判断此类别名称是否已经存在,以避免出现重复的类别。

(5)修改类别信息

在 CategoryList.php 中,单击类别后面的“修改”超级链接,将打开 CategoryList.php,参数Oper等于update。此时,页面的下方将显示修改数据的表单Uform。在文本域txttitle中输入类别的名称,然后单击“修改”按钮,将再次打开CategoryList.php,参数Oper等于edit,表示修改记录。与修改数据相关的代码如下:

<%

……

//删除记录

if($Soperate=="delete") {

……

//添加

elseif($Soperate == "add") {

……

}

elseif($Soperate == "edit") {

$CName = $_POST["txttitle"];

//如果新类目名称与旧名称不同,则判断是否存在此类目名称

$ca->CId = $Operid;

$ca->CName = $CName;

//如果原类目编号和新类目名称不存在,则表示类目名称发生变化

if(!$ca->HaveSameCate()) {

//此时判断是否存在此类目名称

if(!$ca->HaveCategory($CName)) { //新类目不存在

$ca->CName = $CName;

$ca->UpdateCategory($Operid);

echo("类目已经成功修改!");

}

else {

echo("已经存在此类目名称");

}

}

}

?>

在修改类别之前,应该判断新的类别是否已经存在,以避免出现重复的类别。

(6)删除类别信息

在 CategoryList.php 中,单击类别后面的“删除”超链接,将再次打开 CategoryList.php,参数Oper等于delete。删除类别的代码如下:

//删除记录

if($Soperate=="delete") {

//判断此类目是否存在下级类目

if($ca->HaveSub($Operid)) {

exit("此类目存在下级类别,不能删除!");

}

//判断此类目下是否存在软件资源信息

if($dw->HaveCId($Operid)) {

exit("此类目包含软件资源信息,不能删除!");

}

$ca->DeleteCategory($Operid);

echo("类别已经成功删除!");

}

//添加

elseif($Soperate == "add") {

……

}

elseif($Soperate == "edit") {

……

}

?>

在修改类别之前,应该判断此类别是否满足允许被删除的条件,如果要删除类别满足下面的任一条件,则不能删除此类别:

• 是否存在下级类别;

• 是否被软件下载表DownLoad使用。

变量 Operid 用于接收参数 did 的值,表示当前要删除的类别编号。程序调用$ca->DeleteCategory()函数删除指定的类别记录。

4.设计添加软件页面

在admin\index.php中,单击“添加软件资源”超链接,将执行admin\DownAdd.php,添加新的软件下载资源信息,如图A9所示。

figure_0306_0360

图A9 添加软件下载资源页面

在添加软件页面中,从表Category中读取软件类别信息,并存放到下拉列表CId中,读取类别信息的代码如下:

<TR>

<TD align="right" width="15%" nowrap>软件类别:</TD>

<TD><select size="1" name="cid">

<?PHP

//读取一级类别信息

include('..\Class\Category.php');

$objCate = new Category();

$objCate1 = new Category();

$results = $objCate->GetCategorylist();

while($row = $results->fetch_row()) {

?>

<option value="<?PHP echo($row[0]); ?>"><?PHP echo($row[1]); ?></option>

<?PHP

//读取下级类别

$results1 = $objCate1->GetSublist($row[0]);

while($row1 = $results1->fetch_row()) {

//下级类别的value值=类别编号大小+100000,用来区分一级类别

?>

<option value="<?PHP echo(10000+(int)$row1[0]); ?>">-- <?PHPecho($row1[1]); ?></option>

<?PHP

}

}

?>

</Select> </TD>

</TR>

在DownAdd.php页面中,“添加”按钮代码如下:

<input type="submit" value=" 添 加 " name="B1" onclick="if(CheckFlds()){return true;}return false;">

提交前需要调用CheckFlds()函数对表单进行域校验,代码如下:

<SCRIPT language = "JavaScript">

function CheckFlds(){

if (document.form1.cid.value==""){

alert("请选择软件类别!");

form1.cid.focus;

return false;

}

if (document.form1.txtfilename1.value==""){

alert("请输入下载地址1!");

form1.txtfilename1.focus;

return false;

}

if (document.form1.txtname1.value==""){

alert("请输入地址名称1!");

form1.txtname1.focus;

return false;

}

if (document.form1.txtsoftname.value==""){

alert("请输入软件名称!");

form1.txtsoftname.focus;

return false;

}

//判断是否存在下级类目

ndid = document.form1.cid.value;

if (ndid <= 10000){

alert("此类目存在下级类别,请重新选择类别");

form1.cid.focus;

return false;

}

return true;

}

</SCRIPT>

程序判断软件类别、软件名称、下载地址1等信息是否为空,如果为空,则返回false,不允许表单数据提交;判断用户是否选择了软件类别,而且选择的类别应为二级类别,否则不允许提交表单。

当用户单击“添加”按钮时,将提交表单,表单的定义代码如下:

<form method="POST" name="form1" action="DownSave.php?action=add"><br>

表单数据提交后,将执行DownSave.php保存数据,参数action表示当前的动作,action=add表示添加记录。DownSave.php也可以用来处理修改软件信息的数据。

DownSave.php的主要代码如下:

<?PHP include('isUser.php'); ?><html>

<?PHP

include('..\Class\DownLoad.php');

$dw = new DownLoad();

$dw->DownName = $_POST["txtname"]; //软件名称

$dw->CId = $_POST["cid"]-10000;

if($_POST["txtfilename1"]<>"") {

$dw->FileName1 = $_POST["txtfilename1"];

$dw->TxtName1 = $_POST["txtname1"];

}

if($_POST["txtfilename2"]<>"") {

$dw->FileName2 = $_POST["txtfilename2"];

$dw->TxtName2 = $_POST["txtname2"];

}

if($_POST["txtfilename3"]<>"") {

$dw->FileName3 = $_POST["txtfilename3"];

$dw->TxtName3 = $_POST["txtname3"];

}

$dw->ImageFile = $_POST["images"];

$dw->FromURL = $_POST["fromurl"];

$dw->Rights = $_POST["rights"];

$dw->DownSize = $_POST["size"];

$dw->DNote = $_POST["txtnote"];

$dw->HotStars = $_POST["hot"];

if($_POST["hide"]=="on")

$dw->IsHide = 1;

else

$dw->IsHide = 0;

if($_POST["hots"]=="on")

$dw->IsHot = 1;

else

$dw->IsHot = 0;

//添加软件信息

if($_GET["action"]=="add")

$dw->InsertDownLoad();

else //修改软件信息

$dw->UpdateDownLoad($_GET["did"]);

?>

<html>

<head>

<title>保存软件信息</title>

<link rel="stylesheet" type="text/css" href="../style.css">

</head>

<body bgcolor="#eeeeee">

<br><br>

<table width="50%" align="center" border="1" cellpadding="0" cellspacing="0"bordercolorlight="#666666" bordercolordark="#FFFFFF">

<tr>

<td width="100%" height="20" bgcolor="#eeeeee">

<p align="center"><font color="#FFFFFF">

<?PHP

if($_POST["action"]=="add")

echo("添加");

else

echo("修改");

?>

软件成功</font> </td>

</tr>

<tr>

<td width="100%" >

<p align="left"><br>

下载地址1为:<?PHP echo($_POST["txtfilename1"]); ?><br><br>

下载地址2为:<?PHP echo($_POST["txtfilename2"]); ?><br><br>

下载地址3为:<?PHP echo($_POST["txtfilename3"]); ?><br><br>

软件名称为:<?PHP echo($sw->DownName); ?><br><br>

</td>

</tr>

</table>

<?PHP

if($_GET["action"]=="edit") { ?>

<p align="center"><a href="javascript:window.close()">[关闭本窗口]</a></p>

<?PHP } /*end of if*/ ?>

</body>

</html>

5.设计软件管理页面

在admin\index.php中,单击“软件资源管理”超链接,将执行admin\DownList.php,用来管理软件下载资源,如图A10所示。

figure_0309_0361

图A10 软件管理页面

在软件管理页面DownList.php中,从数据库表DownLoad中读取软件信息。代码如下:

<?PHP

include('..\Class\DownLoad.php');

$dw = new DownLoad();

$results = $dw->GetDownLoadlist();

while($row = $results->fetch_row()) {

?>

<tr>

<td align="center"><?PHP echo($row[0]); ?>&nbsp;</td>

<td><?PHP echo($row[1]); ?>&nbsp;</td>

<td align="center"><a href="DownEdit.php?id=<?PHP echo($row[0]); ?>"onClick="return newwin(this.href)">修改</a></td>

<td align="center"><a href="DownDelt.php?id=<?PHP echo($row[0]); ?>"onClick="return newwin(this.href)">删除</a></td>

</tr>

<?PHP } ?>

用户可以通过单击“修改”超链接,打开DownEdit.php,修改软件资源记录。修改和保存软件信息的过程与添加软件相似,请参照理解。

用户可以通过单击“删除”超链接,执行SoftDelt.php,删除软件资源信息。代码如下:

<?PHP

include('..\Class\DownLoad.php');

$dw = new DownLoad();

$id = $_GET["id"];

$dw->DeleteDownLoad($id);

echo("软件资源成功删除!");

?>

6.设计用户管理页面

在admin\index.php中,单击“用户管理”超链接,执行admin\UserList.php,显示系统管理员用户列表,如图A11所示。

figure_0310_0362

图A11 用户管理页面

在用户管理页面UserList.php中,可以添加和删除系统管理员用户,并且可以重置用户密码。

(1)添加用户信息

当用户单击“新建用户信息”按钮后,将打开UserEdit.php页面,添加新用户。代码如下:

<input type="button" value="新建用户信息" onclick="newView('UserEdit.php)" name=add>

在UserEdit.php页面中,只需要输入新用户的用户名即可,如图A12所示。

figure_0310_0363

图A12 添加新用户页面

(2)保存用户信息

在添加新用户页面中,当用户单击“提交”按钮时,将提交表单。代码如下:

<form name="form1" method="POST" action="UserSave.php" onsubmit="return CheckFlds()">

函数CheckFlds用来检验是否输入了用户名,如果用户名为空,则不允许提交表单。

保存用户信息的文件为UserSave.php,代码如下:

<?PHP

//在数据库表Users中插入新信息

$usr = new Users();

$usr->UserName = $_POST["uname"];

//插入用户前判断该用户名是否已经存在

if($usr->HaveUserName($usr->UserName)) {

echo("<script>alert('该用户名已经存在');history.go(-1);</script>");

exit("");

}

$usr->InsertUser();

echo("<h3>用户成功保存</h3>");

?>

程序调用$usr->HaveUserName()函数判断表Users中是否已经存在该用户名,如果存在则不允许添加新用户;如果不存在,则调用$usr->InsertUser()函数保存用户信息。

(3)删除用户信息

在用户管理页面中,当用户单击“删除”超链接时,执行代码如下:

<td align="center"><?PHP if($row[0]<>"Admin") { ?><a href="UserDelt.php?uid=<?PHP echo($row[0]); ?>" onClick="if(confirm(' 确定要删除用户吗 ?')){return newView(this.href);}return false;">删除</a><?PHP } ?>&nbsp;</td>

程序将询问用户是否确认要删除该用户系统,如果是,则在新窗口中执行UserDelt.php脚本,删除该用户。代码如下:

<?PHP

$uid = $_GET["uid"];

$usr = new Users();

$usr->DeleteUser($uid);

echo("<h3>用户记录成功删除</h3>");

?>

(4)密码重置

在用户管理页面中,当用户单击“密码重置”超级链接时,执行代码如下:

<td align="center"><a href="PwdReset.php?uid=<?PHP echo($row[0]); ?>"onClick="if(confirm('确定要重置用户密码吗?')){return newView(this.href);}return false;">密码重置</a></td>

程序将询问用户是否确认要重置该用户的登录密码,如果是,则在新窗口中执行PwdReset.php脚本,将该用户的密码还原为111111。代码如下:

<?PHP

$uid = $_GET["uid"];

$usr = new Users();

$usr->UpdatePassword(uid,1);

echo("<h3>用户密码成功重置</h3>");

?>

7.设计修改密码页面

在admin\index.php中,单击“修改密码”超链接,执行admin\PwdChange.php,允许系统管理员修改登录密码,如图A13所示。

figure_0311_0364

图A13 修改密码页面

当管理员单击“提交”按钮时,将提交页面,代码如下:

<form method="POST" action="PwdSave.php?uid=<?PHP echo($UserId); ?>" name="myform"onsubmit="return ChkFields()">

函数ChkFields的功能是对输入的新密码进行校验,代码如下:

<Script Language="JavaScript">

function ChkFields() {

if (document.myform.OriPwd.value=='') {

alert("请输入原始密码!")

return false

}

if (document.myform.Pwd.value.length<6) {

alert("新密码长度大于等于6!")

return false

}

if (document.myform.Pwd.value!=document.myform.Pwd1.value) {

alert("两次输入的新密码必须相同!")

return false

}

return true

}

</Script>

程序将检查新密码是否输入、新密码长度是否大于等于6位和两次输入的新密码是否相同,只有满足以上条件,才执行SavePwd.php文件。

在SavePwd.php页面中,程序调用UpdatePassword()函数修改密码,代码如下:

<?PHP

$OriPwd = $_POST["OriPwd"];

$Pwd = $_POST["Pwd"];

$usr = new Users();

$usr->UserPwd = $Pwd;

$usr->UpdatePassword($UserName,0);

echo("<h2>更改密码成功!</h2>");

$_SESSION["UserPwd"] = $Pwd;

?>

项目5 系统主界面程序设计

本项目将介绍系统主页面的设计过程。

1.设计主界面

本实例的主界面为index.php,它的功能是显示系统的给定信息,包括软件查询、推荐软件、热点浏览排行等信息,如图A14所示。

在index.php中,包含top.php和left.php脚本,分别用来显示上方和左侧内容。index.php的代码显示网页中间部分的内容。

下面将介绍index.php的主要代码。

在index.php的中央,将显示推荐下载的软件信息,代码如下:

<table width="100%" border="1" cellpadding="0" cellspacing="0"bordercolorlight="#B06A00" bordercolordark=#E7E4E2>

<tr>

<td width="100%" valign="top">

<table width="100%">

<?PHP

$m = 0;

//include('Class\DownLoad.php');

$dw = new DownLoad();

$results = $dw->GetHot();

$exist = false;

while($row = $results->fetch_row()) {

$exist = true;

if($m>=31)

break;

$m = $m + 1;

?>

<TR>

<A href="list.php?id=<?PHP echo($row[0]); ?>"><?PHP echo($row[1]); ?></A><FONT color='#B06A00'>(

<?PHP  echo($row[21]);  ?>&nbsp;<font  color=#000099><?PHPecho($row[19]); ?></font>)</font></TD>

</TR>

<?PHP

}

if(!$exist) {

echo("<TR><td>没有任何软件资源</td></Tr>");

}

?>

</table>

figure_0313_0365

图A14 index.php的运行界面

当用户单击软件名称时,在新窗口中打开list.php文件,查看下载软件的详细资料。

2.设计top.php

top.php文件用于显示主界面的上侧部分,包括图片、首页链接、软件类别名称和软件搜索。用户通过单击软件类别名称查看指定类别名称下所有的软件列表。代码如下:

<?PHP

include('Class\Category.php');

$ca = new Category();

$results = $ca->GetCategorylist();

while($row = $results->fetch_row()) {

?>

| <a class="list" href="sort.php?cid=<?PHP echo($row[0]); ?>"><font color="#B06A00">

<?PHP echo($row[1]); ?></font></a>

<?PHP } ?>

|</p>

</font> </td>

</tr>

</table>

</center>

</div>

<div align="center">

<center>

<table  width="703"  border="1"  cellpadding="0"  cellspacing="0"bordercolorlight="#B06A00" bordercolordark=#FFFFFF>

<tr>

<form method="post" name="myform" action="search.php">

<td width="100%" bordercolorlight="#B06A00" bordercolordark=#FFFFFF>

<font color=#B06A00 >软件搜索:</font><SELECT name="cid" size="1">

<OPTION selected value="">类目不限</OPTION>

<?PHP

$results = $ca->GetCategorylist();

while($row = $results->fetch_row()) {

?>

<OPTION value="<?PHP echo($row[0]); ?>"><?PHP echo($row[1]); ?></OPTION>

<?PHP } ?>

当用户在软件搜索下拉列表中选择软件类别,并在文本域中输入搜索关键字后,单击“搜索”按钮,将提交表单,代码如下:

<form method="post" name="myform" action="search.php">

查询结果显示页面Search.php将在稍后介绍。

3.设计Left.php

Left.php文件用于显示主界面的左侧部分,包括今日浏览排行、本周浏览排行和累计浏览排行。

(1)显示今日下载排行

今日浏览排行列表中将读取表DownLoad中日浏览数量大于0、不隐藏的和最后浏览时间为当日的10个软件信息。代码如下:

<?PHP

date_default_timezone_set('Asia/Chongqing'); //系统时间差8小时问题

$now = getdate();

$mm = $now['mon'];

if(strlen($now['mon'])<2)

$mm = "0" . $now['mon'];

$dd = $now['mday'];

if(strlen($now['mday'])<2)

$dd = "0" . $now['mday'];

$today = $now['year'] . "-" . $mm . "-" . $dd;

// echo($today);

include('Class\DownLoad.php');

$dw = new DownLoad();

$exist = false;

$sql = "SELECT Did, DownName FROM DownLoad WHERE DayHits>0 AND LEFT(LastHitTime, " . strlen($today) . ")='" . $today . "' Order By DayHits DESC LIMIT 0, 10";

$results = $dw->GetDLlist($sql);

while($row = $results->fetch_row()) {

$exist = true;

echo("<img src='IMG/follow.gif' width='11' height='11'><A href=list.php?id=" . $row[0] . ">" . $row[1] . "</A><br>");

}

if(!$exist)

echo("本日没有下载");

?>

(2)显示本周下载排行

本周浏览排行列表中将读取表DownLoad中本周浏览数量大于0、不隐藏的且最后浏览时间在本周的10个软件信息。代码如下:

<?PHP

$weekday = $now['wday'];   // 获取当前星期几0-周日~6-周6

if($weekday == 0)

$weekday = 7;

$sql = "Select DId,DownName From DownLoad Where (LastHitTime > DATE_ADD('" . $today . "', INTERVAL " . (1-$weekday) . " DAY)) AND (LastHitTime < DATE_ADD('" . $today . "', INTERVAL " . (7-$weekday) . " DAY)) And IsHide=0 And WeekHits>0 Order By WeekHits Desc LIMIT 0,10";

$results = $dw->GetDLlist($sql);

$exist = false;

while($row = $results->fetch_row()) {

$exist = true;

echo("<img src='IMG/follow.gif' width='11' height='11'><A href=list.php?id=" . $row[0] . ">" . $row[1] . "</A><br>");

}

if(!$exist)

echo("本周没有下载");

?>

(3)显示累计下载排行

累计下载排行列表中将读取表DownLoad中累计浏览数量最多的10个软件信息,代码如下:

<?PHP

$sql = "Select DId,DownName From DownLoad Order By TotalHits Desc LIMIT 0,10";

$results = $dw->GetDLList($sql);

$exist = false;

while($row = $results->fetch_row()) {

$exist = true;

echo("<img src='IMG/follow.gif' width='11' height='11'><A href=list.php?id=" . $row[0] . ">" . $row[1] . "</A><br>");

}

if(!$exist)

echo("没有下载");

?>

4.设计查看下载软件页面

在主界面index.php中,单击任一下载软件,将打开List.php页面,显示下载软件的详细信息,如图A15所示。

下面介绍查看软件信息页面的部分代码。

(1)显示软件信息

程序会根据软件编号读取和显示软件基本信息,代码如下:

figure_0316_0366

图A15 查看软件信息页面

<?PHP

$did = $_GET["id"];

if($did=="")

exit("您没有选择相关软件资源,请返回");

$dw = new DownLoad();

$results = $dw->GetDetail($did);

if($row = $results->fetch_row()) {

$DownName = $row[1];

$uCId = $row[23]; // UpperId

$nCId = $row[2];// CId

$uName = $row[22]; //分类名称

$nName = $row[24]; //上级分类名称

$LastHitTime = $row[17]; //最近点击的时间

……

<TABLE  width="100%"  border="1"  cellpadding="0"  cellspacing="0"bordercolorlight="#B06A00" bordercolordark=#E7E4E2>

<TR>

<TD width="100%" colspan="3"><font color=B06A00><B><?PHP echo($row[1]); ?></B></TD>

</TR>

<TR>

<TD width="70" align="center" nowrap><font color=#B06A00>软件类别:</TD>

<TD  width="258"><font  color=#B06A00><?PHP  echo($uName);  ?>-<?PHPecho($nName); ?></TD>

……

(2)显示软件图片

在List.php页面中,显示软件图片的代码如下:

<?PHP

if($row[9]<>"")

echo("<a href=ShowPic.php?id=" . $row[0] . " target=_blank><img src=" . $row[9] . " border=0 width=150 height=120 alt=点击放大></a>");

else

echo("无图片");

?>

ShowPic.php页面用来显示软件的图片信息,代码如下:

<?PHP

$dw = new DownLoad();

$did = $_GET["id"];

$results = $dw->GetDownLoadInfo($did);

if($row = $results->fetch_row()) {

if($row[9] <> "") // ImageFile字段

header("Location: " . $row[9]);

}

?>

(3)显示相关软件信息

根据软件名称从表DownLoad中读取和显示与本软件有相似名称的软件,代码如下:

<?PHP

//在下载表中查找不包括本记录的相关的资源信息

$sql ="Select * From DownLoad Where DId<>" . $did . " And DownName Like '%" . $row[1] . "%' Order By DId Desc";

$results = $dw->GetDLlist($sql);

$exist = false;

while($row = $results->fetch_row()) {

$exist = true;

echo("<a href=List.php?id=" . $row[0] . " target=_blank>" . $row[1] . "</A><br>");

}

if(!$exist)

echo("没有相关资源");

?>

(4)显示软件评论信息

程序会根据软件编号从表Votes中读取和显示软件的评论信息,代码如下:

<?PHP

include('Class\Votes.php');

$vt = new Votes();

$results2 = $vt->GetVoteslist($did);

$exist = false;

$i = 0;

while($row2 = $results2->fetch_row()) {

$exist = true;

echo("<font color=#B06A00><li>[打分:" . $row2[3] . "]&nbsp;" . $row2[1] . "</font></li>");

$i=$i+1;

if(i>=5)

break; //只显示5条记录

}

if(!$exist)

echo("暂时没有此软件的评论!");

?>

5.设计下载软件页面

在查看下载软件页面List.php中,提供2个下载链接,定义如下:

1. <a href="download.php?did=<?php echo($row[0]); ?>&flag=1" target=_blank><?PHP echo($row[4]); ?></a>

2. <a href="download.php?did=<?php echo($row[0]); ?>&flag=1" target=_blank><?PHP echo($row[6]); ?>%>&nbsp;<?PHP echo($row[1]); ?></A>

3. <a href="download.php?did=<?php echo($row[0]); ?>&flag=1" target=_blank><?PHP echo($row[8]); ?>&nbsp;<?PHP echo($row[1]); ?></A>

download.php用于处理软件下载,参数did用于指定下载的软件编号,参数flag指定下载链接的序号,如果flag等于1,则从下载链接1下载软件;如果flag等于2,则从下载链接2下载软件;如果flag等于3,则从下载链接3下载。

download.php主要完成如下工作。

(1)获取下载软件的信息

程序首先根据参数did从表DownLoad中获取下载软件的相关信息,代码如下:

<?php

$did = $_GET["did"];

$flag = $_GET["flag"];

if($did=="")

exit("您没有选择相关软件资源,请返回");

include('Class\DownLoad.php');

$dw = new DownLoad();

$results = $dw->GetDetail($did);

if($row = $results->fetch_row()) {

// print_r($row);

$DownName = $row[1];

$dl1 = $row[3]; // 下载链接1

$dl2 = $row[5];//下载链接2

$dl3 = $row[7]; //下载链接3

$LastHitTime = $row[18]; //最近点击的时间

}

else {

exit("没有找到相关软件资源。");

}

if($flag<1 or $flag>3 or ($flag==1 and $dl1=="") or ($flag==2 and $dl2=="") or ($flag==3 and $dl3== ""))

exit("没有相关下载链接");

(2)更新下载数

当打开软件信息页面时,download.php会根据软件编号更新下载数具体代码如下:

//更新每周每日数据

date_default_timezone_set('Asia/Chongqing'); //系统时间差8小时问题

$now = getdate();

$today = $now['year'] . "-" . $now['mon'] . "-" . $now['mday'];

if($LastHitTime==$today)

$dw->UpdateDayHits($did,1);

else

$dw->UpdateDayHits($did,0);

$dw->UpdateTotalHits($did); //更新总点击数

//更新本周点击次数

$weekday = $now['wday'];   // 获取当前星期几0-周日~6-周6

if($dw->isInThisWeek($LastHitTime))

$dw->UpdateWeekHits($did,1);

Else

$dw->UpdateWeekHits($did,0);

更新下载数的具体方法如下。

• 如果最后浏览日期为当日,则日浏览数加1。

• 如果最后浏览日期不为当日,则日浏览数等于1。

• 将累计浏览数加1。

• 如果最后浏览日期为本周,则周浏览数加1。

• 如果最后浏览日期不为本周,则周浏览数等于1。

(3)转向下载链接

最后,download.php会根据参数flag转向对应的下载链接开始下载,代码如下:

if ($flag == 1){

header("Location: " . $dl1);

}

if ($flag == 2)

header("Location: " . $dl2);

if ($flag == 3)

header("Location: " . $dl3);

6.设计软件投票页面

在查看下载软件页面List.php中单击“讨论投票”超链接,将打开Vote.php页面用于显示软件投票打分页面,如图A16所示。

figure_0319_0367

图A16 Vote.php的运行界面

在Vote.php中,程序会根据软件下载编号从数据库表Votes中读取投票的数量,同时计算平均分。代码如下:

<?PHP

……

$results = $vt->GetVoteslist($id);

$V_Count=0;//投票数量

$AvgGrade=0;//投票平均分

while($row = $results->fetch_row()) {

$V_Count++;

}

if($V_Count > 0)

$AvgGrade = $vt->GetSum($id)/$V_Count; //投票平均分

?>

在Vote.php中,还可以根据评论数量显示访客的评论信息。代码如下:

<p align="center"><font color="#666666">本软件共有<?PHP echo($V_Count); ?>人打分,综合评分为<?PHP echo($AvgGrade); ?></font></p>

</td>

</tr>

<tr>

<td align="center">

<form method=post action="Vote.php?action=save&id=<?PHP echo($id); ?>">

<input name=grade type=radio value=1> 1

<input name=grade type=radio value=2> 2

<input checked name=grade type=radio value=3> 3

<input name=grade type=radio value=4> 4

<input name=grade type=radio value=5> 5

<input name=id type=hidden value='<%=Request("id")%>'>

<br>

<font color="#666666">简短评论:</font>

<input name=content type=text size="30" maxlength="100">

<input type=submit value="提交" name="b1">

</form>

</td>

</tr>

<tr>

<td align="center"><font color="#666666">已发表评论</font></td>

</tr>

<tr>

<td>

<?PHP

if($V_Count==0) { ?><font color="#666666">暂时没有评论</font>

<?PHP

} // end of if

else {

$results = $vt->GetVoteslist($id);

while($row = $results->fetch_row()) {

?>

<table board=0 width=100%>

<tr>

<td width=90%> <font color="#666666"> ☉  <?PHPecho($row[1]); ?>&nbsp;&nbsp;[打分:<?PHP echo($row[3]); ?>分]</font></td>

</tr>

<?PHP

} // end of while

}// end of else

?>

当用户单击“提交”按钮时,将提交评论信息。代码如下:

<form method=post action="Vote.php?action=save">

保存评论信息也在Vote.php页面中,根据参数action的值保存评论内容和评论分数。代码如下:

$id = $_GET["id"];

if($id=="")

exit("请选择软件");

include('Class\Votes.php');

$vt = new Votes();

if($_GET["action"]=="save") {

$content = $_POST["content"];

if($_SESSOIN["truevote"]<>$id) {

$vt->VContent = $content;

$vt->Grade = $_POST["grade"];

$vt->DId = $id;

$_SESSION["truevote"] = $id; //设置Session表示已经投票

$vt->InsertVotes();

}

else {

echo("<script>alert('对不起!你已经进行了投票!');</script>");

}

}

程序将评论信息插入数据库 Votes 表中,并将投票标志设置为当前软件编号,表示不允许对同一软件同时投票2次以上。

7.设计软件搜索页面

用户经常需要从众多软件信息中查询自己关注的内容。在系统首页左侧的软件搜索中输入软件名,然后单击“搜索”按钮,将会打开Search.php,查询软件资源,如图A17所示。

figure_0321_0368

图A17 Search.php的运行界面

在Search.php页面中,程序将首先读取从top.php中传递来的数据。下拉菜单CId的值决定查询软件类别,文本域keyword的值表示查询关键字。根据CId和keyword生成SELECT语句的代码如下:

<?PHP

$dw = new DownLoad();

//取得查询条件

$uCId = $_POST["cid"];

$StrKey = $_POST["keyword"];

echo($uCId . " " . $StrKey);

//根据不同情况生成WHERE子句whereTo

if($StrKey == "") {

//没有输入要查询的条件

exit("请输入查询条件");

}

if($uCId == "") { //所有软件

//在所有的类别中,查询指定软件

$sql ="Select * From DownLoad Where DownName Like '%" . $StrKey . "%' Order By DId";

}

else {

$sql = "Select d.*,c.CName AS nCName,c1.CName AS uCName From DownLoad d,Category c,Category c1 Where d.CId=c.CId And c.UpperId=c1.CId And c.UpperId=" . $uCId . " And d.DownName Like '%" . $StrKey . "%' Order By d.DId";

}

?>

8.设计按类别查看软件页面

在系统首页的上方,有一个链接条,包括首页、软件一级类别信息等链接。可以单击任意类别的超级链接,进入按类别显示下载软件列表的页面,如图A18所示。

figure_0322_0369

图A18 按类别查看软件信息

按类别查看软件资源信息的脚本是sort.php,下面介绍其主要代码。

(1)获取参数

参数Order指定排序的项目,参数updown指定排序顺序,参数cid指定显示的软件类别编号。获取参数的代码如下:

<?PHP

include('Class\DownLoad.php');

$order_name = $_GET["Order"];

if($_GET["updown"]<>"") //更改排序方向

$updown="Desc";

else

$updown="";

switch($order_name) {

Case "DownName":

$order_name="DownName"; //按软件名排序

break;

Case "IsHot":

$order_name="IsHot"; //按热度排序

break;

Case "CreateTime": //按创建时间排序

$order_name="CreateTime";

break;

Case "TotalHits":  // 按点击数排序

$order_name="TotalHits";

break;

Case "Rights":  // 按版权排序

$order_name="Rights";

Case "DownSize":

$order_name="DownSize"; //按软件大小排序

default:

$order_name="LastHitTime"; //按最新点击时间排序

(2)读取软件类别

在sort.php页面左侧,程序从表Category中读取和显示软件类别名称。代码如下:

<?php

$ca = new Category();

$cid = $_GET["cid"];

if($cid=="") { //下级类目编号

$nCId = "";

$uCId = "";

$uCName = "";

$nCName = "所有软件";

exit("没有选择软件类目");

}

else {

//判断当前类目编号是否为1级类目

$results = $ca->GetCategoryInfo($cid);

if($row = $results->fetch_row()) {

if($row[2]==0) { //表示一级类目

$iLevel = 1;

$uCName = $row[1];

$nCName = "所有软件";

$uCId = $row[0];

$nCId = "";

}

else {

$iLevel = 2;

$nCName = $row[1];

$nCId = $cid;

$uCId = $row[2];

//读取上级类目信息

$results1 = $ca->GetCategoryInfo($uCId);

if($row1 = $results1->fetch_row()) {

$uCName = $row[1];

}

}

}

}

......

?>

<?php

if($iLevel == 1) //一级类目

$sql = "Select * From Category Where UpperId=" . $cid;

else   //二级类目

$sql = "Select * From Category Where cid=" . $cid;

$results3 = $ca->GetCDetail($sql); ?>

</FONT> <TABLE width="100%" border="0" cellspacing="0">

<?PHP while($row3 = $results3->fetch_row()) { ?>

<TR>

<TD align="right" height="21"><div align="center"><img src="IMG/into.gif"width="9" height="9"></div></td>

<TD align="left" height="21">

<A  href="sort.php?cid=<?PHP  echo($row3[0]);  ?>"><?PHPecho($row3[1]); ?></A></TD>

</TR>

<?PHP } ?>

(3)读取软件信息

程序会根据参数cid读取指定类别中包含的软件信息,代码如下:

<?PHP

if($iLevel == 1) {

$sql ="Select d.* From DownLoad d,Category c Where IsHide=0 And d.cid=c.cid And c.UpperId=" . $cid . " Order By " . $order_name . " " . $updown;

}

else

{

$sql = "Select * From DownLoad Where cid=" . $cid . " And IsHide=0 Order By " . $order_name . " " . $updown;

}

$results4 = $dw->GetDLlist($sql);

$exist = false;

while($row4 = $results4->fetch_row()) {

$exist = true;

//下面省略显示软件信息的代码

// ......

?>

上一篇:目的和要求

下一篇:附录BHTML语言简介

相关教程

共有条评论 网友评论

验证码: 看不清楚?