2024年5月25日发(作者:)

****大学****届毕业论文

1 引言

随着Internet技术的快速发展,人与人之间的交流方式逐渐增多。网络视

频、网络聊天、博客已成为人们彼此沟通、交流信息的主要方式。此外,为了方

便在某一专业领域探讨问题和发表意见,Internet上还出现了在线论坛。在论

坛上,人会根据自己的学识、经验发表意见或提出解决问题的方法。

通过论坛系统可以随时获得各种最新信息;也可以通过论坛系统与别人讨论

计算机软件、硬件、Internet、多媒体、程序设计以及生物学、医学等各种有趣

的话题;还可以利用论坛系统来发布征友、廉价转让、招聘人才、求职应聘等启

事;更可以召集亲朋好友到聊天室内高谈阔论……

并且现在很多商务网站开始对论坛重视了起来,纷纷在自己的网站上开设论

坛,作为与网民交流的空间,以此来吸引客户,服务客户。

由此可见,论坛系统是一种非常必要的系统。

在这个数字化时代,全世界有千千万万个网站昼夜不停地提供服务。

PHP+MySQL这一对Web应用开发的利器,在从电子商务到网络办公,从邮件服务

到大型综合网站的广泛应用,都显示了其强大的功能。

目前网上的网页有静态网页和动态网页两种形式。

静态网页不能自动更新,更新只能通过重新编写HTML页来实现,所以静态

网页的制作和维护的工作量相当大。它的内容也不会因用户、浏览时间的变化而

随之变化,所以实现人机交互有相当大的局限性,功能上有太多的限制。

而动态网页的实现与静态网页不同,它由客户端向服务器提出申请,服务器

根据用户请求,把动态网页内部的代码在服务器端进行相应的处理,再把结果发

回客户端。因此,动态网页有以下特点:客户端看到的不是源文件,本身不用任

何处理;不同用户、不同时间、不同地点浏览同一个网页返回的结果可以不同;

动态网页只有经过用户浏览时才会返回一个完整的网页,而其本身并不是一个独

立的网页文件;动态网页构建的网站维护起来比较容易,只需更新数据库内容即

可。

1

****大学****届毕业论文

PHP本身就是一种编程语言,它是吸收了C、Java等语言的综合优势而创建

开发的一种新语言。这是它与JSP、ASP的基本不同之处。PHP能够被Apache、

IIS等多种服务器支持,而ASP只能被Windows系统下的IIS、PWS所支持。PHP

能够很好的运行于Linux、UNIX、Windows、FreeBSD等多种操作系统上,ASP只

能运行于Windows系统上,虽然JSP也能在多种系统下得到支持,但是必须以有

Java虚拟机为前提。

2 系统分析

2.1 需求分析

BBS系统的目的提供的是一个交流平台,为广大爱好者提供交流经验,探讨

问题的社区。因此,BBS最基本的功能首先是发表主题。其次是其他人员根据主

题发表自己的看法。此外,为了记录主题的发表者和主题的回复者的信息,系统

还需要提供用户注册和登录的功能。

用户使用论坛有一定的流程:用户登录进入论坛(一般为游客,有时还要注

册为会员),就某个话题(帖子的主题)展开讨论,通过发帖功能发布新的话题,

通过回帖功能回复已有的话题,通过搜索功能查找已有的话题。管理员通过管理

功能创建、编辑、删除论坛的版块,管理注册的用户,管理帖子等。

只有注册的用户登录后才能发表和回复主题,浏览者(游客)只能浏览主题

信息。根据用户的需求及上面的分析, BBS应该具备以下功能:显示各论坛类

别及版面,查看版面下的所有根帖、查看自己发表的帖子、搜索帖子、查看根帖

内容、用户注册、用户登录、发表帖子、回复帖子、进入后台、论坛类别管理、

版面管理、用户管理和用户注册。

2.2 可行性分析

这里主要介绍技术可行性。

该BBS的设计主要采用PHP、XML、MySQL、Dreamweaver 8、Eclipse等技术

和工具,整体设计采用软件工程的技术和方法,经过需求分析、总体设计、文档

和代码的编制、模块测试和系统实现几个阶段。下面对这几种技术分别介绍。

2

****大学****届毕业论文

PHP技术

PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言。服务器端执行说明

它是动态网页的一种,跨平台说明它可以同时运行在Linux、UNIX或者Windows

上。另外还可以简单地嵌入到普通的HTML页中。PHP与ASP、JSP相比,它有多

种服务器支持,也支持运行在多种操作系统上,另外PHP本身就是一种面向对象

的编程语言。它同时支持MySQL、Oracle、Sybase、ODBC等多种数据库。

MySQL 数据库

MySQL是当前最流行的开放源代码数据库,它具有跨平台,独立存储引擎、

高级权限与安全系统、查询高速缓存、全文索引与检索等特性。MySQL是一个高

性能、多线程、多用户、建立在客户-服务器结构上的RDBMS,专为速度和稳定

性而设计。作为一个可靠的、富有特色的数据库系统,MySQL已经在商业、教育、

科学和工程领域得到应用。并且它的低成本/高性能的价值表现也吸引了更多用

户。

B/S三层结构

在B/S系统中,用户可以通过浏览器向分布在网络上的服务器发出请求,B/S

结构极大地简化了客户机的工作,客户机只要安装、配置少量的客户端软件即可,

服务器将担负更多的工作,对数据库的访问和应用程序的执行将在服务器上完

成。

在B/S三层体系结构下,表示层、功能层、数据层被割成三个相对独立的单

元。

第一层(表示层)Web浏览器:在表示层中包含系统的显示逻辑,位于客户

端。它的任务是由Web浏览器向网络上的某一Web服务器提出服务请求,Web服

务器对用户身份进行验证后通过HTTP协议将数据传送给客户端,客户机接受传

来的网页文件,并将其显示到Web浏览器中。

第二层(功能层)具有应用程序扩展功能的Web服务器:在功能层中包含系

统的事物的处理逻辑,位于服务器端。它的任务是接受用户的请求,首先需要执

行相应的扩展应用程序与数据库进行连接,通过SQL等方式向数据库服务器提出

数据处理申请,等数据库服务器将处理结果提交给Web服务器后,再由Web服务

器传回客户端。

3

****大学****届毕业论文

第三层(数据层):数据库服务器:在数据层中包含数据处理逻辑,位于数

据库服务器端。它的任务是接受Web对数据库操作的请求,实现对数据库查询、

修改、更新等功能,把运行结果提交给Web服务器。

在B/S结构下,整个系统的管理、资源分配、数据库操作、业务逻辑部件的

管理及动态加载等工作都集中于应用服务器。同时,由于工作集中,可以降低客

户机的管理难度及客户机配置。仅仅提高应用服务器和数据库服务器的品质,就

可以提高整个系统的运行效率,从而有效地降低了应用系统的部署与管理的难

度。

XML工作原理

XML全称为可扩展的标志语言,类似于HTML语言。XML作为描述信息的语言

保存数据,可以使用XSL或CSS来格式化这些数据,使之以某种形式显示在浏览

器上。还可以通过解释器用编程的方法载入一个XML文档,再通过XML DOM(XML

文档对象模型)访问、更新、创建和操纵该XML文档的信息

3 系统设计

3.1 系统目标

对于典型的数据库管理系统,尤其是对论坛这样数据流量特别大的网络管理

系统、必须要满足使用方便、操作灵活等设计需求。本系统在设计时应满足一下

几个目标:

✓ 采用人机对话的操作方式,界面设计美观友好,信息查看灵活方便、快

捷准确。数据存储安全可靠。

✓ 全面展示系统内所有分类的帖子,并进行分别显示。

✓ 为用户提供一个方便快捷的主题信息查看功能。

✓ 实现在线发表帖子、回复帖子的功能。

✓ 提供登录模块,主要用于管理员登录系统和发表帖子时留下发表者的信

息。

✓ 用户随时都可以查看自己发表的帖子。

✓ 对于用户输入的数据,要进行严格的检验,尽可能排除人为的错误。

4

****大学****届毕业论文

✓ 系统最大限度的实现易维护性和易操作性。

✓ 系统运行稳定、安全可靠。

3.2 系统功能模块设计

按照论坛系统的功能可以将本系统分为前台和后台两大模块。用户在前台注

册、登录,以及编辑个人的注册信息组成登录注册模块;用户浏览版块、浏览主

题帖列表、查看帖子以及按条件搜索组成搜索模块;用户发帖、回帖组成发帖回

帖模块;用户编辑、删除帖子组成编辑删除模块。以上四个模块是前台模块。后

台模块都是与管理员相关的,其中管理员将管理选项、权限设置、删帖管理设置

为版面管理模块;将备份数据库、配置选项、文字过滤、表情符号和恢复数据库

设置为普通管理模块;将版面的整体风格设置为风格管理模块,有新建、添加、

输出和管理几个方面;将封锁管理、禁用账号、权限设定和等级管理设置为会员

管理模块。后台模块也分为四个。如图所示。

论坛系统

前台模块 后台模块

下面具体介绍各个模块的功能

3.2.1 登录注册模块

登录模块包括以下的几个部分。

登录:一般网站都具有的功能,提供会员登录到论坛窗口的功能。

注册:提供游客成为会员的功能,这样可以享受更多的权限。游客只能浏览

帖子,而会员不仅可以浏览帖子,还可以回复和发表帖子。

编辑会员信息:当注册的用户用其注册时使用的用户名和密码登录论坛系统

后,可以对其注册时填写的资料进行编辑更改。

5

****大学****届毕业论文

3.2.2 发帖回帖模块

包括以下几个部分。

发帖:论坛的基本功能之一。会员可以就某个感兴趣的话题发表自己的看法,

即发帖。

回帖:论坛的基本功能之一。会员可以答复其他人提出的问题、看法等,即

回帖。

3.2.3 编辑删除模块

包括:

编辑,会员可以对自己发表过的帖子进行重新编辑修改;

删除,会员当然可以删除自己发表的帖子。

3.2.4 搜索模块

包括:

按关键字搜索,搜索功能的一种,按照帖子相关的内容关键字搜索;

按作者名搜索,可以直接搜索其他某个会员发表的帖子。

3.2.5 版面管理模块

包括以下几个部分。

管理选项:在管理选项中,管理员可以分别对版面和分区进行编辑。管理员

可以对版面进行添加、编辑、删除和移动操作,还可以对分区进行添加、编辑、

删除和移动操作。(一个论坛可以分成许多分区,一个分区又有许多版面,一个

版面还可以分成许多主题。)

权限设定:在权限设定中,管理员可以设置访问分区或版面的权限,权限有

公开、注册会员、注册会员隐藏、非公开、非公开隐藏、长老、长老隐藏。

删帖管理:在删帖管理中,管理员可以计划删除几天内没有得到回复的主题。

(假设在10天内某个主题还没有回复,系统则自动删除此主题,管理员只需要

设置天数就可以了。)

3.2.6 普通管理模块

包括以下几个部分。

备份数据库:管理员可以对本系统的所有资料数据进行备份,以防数据的丢

失。备份分完整备份、结构备份和数据备份。

6

****大学****届毕业论文

恢复数据库:在系统遭到攻击崩溃时,可以使用恢复数据库功能对系统的数

据重新回复。

文字过滤:在这个控制面板里管理员可以建立、编辑及删除过滤文字。这些

指定的文字将会被过滤并以替换文字显示。另外会员也将无法使用含有这些被限

定文字的名称来注册。

配置选项:在这个控制面板里管理员可以对面板的基本内容进行设置,还可

以进行Cookies设置、会员设置和私人留言设置等。

群体信件:在这个控制面板里管理员可以发送电子邮件给所有的会员。

表情符号:这个控制面板中管理员可以对发帖、回帖时使用到的表情符号进

行编辑或删除操作。

3.2.7 会员管理模块

包括以下几个部分。

封锁管理:这个控制面板中管理员可以对会员的信息进行封锁,比如说可以

封锁一个指定的会员,一个指定范围内的IP地址或计算机主机名称,这些方法

禁止被封锁的会员进入论坛首页。也可以指定封锁电子邮件地址来防止注册会员

使用不同的账号重复注册。

管理选项:在这个控制面板中管理员可以变更会员的个人资料以及现存的特

殊选项。

禁用账号:在这个控制面板中管理员可以控制禁用会员的账号名称,但是已

经注册的账号是无法禁用的。

权限设定:在这个控制面板中管理员可以更改会员的权限设定及指定管理员

资格。

等级管理:在这个控制面板中管理员可以增加、编辑、浏览以及删除等级,

也可以使用等级应用于会员管理功能。

3.3 数据库设计

数据库设计在项目开发中是非常重要的一个环节,它影响着后期的系统维

护、变更和扩充,甚至在整个系统开发中,都会引起很大的问题。

7

****大学****届毕业论文

本论坛系统后台数据库采用的是MySQL5.0,数据库名称为db-bbs,根据系

统的功能需求,本系统设置了11张表,主要的几张表如下。

1 phpbb_forums表

该表保存了论坛的基本信息,如论坛编号、论坛名称、论坛说明、论坛帖子

数等。如表1:

表1:phpbb_forums表

字段名

forum_id

cat_id

forum_name

forum_desc

forum_status

forum_order

forum_posts

forum_topics

类型

smallint

mediumint

varchar

text

tinyint

mediumint

mediumint

mediumint

长度

5

8

150

/

4

8

8

8

8

2

2

2

2

2

2

2

2

2

2

允许为空 是否主键

描述

论坛编号

讨论区编号

版面名称

论坛说明

论坛状态

论坛顺序

论坛帖子数

论坛主题数

最后一个帖子号

查看权限

阅读权限

发帖权限

回帖权限

编辑权限

删除权限

粘贴权限

投票权限

创建投票权限

附件权限

forum_last_post_id mediumint

auth_view

auth_read

auth_post

auth_reply

auth_edit

auth_delete

auth_sticky

auth_vote

auth_pollcreate

auth_attachments

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

2 phpbb_topics表

该表保存了论坛中主题的基本信息,如主题编号、主题名称、主题答复等。

各字段信息如表2:

8

****大学****届毕业论文

表2:phpbb_topics表

字段名

topic_id

forum_id

topic_title

topic_poster

topic_time

topic_replies

topic_status

topic_vote

topic_type

topic_first_post_id

topic_last_post_id

topic_moved_id

类型

mediumint

smallint

char

mediumint

int

mediumint

tinyint

tinyint

tinyint

mediumint

mediumint

mediumint

长度

8

8

60

8

11

8

3

1

3

8

8

8

允许为空 是否主键

描述

主题编号

论坛编号

主题名称

主题帖子

主题发表时间

主题回复数

主题状态

是否投票

主题类型

主题首帖编号

主题末帖编号

主题移动编号

3 phpbb_users表

该表保存了注册会员的基本信息,包括用户名、密码、E-mail等个人信息。

各字段信息如表3:

表3:phpbb_users表

字段名

user_id

user_active

user_name

user_password

user_lastvisit

user_regdate

user_level

user_posts

user_style

user_lang

类型

mediumint

tinyint

varchar

varchar

int

int

tinyint

mediumint

tinyint

varchar

长度

8

11

25

32

11

11

4

8

4

255

允许空

主键

描述

用户编号

用户活动性

用户名

用户密码

用户上次登录

用户注册日期

用户等级

用户帖子数

用户风格

用户个性签名

9

****大学****届毕业论文

user_unread_privmsg

user_last_privmsg

user_login_tries

user_emailtime

user_viewemail

user_attachsig

user_allowsmile

user_allowavatar

user_allow_pm

user_notify

user_notify_pm

user_rank

user_avatar

user_email

user_icq

user_website

user_from

user_sig

user_aim

user_msnm

user_interrests

user_actkey

smallint

int

smallint

int

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

tinyint

int

varchar

varchar

varchar

varchar

varchar

text

varchar

varchar

varchar

varchar

5

11

5

11

1

1

1

1

1

1

1

11

100

255

15

100

100

/

255

255

255

32

未读私密信件

上一私密信件

尝试登录次数

信件时间

查看邮件

附加个性签名

允许加入表情

允许具体描述

允许私有邮件

回帖通知

私有邮件通知

用户分类

用户具体描述

用户Email

用户IQC

用户网站

用户来自

用户签名

用户现居地

用户msn

用户兴趣

用户职业

4 phpbb_categories表

该表保存了讨论区的基本信息,比如讨论区的编号、名称等。各字段信息具

体如表4:

表4:phpbb_categories表

字段名

cat_id

cat_title

类型

mediumint

varchar

长度

8

100

允许为空

是否主键

描述

讨论区编号

讨论区标题

10

****大学****届毕业论文

cat_order mediumint 8 否 否 讨论去顺序

5 phpbb_posts表

该表保存了所有帖子的主要信息,包括帖子号、发帖者编号、发表时间等,

如表5。

表5:phpbb_posts表

字段名

post_id

topic_id

forum_id

poster_id

post_time

poster_ip

enable_smilies

enable_sig

post_edit_time

post_edit_count

类型

mediumint

mediumint

smallint

mediumint

int

char

tinyint

tinyint

int

smallint

长度

8

8

5

8

11

8

1

1

11

5

允许为空 是否主键

描述

帖子编号

主题编号

论坛编号

发帖者编号

发表时间

发帖者IP

允许使用表情

允许使用签名

帖子编辑时间

帖子编辑次数

6 phpbb_posts_text表

该表保存了所有的帖子,包括发帖和回帖的名称和内容。各字段的具体内容

如表6:

表6:phpbb_post_text表

字段名

post_id

post_subject

post_text

类型

mediumint

char

text

长度

8

60

/

允许为空

是否主键

描述

帖子编号

帖子名称

帖子内容

7 phpbb_themes表

该表保存了系统的显示风格设置,如背景颜色、文字样式、字体颜色等。各

字段内容如表7:

11

****大学****届毕业论文

表7:phpbb_themes表

字段名

themes_id

style_name

body_background

body_bgcolor

body_text

body_link

body_vlink

body_alink

body_hlink

tr_color1

tr_color2

tr_color3

th_color1

th_color2

th_color3

td_color1

td_color2

td_color3

fontsize1

fontsize2

fontsize3

fontcolor1

fontcolor2

fontcolor3

类型

mediumint

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

varchar

tinyint

tinyint

tinyint

varchar

varchar

varchar

长度 允许为空 是否主键

8

30

100

6

6

6

6

6

6

6

6

6

6

6

6

6

6

6

4

4

4

6

6

6

描述

主题编号

风格名称

body背景图片

Body背景色

Body文本

正常链接颜色

已点击链接色

鼠标按下链接色

鼠标移过链接色

行颜色1

行颜色2

行颜色3

表格头颜色1

表格头颜色2

表格头颜色3

列颜色1

列颜色2

列颜色3

字体大小1

字体大小2

字体大小3

字体颜色1

字体颜色2

字体颜色3

12

****大学****届毕业论文

4 系统的实现

4.1 通用类实现

为了使代码能够重复利用,实现代码的重用性,可以把一些常用的功能代码

单独写在一个文件内,如连接数据库代码,头部和尾部文件等。在使用时可以用

include关键字把这些代码包含到文件中,可以减少代码的重复。

4.1.1 连接数据库文件

文件即为连接数据库的文件,该文件被放在includes目录下。代码

如下:

//判断是否定义常量 in_phpbb

if ( !defined('IN_PHPBB') )

{

}

/*根据用户的数据库,包含数据库文件,$dbms变量是从文

件中获取*/

include($phpbb_root_path . 'db/mysql.'.$phpEx);

//连接数据库服务器,建立数据库连接对象

$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false);

//如果连接失败则提示错误信息

if(!$db->db_connect_id)

{

}

>

以上代码执行的步骤如下所示:

a) 应用“if(!defined(‘IN_PHPBB’))”语句判断是否定义常量,如果没

有定义则提示错误信息

13

die("Hacking attempt");

message_die(CRITICAL_ERROR, "不能连接数据库!");

****大学****届毕业论文

b) 应用“swith($dbms)”语句获取用户使用的数据库名称,不同的数据库

包含不同的数据库操作文件

c) 应用“$db=new

sql_db($dbhost,$dbuser,$dbpassword,$dbname,false)” 语句建立一

个数据库连接对象。

d) 判断数据库是否连接成功,如果连接失败,则提示“不能连接数据库”。

4.1.2 数据库操作类

整个类的定义在文件中,类的定义及其属性的定义如下所示:

if(!defined("SQL_LAYER"))

{

//定义常量

define("SQL_LAYER","mysql");

//创建一个sql_db类

class sql_db

{

//定义属性

var $db_connect_id;

var $query_result;

var $row = array();

var $rowset = array();

var $num_queries = 0;

//省略函数代码

}

}

>

在以上代码中,首先判断是否定义常量,如果没有定义,则使用define()

函数定义常量。然后,定义一个名为sql_db的类,也为该类定义了多个属性。

同时,在sql_db类中定义多个方法,在其中定义了一个选择数据库的函数

14

****大学****届毕业论文

sql_db()。如下所示:

//选择数据库

function sql_db($sqlserver, $sqluser, $sqlpassword, $database,

$persistency = true)

{

//设置属性的值

$this->persistency = $persistency;

$this->user = $sqluser;

$this->password = $sqlpassword;

$this->server = $sqlserver;

$this->dbname = $database;

if($this->persistency)

{

//连接MySQL服务器

$this->db_connect_id = @mysql_pconnect($this->server,

$this->user, $this->password);

}

else

{

$this->db_connect_id = @mysql_connect($this->server,

$this->user, $this->password);

}

if($this->db_connect_id)

{

//判断数据库名是否为空

if($database != "")

{

//获取数据库的名称

$this->dbname = $database;

15

****大学****届毕业论文

//选择数据库

$dbselect = @mysql_select_db($this->dbname);

}

//如果没有选择到数据库

if(!$dbselect)

{

//关闭数据库

@mysql_close($this->db_connect_id);

$this->db_connect_id = $dbselect;

}

}

else

{

}

}

return $this->db_connect_id;

return false;

以上代码的执行的步骤如下所示:

a) 设置使用的数据库、数据库服务器、用户名和密码的值等。

b) 分别使用mysql_pconnect()函数和mysql_connect()函数连接MySQL数

据库服务器。其中,mysql_pconnect()函数用于打开一个到MySQL服务

器的持久连接,而mysql_connect()函数用于打开一个到MySQL服务器

的连接。

c) 应用“$dbselect=@mysql_select_db($this->dbname)”语句选择服务

器上的数据库。

d) 应用“if(!dbselect)”语句判断是否选择数据库,如果没有选择数据

库,则调用mysql_close()函数关闭数据库连接。

另外中还定义了一个关闭数据库的函数,函数名为sql_close(),

16

****大学****届毕业论文

该函数的具体执行操作为:

应用“if($this->db_connect_id)”语句判断是否连接了数据库服务器,如

果连接了,则使用@mysql_free_result()函数释放连接到服务器的所有空间。

调用@mysql_close()函数关闭数据库连接,如果关闭成功,则应用“return

$result”语句返回关闭的结果,如果关闭失败,则返回false。

以下代码定义了执行SQL语句的函数,函数名为sql_query()。

//SQL语句执行函数

function sql_query($query = "", $transaction = FALSE)

{

//释放内存

unset($this->query_result);

//判断语句是否为空

if($query != "")

{

$this->num_queries++;

//获取执行结果

$this->query_result = @mysql_query($query,

$this->db_connect_id);

}

if($this->query_result)

{

//如果存在查询结果,则释放内存

unset($this->row[$this->query_result]);

unset($this->rowset[$this->query_result]);

//返回query_result执行结果

return $this->query_result;

}

else{

return ( $transaction == END_TRANSACTION ) ? true : false;

17

****大学****届毕业论文

}

}

以上代码执行过程如下:应用“unset($this->query_result)”语句释放内

存空间;应用“if($query != "")”语句判断执行的字符串是否为空,如果不为

空,则调用@mysql_query函数执行SQL语句。

在中还定义了一个获取数据集的行的函数,函数名为

sql_numrows()。主要是通过应用“$query_id = $this->query_result;”语句

获取执行SQL语句的结果;根据执行SQL语句的结果,调用@mysql_num_rows()

函数获取数据集的行。

中也定义了对数据字段操作的函数,如下:

function sql_affectedrows()

function sql_numfields($query_id = 0)

function sql_fieldname($offset, $query_id = 0)

function sql_fieldtype($offset, $query_id = 0)

function sql_fetchrow($query_id = 0)

以上各个函数的功能和该功能的具体实现如下所示:

a) 在sql_affectedrows()函数中,主要通过@mysql_affected_rows()函数

获区前一次MySQL操作所影响的记录行数。

b) 在sql_numfields()函数中,主要通过@mysql_num_fields()函数获取数

据集中字段的数目。

c) 在sql_fieldname()函数中,主要通过@mysql_field_name()函数获取结

果集中指定字段的字段名。

d) 在sql_fieldtype()函数中,主要通过@mysql_field_type()函数获得指

定字段的类型。

e) 在sql_fetchrow()函数中,主要通过@mysql_fetch_array()函数从结果

集中取得一行作为关联数组。

另外,中还有两个函数,sql_freeresult()函数和sql_error()

函数,主要是用于释放变量空间和当程序对数据库操作出现错误时,提示出错信

息。如下:

18

****大学****届毕业论文

function sql_freeresult($query_id = 0)

function sql_error($query_id = 0)

这两个函数的具体功能和该功能的具体实现方法为:在sql_freeresult()

函数中,主要通过@mysql_free_result()释放指定变量的空间,如果释放成功则

返回为true,释放失败,则返回false;在sql_error()函数中,主要通过

@mysql_error()函数返回执行SQL语句产生的错误信息。

4.2 前台模块的实现

4.2.1 论坛主页

论坛首页自上而下可以分为3个部分,最上面的是导航部分,中间是论坛的

主要部分即版块列表,最下面是用户及论坛的一些情况。如图1

其中最上面和最下面的部分基本上是不会发生变化的,所以把它们做成公用

的文件,然后使用包含语句将其包含到要使用的页面中。包含文件使用的

include指令为<%php include file="filename"%>

图1

首页使用include关键字包含了多个文件,分别是、

和page_文件等。这些文件中:

应用“$total_posts = get_db_stat('postcount');”语句获取总帖子数。

应用“$total_users = get_db_stat('usercount');”来获取注册会员数。

19

****大学****届毕业论文

应用“$newest_userdata = get_db_stat('newestuser');”获取最新注册

会员数。

如果帖子总数为0,则显示示没有帖子。

4.2.2 注册登录模块

在用户注册模块主要由3部分组成,分别是注册信息、个人信息和选项,其

中注册信息是必须填的,其它两项是可选项。

在用户提交信息之后,系统要验证输入信息是否合法,具体包括必选项是否

有空白、Email格式是否正确、两次密码是否一致、用户名是否已经存在、Email

是否已经使用过等。这些信息的验证分别通过sql_query()函数(执行查询操

作)、preg_match()函数(验证Email格式是否合格)等。

用户输入信息无误后,应用insert关键字,定义一个插入用户信息的字符

串,通过执行插入语句,插入记录。

用户登录时,通过应用$username = isset($HTTP_POST_VARS['username'])

语句和 $password = isset($HTTP_POST_VARS['password'])语句来获得输入的

用户名和密码,通过查询比较决定是否允许用户登录。

用户更新信息是通过用户的ID号查询到用户的信息,并且显示到文本框中,

用户修改完成之后,再执行更新操作。

找回密码,通过验证用户名和Email是否为空,如果不空根据这两项通过调

用sql_query()函数执行查寻用户信息操作。然后根据用户的ID号定义更新用

户密码的字符串,同时调用sql_query()函数执行更新操作。更新之后会应用

“$emailer=new emailer($board_config ['smtp_delivery'])”语句对emailer

类进行实例化,再调用emailer类中的send()函数将用户的密码发送到用户填

写的E-mail里。

4.2.3 发帖回帖模块

论坛最重要的部分就是帖子模块,发帖和回帖模块和用户注册有些类似,但

可以看到用户发帖页面的功能很多,用户可以投票,可以选择头像,还可以进行

文字格式的编辑等。(如图2)

发表新帖首先进入到?mode=newtopic页面,其中mewtopic表

示发送新的帖子,当填完发帖的内容后,单击发送按钮提交,提交处理仍为

20

****大学****届毕业论文

文件,判断输入的数据是否合法,然后调用functions_文件

中的submit_post()函数进行处理。

图2

具体的执行步骤如下:

a) 应用“$subject = htmlspecialchars()”语句获取发送新帖的主题,

并且应用“if (!empty($subject))”语句判断获取帖子的主题是否为

空。

b) 应用if语句判断用户是发送新帖子还是编辑帖子,如果是发送新帖,

则定义插入新帖的字符串;如果是编辑帖子,则根据帖子的ID号,定

义更新帖子的字符串

c) 调用sql_query()函数执行插入发送新帖或更新帖子的字符串操作。

d) 应用“if($mode == 'newtopic')”语句判断用户是否是发送新帖,如

果是,则调用sql_nextid()函数获取上一步insert操作产生的ID号。

投票选项功能的添加、编辑和删除主要也是由submit_post()函数实现的。

如果用户在发送新帖时添加了投票的功能,那么投票的选项必须大于2;编辑和

帖子一样。通过调用sql_query()函数执行插入和更新投票的操作。

其他用户进行投票时,通过调用sql_query()函数从数据库中查询出该投票

的信息,并将查询结果保存到提前定义好的数组中。然后应用

“if(!$db->sql_query($sql,BEGIN_TRANSACTION))”语句判断该用户对此主题

21

****大学****届毕业论文

是否是第一次投票,如果是则更新数据库,如果是第二次,则提示用户“您已经

投过票了!”。

回复帖子界面和发送新帖的界面相比,只是少了一个添加投票功能,其他一

样。回复帖子首先进入到?mode=reply页面,其中reply表示回复

帖子。用户提交回复之后,提交处理文件仍然是文件,判断输入的数

据是否合法,然后调用functions_文件中的以下语句对数据库进行插

入操作。

//回帖

$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE .

" (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id,

'$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " .

POSTS_TEXT_TABLE . " SET post_text = '$post_message', bbcode_uid =

'$bbcode_uid', post_subject = '$post_subject' WHERE post_id =

$post_id";

//判断是否执行成功

if (!$db->sql_query($sql))

{

//错误提示

message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__,

__FILE__, $sql);

}

4.2.4 编辑删除帖子模块

编辑帖子和发贴基本类似,主要调用了update_post_stats()函数,根据帖

子的ID号,定义更新帖子的字符串,然后执行。(如图3)

删除帖子时首先进入到?mode=delete页面,当用户点击“是”

确认删除帖子后,调用functions_文件中的delete_post()函数进行

删除操作。首先根据帖子的ID号(post_id),定义删除帖子的字符串(将帖子

的数码减1等),并调用sql_query()函数执行删除操作。

22

****大学****届毕业论文

图3

4.2.5 搜索帖子模块

搜索包括论坛搜索、讨论区搜索、显示结果搜索等,如图4

图4

搜索页面通过include关键字包含了4个文件,分别是、

、和functions_文件。其中,在

functions_文件中,主要包含了用于搜索的多个函数。

通过应用“$search_author = str_replace('*', '%',

trim($search_author))”语句获取查找字符串出现的位置;再用“if

23

****大学****届毕业论文

( $search_author == '' && $auth_sql == '' )”语句判断搜索条件是否为空,

如果为空则定义查找帖子的字符串,并调用sql_query()函数至此那个查询操作,

同时将结果保存到$row数组中;最后获取帖子的ID号,保存到$search_ids[]数

组中,并调用sql_freeresult()函数释放内存空间。

4.3 后台管理模块的实现

后台管理的主要模块有:版面管理模块、普通管理模块和会员管理模块等。

各个模块下又有不同的功能。

4.3.1 版面管理

版面管理下有三个功能:管理选项、权限管理和删帖管理。

在论坛版面管理的管理选项中,可以添加一个新的分区,在分区中建立多个

版面,同时还可以对添加的版面进行删除、修改操作。

论坛管理员使用创建分区功能时,系统应用“if( trim($HTTP_POST_VARS

['categoryname']) == '')”语句判断管理员输入的分区名称是否为空,不为空

时定义查询最大分区ID号的字符串,并将结果保存到$row数组中。同时将获取

$row数组中最大的排序号,将其加10。然后定义插入分区的字符串,并调用

sql_query()函数执行插入操作。

创建新版面和创建新分区类似,系统应用“if( trim($HTTP_POST_VARS

['forumname']) == '')”语句判断版面的名称是否为空,不为空时根据分区的

ID号查询版块最大的排序号,将其加10,再查询最大版块ID号,将其加1。最

后定义插入版块信息的字符串,同时调用sql_query()函数执行插入操作,如果

插入失败,则提示错误信息,成功则出现返回的超级链接。

在删帖管理中,主要是用于删除在几天里没有文章回复的主题,在选定要删

除主题的版面之后单击“查询版面”进入删除主题的界面。管理员至需要输入限

定的天数,单击“执行计划删除”按钮,就可以删除在指定天数内没有文章回复

的主题。

在权限管理中可以设置每个版面访问的权限,有简单模式和高级模式,简单

模式设置了4个等级的权限,分别是公开、注册会员、非公开和长老。高级模式

可以更详细的设置每个功能用户所拥有的权限,主要包括浏览、回复、阅读、发

表、删除、编辑和投票等。

24

****大学****届毕业论文

4.3.2 普通管理

这个管理模块中主要有配置选项、表情符号、文字过滤等。

配置选项中主要用于设置系统配置、文件路径、论坛名称、论坛描述、每页

显示主题数等一系列的参数。

表情管理,主要用于对表情头像的改名、添加和删除。

文字过滤主要用于设置被过滤的文字,用户发表帖子时如果含有被过滤的文

字则自动替换为管理员指定的文字符号等,并且被设置为过滤文字的字符或字符

串是不能用来作为用户名的。

4.3.3 会员管理模块

该模块中主要包括封锁管理、禁用帐号、管理选项、权限设定和等级管理。

封锁管理主要用于设定会员的封锁、指定范围的IP或是计算机主机名称的

封锁,同时管理员也可以指定封锁电子邮件来防止注册会员使用相同的帐号进行

重复注册。

管理选项中可以输入被管理的会员用户名,然后查询会员的信息。也可以查

找某个用户,支持通配符。在查询处会员的基本信息之后,管理员可以对会员的

信息进行修改,如基本信息、会员的级别以及删除该会员的所有信息等。

25

****大学****届毕业论文

结论

在建立网站的时候,要多考虑能否完全掌握功能需求、技术选择上能不能符

合系统的需求和开发成本等因素。因为这些因素都很大程度的影响着系统在建制

过程中的成败。对于开发时的技术选择要应需求而定。若是一味的追求新技术就

可能导致失败。

还有开发一个项目,是离不开别人的帮助和支持的,仅凭一人之力是完全不

行的,思考问题时既要采纳别人的意见又不能被别人过多的观点所影响,这就锻

炼了个人的团队协作能力和独立思考能力,在这个过程中,我受益匪浅!

26

****大学****届毕业论文

参考文献

1 邹天思,孙鹏.PHP从入门到精通.清华大学出版社,2008

2 (澳)威利,(澳)汤姆森 著,武欣 等译.PHP和MySQL Web开发(原

书第4版).机械工业出版社,2009

3 明日科技,邹天思,潘凯华,孙鹏.PHP开发典型模块大全.人民邮电出

版社,2009

4 (澳)泽瓦斯 著,苏金国 等译.PHP Web 2.0开发实战.人民邮电出

版社,2008

5 (美)勒道夫,(美)塔特罗,(美)麦步泰尔 著,陈浩,胡丹,徐景

译.PHP程序设计.电子工业出版社,2009

6 叶新伟.PHP+Ajax Web 2.0编程技术与项目开发大全.电子工业出版社,

2008

7 邹天思,潘凯华.PHP网络编程标准教程.人民邮电出版社,2009

8 (美)厄尔曼(Ullman,L.)著;陈宗斌 译.PHP 6与MySQL 5基础教程.

人民邮电出版社,2008

9 张银鹤,肖新峰,崔程.PHP+Ajax网站开发典型实例.电子工业出版社,

2009

10 宫垂刚,韦一,张华丰.PHP 完全自学手册.机械工业出版社,2009

11 丁月光,孙更新,闫吉辉.PHP+MYSQL动态网站开发.清华大学出版社,

2008

12 陈红飞.PHP内容管理系统:Joomla快速建站指南.电子工业出版社,

2009

13 黄桂金,于永军,唐有明.PHP+MySQL完全学习手册.清华大学出版社,

2008

14 陈营辉,赵海波.PHP+Ajax完全自学手册.机械工业出版社,2009

15 邹天思,潘凯华,刘中华.PHP网络编程自学手册.人民邮电出版社,2008

27

****大学****届毕业论文

致谢

本篇论文及相关的设计能够顺利的完成,首先要感谢我的指导老师和同学

们,在查阅大量资料的过程中,***老师给予了我很多的指导思路和处理方法,

在后期的论文修改中他很有耐心的指导我们修改。在遇到困难时有同学们的鼓励

和帮助,在累的时候还有他们和我一起玩,放松心情。

还要感谢我的亲人们,在将毕业的时候,大家的就业压力都很大,他们给我

无微不至的关怀,使感到心理上的踏实,也是他们从小就培养了我踏实做事的精

神,我受益终生。

还要感谢我实习单位的所有同事们,他们在工作上给以支持和帮助,在生活

上给我了很多照顾,使我能专心的进入到实习的工作中。

真诚的感谢所有帮助过我的人!

28