硕士文文库财经,天津财经大学关于本科毕业文

更新时间:2024-02-12 作者:用户投稿原创标记本站原创 点赞:27081 浏览:121180

学校校园BBS的设计与实现毕业论文

摘 要

BBS是BulletinBoardSystem的缩写,即电子公告板.它是以文字为主的界面,为广大网友提供了一个彼此交流的空间.如今BBS已经在各个大学校园里普及,是学生之间交流信息,共享资源,娱乐休闲的场所,并已经成为广大学生在校生活不可获缺的一部分.

本设计具有一般网上论坛的所有功能,并体现出校园的风格.该系统提供的功能包括会员注册,查询和修改,找回,阅读帖子,发表帖子,帖子搜索,和会员留言等.本系统一大特点是共设置了4种不同身份的会员等级,每个等级都具有特殊的操作权限,使该系统能得到更好的维护和管理.

本文首先介绍了该系统的设计思路和需求分析,接着介绍了该系统所使用的一些关键技术,然后是对系统的详细介绍,包括系统所创建的数据库及该系统的具体功能.

关 键 词:注册,阅读帖子,发表帖子,搜索,权限TheDesignandRealizationofCampusBBSBasedonASP

Abstract

IndicationofBulletinBoardSystem,BBSistheelectronicbulletinboard.Itwasbasedonthetext-basedinterfaceandprovidesaplaceofmunicateeachotherforthepeopleontheInter.Nowadays,BBSisverypopularinthecampuses,wherethestudentscanenjoytheservicessuchastheexchangeofinformation,sharingofresources,leisureandentertainment.Itplaysaimportantpartinthestudyinglife.

InadditiontoallfunctionsofthemonBBSsystem,thisdesignexhibitstheschoolstyle.ThefunctionsofthisBBSincludestheregistration,inquiryandchangeofpersonalinformation,passwordrecovery,readthetopics,publishedtopics,searchtopicsandsendmessagetoothermembers.Fourlevelsofmembershipistheobvioueatureofthissystem,becauseeachlevelhasspecialpetence,sothesystemiseasytomanage.

Atfirst,thispaperintroducesthemainideaandtherequirementsanalysisofthesystematfirst,andsomekeytechnologiesareusedinthissystem,thenextistheintroductionofthesystemindetail,includingthedatabaseandspecificoperations.

Keywords:registration,readtopics,publishedtopics,search,privilege

目录

1引言4

1.1课题背景与开发目的4

1.2开发环境4

1.3硬件需求4

2需求分析4

2.1系统概述4

2.2系统角色划分5

3系统总体设计6

3.1关键技术6

3.1.1ASP技术6

3.1.2数据库技术7

3.1.3加密技术7

3.2系统流程图7

3.3方案选择8

3.3.1数据库需求分析8

3.3.2数据库设计9

3.3.3数据库连接的实现12

4系统的完整设计与开发13

4.1系统显示前的准备13

4.1.1论坛基本配置13

4.2系统主要功能分析14

4.2.1用户注册14

4.2.2论坛显示15

4.2.3发帖与回复17

4.2.4查看个人资料18

4.2.5个人好友管理19

4.2.6文章搜索功能20

4.2.7会员短消息功能21

4.3权限管理详细设计22

4.3.1功能概述22

4.3.2管理员权限22

4.3.4贵宾权限24

求,Web怎么写作器才会响应信息.因此在ASP中,特别将"客户端提出的要求"与"Web怎么写作器响应的信息"等动作封装成Request对象与Response对象.换而言之,Request对象通常包含了用户端的相关信息,如浏览器的种类,表头信息,表单参数及cookies等等.

Response对象,每一种程序语言或开发工具一定都有与用户沟通的界面或函数,ASP也不例外.在ASP中负责将信息传达到用户的对象就是Response对象.

Server对象,Server对象允许用户取得怎么写作器提供的各项功能,例如,Server对象的CreateObject方法允许客户端用户建立一个ActiveXServer组件实例,其所建立组件实例会随着怎么写作器端完成ASP网页的处理而自动被释放.如果希望此对象实例可以跨多个ASP网页,就要用到Session对象保留该组件实例,直到Session对象的运行时间到了,或是在其他ASP网页调用Session对象的Abandon方法,此组件实例才会被释放.

Session对象,Session对象在ASP程序编写中占了相当重的份量,由于网页是一种无状态的程序,因此几乎无法知道用户的浏览状态.必须通过Session对象记录用户的相关信息,以供用户再次对此Web怎么写作器提出要求时作确认,例如,在某些特定的网页中,常需要用户输入确认的和,检测如这些身份确认的结果无法保留,那岂不是每一个网页都需要重新输入一次.换而言之,每一个Session的用户,Web怎么写作器均会自动的为它们建立一个Session.必须说明,Session对象只能适用于具备Cookie功能的浏览器.


3.1.2数据库技术

在基于微软IIS/PWS的网络平台上,通过怎么写作器端运行的ASP程序来访问后台数据库,是一种最常见的模式了.而对于小型的数据库应用需求,微软的Access数据库应该是与ASP程序配套使用的首选.由于Access数据库的ODBC驱动程序支持的SQL指令全,执行效率高,所以Access后台数据库+ASP怎么写作器端程序+客户端IE浏览器,是一个精练实用高效的组合模式.

利用SQL语言,可以查询和管理自已的数据库.它由大约30条命令构成,但实际只需要少数的几个命令就可以完成相当多的工作,常用的SQL查询命令有:Select,Insert,Delete,Update等.

3.1.3加密技术

本设计在会员和问题的存储时使用了MD5加密算法来保护数据库中的重要数据.MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位的散列值.本设计在保存会员和提示问题答案时都先将传递的数据通过MD5加密后才存入数据库,故在数据库中只能看到已经加密的信息,保证了信息的安全.又因为该算法是单向加密的,所以当有数据要和保存的数据进行比较时,都是先将新数据加密再比较密文的差异.

3.2系统流程图

论坛设计按照一般操作进行设计:

非论坛会员仅可阅读论坛文章

图3-1系统流程图

3.3方案选择

3.3.1数据库需求分析

根据系统功能和数据流程,可以确定一下数据项和数据结构:

1.会员信息:包括会员标示ID号,姓名,性别,论坛头像,论坛币,发帖数等论坛资料.

2.论坛配置信息:包括创建时间,会员总数,论坛货币单位等.

3.版块信息:版块说明,版主等.

4.论坛帖子信息:帖子号,作者,内容,发表日期,回复数等.

5.好友信息:论坛好友的姓名,注册时间.

3.3.2数据库设计

根据数据库的需求分析,酒店管理系统需要建立10个数据表,他们分别是:

论坛文章表(BBS),论坛版块表(BBorumID),论坛配置表(Config),用户好友表(Friend),论坛短消息表(message),用户等级表(UserGroups),用户信息表(Users).各表具体信息见下表:

表3-1BBS表中字段

字段名数据类型字段描述ID自动编号主题帖子号ID(主键)ForumID数字论坛版块号RID数字回复主题帖子号IDTopicFace数字作者心情贴图Title文本文章标题Content备注文章内容DateTime日期/时间发表日期UserName文本作者IsBest数字是否为精华帖IsTop数字是否为置顶帖IsNews数字是否为论坛公告IsLocked数字是否被锁IsVote数字是否为帖IsMana数字是否需要威望ManaNum数字要求威望值LastUserName文本最后回复人LastDateTime日期/时间最后回复时间ReadTimes数字浏览次数ReTimes数字回复次数

表3-2BBorumID表中字段

字段名数据类型字段描述ForumID数字论坛版块号ID(主键)版块说明文本版块说明版块名称文本版块名称BorderUserName文本版主名字

表3-3Config表中字段

字段名数据类型字段描述Site_Name文本系统名字Site_BuildDate文本系统创建时间Site_PostNum数字论坛发帖数Site_TopicNum数字论坛主题帖数Site_UserNum文本论坛会员数Site_LastUser文本论坛最近注册会员Site_CheckReg数字是否允许新会员注册Site_RegWord文本注册校验码Site_MoneyUnit文本论坛货币单位Site_PostMoney数字发帖收入Site_ReplyMoney数字回复收入Site_MsgMoney数字发送消息消耗货币表3-4UserGroups表中字段

字段名数据类型字段描述UserGroupID数字组IDGroupTitle文本用户组名称GroupClass文本用户组分类MinArticle数字需发表多少文章TitlePic文本类别图GroupClassID数字等级ID表3-5Friend表中字段

字段名数据类型字段描述ID自动编号好友ID(主键)UserNameMD5文本用户加密名称FriendName文本好友名字JoinDate日期/时间加为好友时间CheckUser数字是否列入黑名单表3-6message表中字段

字段名数据类型字段描述ID数字消息ID号(主键)Title文本消息标题content文本消息标内容to_man文本收件人from_man文本发件人isread数字是否已读

表3-7Users表中字段

字段名数据类型字段描述UID自动编号会员ID(主键)UserName文本会员姓名UserNameMD5文本会员姓名加密UserPassWord文本会员UserQuestion文本提示问题UserAnswer文本提示问题答案UserHonour文本会员头衔UserFace文本会员头像UserSex数字会员性别UserHomePage文本会员主页User文本会员UserSignature文本会员签名UserBests数字会员精华帖数UserPost数字会员发贴数UserMoney数字会员财富UserMana数字会员威望JoinDate日期/时间会员注册时间LastLoginIP文本上次登陆IPUserLogins数字登陆次数LastLogin日期/时间上次登陆时间UserGroup文本会员用户组名称UserGroupID数字会员等级组IDUserGroupClass文本会员用户组分类UserGroupClassID数字会员等级IDIsAdmin数字是否为管理员

3.3.3数据库连接的实现

数据库连接操作是一个相当频繁的操作,在ASP的数据库编程中,connection对象是我们不可能离开的一个对象,该对象是ADO对象模块中的一个专门打开和关闭数据库连接的对象,在对数据库进行任何的操作,比如更新记录,插入,删除,检索等,都必须以connection对象的建立为前提.形象地来说,connection对象就是程序与数据库沟通的管道,所有对数据库的操作,都必须经过它,因此,本系统首先建立一个connection对象的实例变量,然后才能在它的基础上建立Recordset对象实例来操作数据库.这里首先利用connection对象的属性ConnStr设置数据库的连接方式,使用的是AccessOLEDB驱动程序.

本设计还使用了server对象的Server.MapPath(Path)方法,作用是将(path)指定的虚拟路径转换为实际路径,大大提高了本系统的移植性.然后使用server.createobject方法建立connection对象的实例变量conn,使用connection对象的Open方法打开数据库连接,核心代码如下:

mdb等于"Data/MyBBS.mdb"'数据库相对路径

ConnStr等于"Provider等于Microsoft.Jet.OLEDB.4.0,DataSource等于"&,Server.MapPath(""&,mdb&,"")

Setconn等于server.createobject("adodb.connection")

Conn.OpenConnstr

4系统的完整设计与开发

4.1系统显示前的准备

4.1.1论坛基本配置

系统运行时,有些数据库里的数据是会被频繁调用的,为了便于书写代码和程序的严谨,可以将这些数据首先赋给一些变量,在后面的程序运行中直接调用变量,不用频繁的访问数据库.一些保存论坛基本信息的数据就属于这类.所以在运行时首先将论坛一些基本参数在数据库连接后即从数据库中调出,以上内容在Conn.asp文件里连接数据库后执行,其中使用connection对象的execute方法对存放基本配置信息的表进行SQL查询,还使用了Recordset对象的BOF和EOF属性,其中BOF属性表示查询数据库的指针位于第一条记录之前,则为真:EOF属性表示查询数据库的指针位于最后一条记录之后,则为真.如果两者都为真,说明数据库里并没有对应的数据,然后可关闭刚才创建的对象实例,并将其清空,释放系统资源,如果找到需要的记录,则将其数据读出到创建的变量里以便使用:

'等于等于等于等于等于等于等于等于等于读取论坛基本设置等于等于等于等于等于等于等于等于

SetrsConfig等于conn.execute("Select*fromConfig")'创建一个查询数据库的对象实例

IfrsConfig.BOFAndrsConfig.EOFThen'查询为空而且到最后

rsConfig.Close'关闭变量

SetrsConfig等于Nothing'释放对象实例

Response.Write"网站配置数据丢失!系统无法正常运行!"

Response.End

Else

Site_Name等于rsConfig("Site_Name")

Site_PostNum等于rsConfig("Site_PostNum")

等等等等等'省去部分代码

EndIf

进入系统时由于有些功能只针对注册会员和管理员开放的,并不是进入论坛的人都能使用,这里就涉及到一个用户身份判断的问题.本设计包含了一个用户验证功能函数的User_Auditing.asp文件,在其他程序执行前都会先执行该文件里的函数,在需要验证时不必重复书写代码,只需在需要身份验证的程序之前调用该具有验证功能的函数就行.其中的CheckUsers()函数验证会员,CheckUnAdmin()函数验证管理员或版主.本设计一大特点是使用了Cookies来暂存会员信息,主要是会员姓名,这两项,这一功能的实现对程序的运行是十分方便的,如上面提到的CheckUsers()函数的功能就是根据Cookies里的会员来验证会员是否登陆,因为一旦会员登陆后登陆处理程序会将该会员的暂存到Cookies中,所以只需验证当前Cookies里的会员是否为空就可以判断目前的用户是否登陆论坛.CheckUnAdmin()函数则是创建一个ADO对象模块的两个Recordset对象实例来访问数据库中存放管理员身份信息和版主身份信息的表,读取有关管理员或版主身份的字段进行比较判断.

SubCheckUnAdmin()

Setwd等于server.createobject("adodb.Recordset")

SQL等于"SelectBorderUserNamefromBBorumID"

wd.OpenSQL,Conn,1,1

Ifwd("BorderUserName")<,>,Request.Cookies("BBS")("UserName")Then

等等'省去部分代码

4.2系统主要功能分析

4.2.1用户注册

在论坛主页的工具栏里是会员享有的一般操作选项,该工具栏由在User_Auditing.asp文件里定义的MyBBSTop()函数实现,同样只需在以后的页面调用该函数实现工具栏的显示.该函数一开始会先在Cookies里去查找会员姓名,如果发现会员姓名为空,则说明当前浏览论坛的用户未登陆,则工具栏中会显示未登陆的提示信息,以及显示未注册用户注册的信息.若是未注册会员,则可点击"注册"链接到注册页面用户进入该页面根据要求填写上述必要的信息后,会通过表单传递的"POST"方法将输入的内容传递给后台处理页面的Reg()函数对信息进行处理,其中在传递"用户名",""及"问题"等信息时又调用了MayHTMLEncode和ReplaceBadChar函数.其中MayHTMLEncode函数的功能是将一些特殊符号替换成浏览器识别的符号,而ReplaceBadChar函数的功能是过滤非法的SQL字符.从而保证了用户名等信息符合网页设计的要求.当以上所有的数据都审核通过后,Reg函数便将返回的内容传递给自定义变量,然后创建一个ADO对象模块的Recordset对象实例来访问数据库的用户信息表,同样使用了Recordset对象的BOF和EOF属性来查看此用户名是否已被注册,使用一条If等else条件语句将条件定为Not(rs.EofAndrs.Bof),若为真,即数据不为空,说明用户名已被注册,则以Response对象的Redirect方法提示用户重新注册,保证了会员名的唯一性,方便论坛的管理.若条件为检测,则执行else以后的操作,即创建Recordset对象实例来将当前新的用户信息添加到数据库的用户信息表里,并将新会员数加1更新,完成注册功能,同时将所有注册后的会员信息写入Cookies中.页面提示用户注册成功,以Response对象的Redirect方法跳转回论坛主页面,此时会员就可以享用所有会员权限,尽情游览论坛.

Response对象的Redirect方法是实现页面的跳转,使当前页面跳转到指定的页面.本设计中都是以ClueInfo.asp文件中的函数来提示操作完成的信息或错误信息.当操作成功时,则调用ClueInfo.asp文件中的"Yes"函数,该函数即是显示成功操作的信息,并将页面跳转链接重新定义回主页面,如果发生错误,则调用ClueInfo.asp文件中的"OtherErr"函数,该函数即是显示错误信息,然后同样将页面跳转链接重新定义回主页面,使用户可以重新操作.

4.2.2论坛显示考虑到用户访问及发帖的需要,在每个版块中以"ForumId"为不同的值表示不同的版块.版块结构中分别创建了2个Recordset对象实例来访问数据库,一个对象实例以代表版块号的"ForumId"的值为查询条件查询存放版块信息的表,将数据库里存放的版块内容和版主名字读出,并将内容以Response对象的Write方法显示到页面上,另一个对象实例以代表版块号的"ForumId"的值为查询条件查询存放在该版块所发表的文章的表,为保证所查询的结果为最近的一条信息,在查询语句中"Top1"和"orderbydatetime"两个查询条件将时间最近的第一条信息以Response对象的Write方法将显示到页面上,查询语句的核心代码如下:

sql等于"SelectTop1*FromBBSWhereForumId等于orderbydatetime"

用户任意点击一个版块名称即链接到相应版块:

图4-3论坛"校园新闻"版块页面

该页面关键技术是调用的Session对象.除了在很多地方创建Recordset对象实例来访问数据库的表外,有时还必须根据需要对当前版块号"ForumId"进行保存,目的是在任意版块发帖的时候,能够将该帖子所要显示的版块号一起写入数据库,保证在哪个版块里发表的帖子能在哪个版块里显示,从而避免在不同版块发表文章却因为版块切换而造成的版块ID号与所要求的ID号不一致,不能正常显示的问题.利用Session对象的特点就可以解决这个问题.所以每个版块页面一开始都会先将版块号用Session对象保存.然后在其他地方则都是创建Recordset对象实例来访问数据库的表,然后根据表中字段情况做不同的处理.每个版块都分为两部分,一个部分是显示论坛公告等一系列重要主题的区域,另一部分则是显示普通文章的区域.所以在重要主题区域都会创建一个Recordset对象实例来访问数据库,但是都以"IsNews"为1查询条件,并用一个While条件语句来处理,若该字段为1,则版块有公告帖,就将公告显示,若没有公告等重要主题,While条件为检测,则显示为空.至于在普通主题区域里则以表示公告的"IsNews"和表示固顶的"IsTop"字段为0为查询条件查询数据库,然后将符合条件的文章主题等内容读出并在页面显示.这里用了一条DoWhile循环语句,只要读取帖子信息的指针没到最后,则重复执行显示信息的操作,使所有帖子都依次显示.在读取文章之前都会做关于是否为"精华","锁定"的判断,即多使用一条If等else条件语句,查询帖子年息中代表"精华"和"锁定"的"IsBest","IsLocked"语句,为真则显示提示,否则就不显示.以上所述的关键代码如下:

session("ForumID")等于1

SQL等于"Select*fromBBSWhereIsNews等于1AndRID等于0AndForumID等于1OrderByIDDesc"

WhileNotwc.Eof

等等等等等'省去部分代码

SQL等于"Select*FromBBSWhereIsTop等于0AndIsNews等于0AndRID等于0AndForumID等于1OrderbyLastDateTimeDesc"

DoWhileNotwc.Eof

Ifwc("IsBest")等于the_TrueThenResponse.Write

等等等等等'省去部分代码

然后会员可随意点击阅读感兴趣的帖子

此时调用Read.asp文件实现内容显示,这里也用到了Session对象来保存当前文章所在版块的ID号,并根据Session对象所暂存的ID号来进行If等else条件选择,然后在标题的"游览"处添加相应的版块链接,这样在用户点击"游览"时可根据刚才保存的ID号返回刚才的版块页面,使返回的版块根据保存值动态更新,实现退回版块主页的功能.要实现显示文章信息的功能首先最关键的是要得到所浏览文章的ID号,这个在文章主题的链接到Read.asp文件时会将当前文章的ID号一同传递给Read.asp中的处理程序.所以Read.asp中执行程序一开始就会先将从Request对象传递来的主题ID号保存到变量ID中,然后就能以该变量为查询条件创建Recordset对象实例来访问数据库的表,并将作者信息,帖子内容等数据内容以Response对象的Write方法显示到页面上,显示文章内容是调用自定义函数ShowContent()实现的,因为该帖子除了主题帖外,可能还会有一些跟帖的回复内容,都需要显示,所以ShowContent()函数使用了DoWhile等Loop循环,这种循环在执行DoWhile时,会查询"条件"的返回值,若返回值为真则执行程序代码,这里是查看搜索数据库的指针是否没到最后,若成立,说明还有信息,则用同样的Response对象的Write方法显示,然后碰到Loop又回到DoWhile再次检查,这样就保证了文章所有内容都显示出来.以上提到的核心代码如下:

首先利用得到的帖子的ID号做为查询条件得到帖子作者,

ID等于Request("TopicID")

Setrs等于Server.CreateObject("adodb.recordset")

SQL等于"Select*FromBBSWhereID等于"&,ID&,"OrRID等于"&,ID&,"OrderbyIDAsc"

等等等等等'省去部分代码

Session对象所暂存的ID号:

ForumID2等于session("ForumID")

IfForumID2等于1thenResponse.Write("<,ahref等于'Index.asp'>,游览<,/a>,")

IfForumID2等于2thenResponse.Write("<,ahref等于'Index2.asp'>,游览<,/a>,")

等等等等等'省去部分代码

ShowContent()函数:

DoWhileNotrs.Eof

等等等等等'省去显示文章内容的代码

rs.MoveNext

Loop

4.2.3发帖与回复

该页面实现较简单,属于一个静态表单传递页面,只用于会员填写帖子内容,关键部分是在提交后的后台处理.这里表单传递数据方法用的是"POST",表单处理程序由标准输入取得数据.将以上内容写好后点击"提交"按钮,将由后台Postings.asp代码处理并写入数据库.后台以Request对象接受表单传递来的数据,然后将这些数据赋给自定义的变量,接着创建Recordset对象实例来访问数据库的多个表,用rs.AddNew语句在数据库中添加新的文章信息.这里要特别提出的是新帖子的ID号在数据库中是以自动编号的形式自动生成的,从而保证了每个帖子都有一个唯一的ID号.完成后则以Response对象的Redirect方法提示操作成功并跳转,而这里正是以刚才新生成的帖子的主题ID号来做为跳转的条件,这样就可以直接返回新帖子页面.以上核心代码如下:

<,formaction等于"Postings.aspAction等于NewTopic"method等于"post"name等于"NewTopic"id等于"NewTopic"onKeyDown等于"if(event.ctrlKey&,&,event.keyCode等于等于13)this.submit()">,

这里的onKeyDown等于"等"的意思是实现当用户提交帖子时不需要点击"提交"按钮,直接用Ctrl+Enter组合键也能实现相同的效果,这一点快捷功能在很多的论坛中都有体现.

Title等于MayHTMLEncode(Trim(Request.Form("Title")))

Content等于Trim(Request.Form("Content"))

等等等等等'省去部分代码

SQL等于"Select*FromBBS"

Setrs等于Server.CreateObject("adodb.recordset")

rs.OpenSQL,conn,1,3

rs.AddNew

rs("ForumID")等于session("ForumID")'将session对象保存的版块ID号写入数据库

rs("Title")等于Title

等等等等等'省去部分代码

rs.UpDate

添加回复的页面和发表新话题一样,不同在于选择"回复"时当前主题帖子的ID号做为一个附加条件一起传递给回复页面的后台代码,并以当前的主题帖的ID号做为查询条件访问数据库,在回复页面中则可将回复主题帖子的题目从数据库中读取出来.在用户填写好回复信息并提交时,刚才保存的主题帖的ID号也一同传递到Postings.asp文件的回复处理程序中,将该ID号传递给回复帖子的"RID"标示字段,从而保证了回复的内容属于原来的主题帖子,并可以一同显示出来.以上核心代码如下:

TopicID等于Request("TopicID")'首先得到原帖的ID号

<,formaction等于"Postings.aspAction等于ReplyTopic"method等于"post"name等于"NewTopic"id等于"NewTopic"onKeyDown等于"if(event.ctrlKey&,&,event.keyCode等于等于13)this.submit()">,

TopicID等于Request.Form("TopicID")'主题帖的ID号传递到回复处理程序

rs.AddNew

rs("RID")等于TopicID'该ID号传递给回复帖子的"RID"标示字段

注:为方便使用增加了快速回复功能,其程序实现原理与回复功能一致

4.2.4查看个人资料

会员可以随意点击其他会员的名字就能查看对方资料

该功能实现原理同阅读文章的实现一致,只是查询的条件是将从Request对象返回的会员名字作为查询数据库里Users表的条件,然后将相应内容读出.这里要提出的是由于会员名在保存入数据库时用到了MD5算法加密,而该算法是单向处理的程序,不能解密,所以对于返回的会员名字首先要进行一次MD5加密,将加密后的密文再去和数据库中的内容进行比较,也在一定程度上保证了信息的安全.

UserNameMd5等于md5(Trim(Request("UserName")),32)

Setrs等于conn.execute("Select*FromUsersWhereUserNameMD5等于'"&,UserNameMd5&,"'")

<,tdwidth等于"35%">,用户名<,/td>,

<,td>,<,%等于rs("UserName")%>,<,/td>,

等等等等等'省去部分代码

会员也可在"控制面板"中修改自己的信息,该页面也容易实现,原理同发表文章类似,在修改信息的表单页面中填好自己所要修改的信息,然后利用"POST"方法将表单数据传递到UserManager_Postings.asp文件里的处理程序中,创建Recordset对象实例来访问数据库里的用户信息表,将新的信息在数据库中进行更新.

会员填好修改信息后,将调用后台处理文件,表单传递代码如下:

<,formaction等于"UserManager_Postings.aspAction等于UserModify"method等于"post"name等于"UserModify"id等于"UserModify">,

在处理文件UserManager_Postings.asp中自定义了两个功能函数,分别是修改会员资料的UserModify函数和修改会员的PassWordModify函数,使用哪个方法就在action行为后调用哪个函数,以实现功能.

同理,修改也是根据表单传递的"POST"方法将修改信息传递给处理程序调用PassWordModify函数,并创建Recordset对象实例来访问数据库里的用户信息表,更新会员.以上核心代码如下:

Action等于Request("Action")

SelectCaseAction

Case"UserModify"'修改个人资料

CallUserModify()

Case"PassWordModify"'修改资料

CallPassWordModify()

CaseElse

以上功能查询数据库都是以当前返回的会员姓名加密后的密问做为查询条件更新数据库的.

4.2.5个人好友管理

本论坛还为会员开设了添加好友或黑名单的功能.进入添加好友页面

以上功能的实现是通过会员对添加好友还是添加黑名单的不同选择,调用FriendList_Postings.asp处理程序的AddFriend或AddCheckUse这两个不同的功能函数实现.添加好友时将处理程序的行为是调用AddFriend函数,将添加的会员姓名作为查询条件访问数据库中的Friend表,若存在该会员且不在当前会员的黑名单中,则将该会员增加到数据库里,这里程序会先和当前会员名字比较,防止添加本人.而添加黑名单时处理程序几乎一致,只需调用AddCheckUse函数,而两个功能最明显的区别就在于表中"CheckUser"字段,通过对表中"CheckUser"字段置1或0来区别好友和黑名单,因为会员好友名单都是由一张表存放,则以"CheckUser"字段为1是黑名单,为0就是好友来进行区别.

FriendUserName等于MayHTMLEncode(ReplaceBadChar(Trim(Request("FriendUserName"))))

FriendUserNameMd5等于md5(FriendUserName,32)

UserName等于md5(Request.Cookies("BBS")("UserName"),32)

IfUserName等于FriendUserNameMd5ThenResponse.write"不能添加自己为好友."

SubAddFriend()

rsAdd("CheckUser")等于the_False

rsAdd.Update

SubAddCheckUser()

rsAdd("CheckUser")等于the_True

rsAdd.Update

4.2.6文章搜索功能

本论坛一个重要功能,即会员可以根据一些条件搜索论坛里的相关文章,十分方便

该功能的实现是根据会员所选择的各种条件,在代码中由"input"的"value"值决定.将这些选择的条件一起通过"POST"方法传递给后台处理程序,处理程序将得到的这些参数作为SQL查询语句的限定条件来决定搜索的范围,在代码中以"&,"符号作为查询条件的连接字符.其中通过"关 键 词"传递的数据作为模糊查询的条件,语句中以"like"代码模糊查询.其他参数则作为唯一条件查询.这里的关键代码如下:

关 键 词搜索<,inpe等于"radio"value等于"key"name等于"Search">,

作者搜索<,inpe等于"radio"value等于"author"name等于"Search">,

日期范围:<,td>,<,selectsize等于"1"name等于"TimeLimit">,

<,optionvalue等于"">,所有日期<,/option>,

<,optionvalue等于"1">,昨天以来<,/option>,

等等等等等'省去部分代码

<,/select>,<,/td>,

请选择要搜索的论坛<,/td>,

<,td>,&,nbsp,<,selectname等于"ForumID"size等于"1">,

<,optionvalue等于""selected>,全部论坛<,/option>,

<,optionvalue等于1>,校园新闻<,/option>,

等等等等等'省去部分代码

当确定查询条件后,如选择"关 键 词搜索",输入"我是",然后"日期范围"定为30天:,查找范围为"全部论坛",就会根据"关 键 词","30天","全部论坛"这3个条件进行查询,得到相关文章信息

根据条件处理程序代码,"radio"表示为单选框,根据"value"确定是使用"关 键 词",于是SQL语句条件为"like"模糊查询,如果这里选择是的以"作者"作为查询条件,则SQL语句的条件中直接接上传递的作者姓名,不用模糊查询,然后选择版块为"全部论坛",其值为空,则不加限定,搜索全部版块号,日期限定"TimeLimit"不为空,则当前日期减去发帖日期小于限定的"30天"的帖子符合要求:

ForumID等于Trim(Request.Form("ForumID"))

Search等于MayHTMLEncode(Trim(Request.Form("Search")))

content等于Trim(Request.Form("content"))

TimeLimit等于Trim(Request.Form("TimeLimit"))

SQL等于"Select*FromBBSWhereRID等于0"

ifSearch等于"key"Then

SQl等于Sql&,"AndTitlelike'%"&,content&,"%'"

Else

Sql等于SQL&,"AndUserName等于'"&,content&,"'"

EndIf

ifForumID<,>,""ThenSql等于SQL&,"AndForumID等于"&,ForumID&,""

if(TimeLimit<,>,"")ThenSQL等于SQl&,"AndDay(Now()-DateTime)<,"&,TimeLimit&,""

4.2.7会员短消息功能

会员短消息功能是一个十分实用的功能,相比其他功能来说更难实现一些,本设计共使用了4个文件来完成该功能.当用户给某一会员写短消息时,首先要将收件人姓名通过Request对象传递给一个变量"to_man",发件人即用户本人的姓名直接从Cookies中读到"from_man"变量中,写好的表单传递给"end.asp"文件处理.在该处理程序中首先会将变量"to_man"和变量"from_man"比较,禁止用户向自己发送消息.然后再判断收件人是否在自己的黑名单中,如果不在,则创建Recordset对象实例来访问数据库里的用户短消息表,将数据写入数据库,完成消息的发送.表中"isread"字段判断用户有无新消息.在每次用户登陆后都会先在这里查询,有未读消息则提示,用户可点击查看新消息.这时将当前用户名作为查询条件查询用户短消息表,显示发送给该用户的消息,然后将"isread"字段值置1,关键代码部分:

man等于Request("to_man"),,,,

from_man等于Request.Cookies("BBS")("UserName")

Setrs等于server.createobject("adodb.Recordset")

sql等于"select*frommessage"

rs.opensql,conn,1,3

rs.addnew

rs("to_man")等于man

rs("from_man")等于from_man

rs("isread")等于0

rs.update

rs.close

收件人也可回复消息,这里关键之处是将发件人的姓名作为本次消息的收件人,以下面代码实现:

<,b>,来自<,fontcolor等于"red">,<,%等于mes("from_man")%>,<,/font>,的留言:<,/b>,

等等等等等'省去部分代码

<,ahref等于"sendmessage.aspUserName等于<,%等于mes("from_man")%>,">,<,b>,回复该留言<,/b>,<,/a>,

4.3权限管理详细设计

4.3.1功能概述

论坛权限管理是为了保证系统的安全性和稳定性,论坛的每个用户只能看到和权限相对应的页面和执行权限所允许的操作,由于不同用户的权限不同,这样保证了每位用户都能更好的使用自己的权限,履行自己的职责,能保证论坛良好的秩序.用户等级前面已经列出,这里不再累述.

4.3.2管理员权限

论坛管理员是论坛最高级别的用户,拥有管理该论坛的所有权限,可以对论坛的所有版块的文章进行管理,还可以修改论坛系统的基本设置.管理员的身份在数据库Users表中以"IsAdmin"字段是否为"1"表示.当会员登陆时,都会首先创建Recordset对象实例来访问数据库里上面所说的字段,如果为1,说明该用户是管理员,则用户信息栏里会显示两项管理员操作项.以上处理程序在系统一开始就处理的User_Auditing.asp文件中进行:

图4-11管理员操作栏

管理员可在"系统设置"中对论坛的基本信息进行修改,这里实现原理同上面一样,利用传递数据的method等于"post",将重新填写的数据传递给处理数据的一个自定义函数,该函数创建Recordset对象实例将信息写到数据库里的Config表:

图4-12管理员操作栏

管理员可在"会员列表"中查看目前论坛的注册用户

这里关键代码是使用了DoWhile等Loop循环,将数据库里的数据全部读出:

DoWhileNotrs.Eof

等等等等等'省去部分显示数据库内容的代码

循环结束

rs.MoveNext

Loop

用户以管理员身份进入论坛的任一版块后,都会出现以下对帖子进行操作的选项,这些同样是先通过对"IsAdmin"字段进行判断,为真后才会显示操作及其处理程序的链接

而这些选项又根据对应情况的字段值为0为1显示对应的状态,在判断管理员身份为真后接着判断相应字段,在文件开始就已经创建一个Recordset对象实例查询存放帖子的表,后面都是以该实例进行操作.下面以是否精华为例:

Ifwc("IsBest")等于the_FalseThenResponse.Write"<,ahref等于'Postings.aspAction等于IsBest&,TopicID等于"&,wc("ID")&,"'title等于'精华'>,<,fontcolor等于'#3399CC'>,精<,/font>,<,/a>,"

Else

Response.Write"<,ahref等于'Postings.aspAction等于UnIsBest&,TopicID等于"&,wc("ID")&,"'title等于'取消精华'>,<,fontcolor等于'#3399CC'>,取消精华<,/font>,<,/a>,"

Endif

然后可进行相应操作,这里以"加精"为例说明,当点击"精"时,链接到"Postings.asp"文件里的处理程序中,将处理的动作和要处理的帖子ID号一同传递给处理程序,该处理程序主要功能就是创建两个Recordset对象实例查询存放帖子的表和用户信息表,其中一个将该帖子的"精华"字段的值置1,另一个再将作者的"精华帖"数增加1,然后提示并返回.这里比较关键的一点是首先要将帖子的作者姓名赋给一个变量,然后才能以这个标量为条件查询用户信息表中的数据

处理代码如下:

TopicID等于Request("TopicID")

SQL等于"SelectIsBest,UserNameFromBBSWhereID等于"&,TopicID&,"AndRID等于0"

Ifrs("IsBest")等于the_FalseThen

rs("IsBest")等于the_True

rs.UpDate

取消"精华"处理流程一致,区别尽在于对"IsBest"字段的置1和置0.4.3.3版主权限

版主是某个版块内的直接管理者,在自己的版块里对帖子的管理权限与管理员一致,但任何两个版块间的版主不能跨版块操作,上述情况通过不同的版块ID号限制其版主的权限

在进入版块页面后在判断完用户不是管理员后,将新建一个Recordset对象实例查询版块信息表,查询条件以当前版块号为准,如在第一个版块,则:

SQL等于"SelectBorderUserNamefromBBorumIDWhereForumID等于1"

至于版主对帖子的管理则和管理员使用时的处理程序一致,就不再累述.

4.3.4贵宾权限

贵宾是论坛的高级用户,享有与普通会员不同的一些特殊权限,可以享有优于普通会员的待遇,当然也是为了协助管理员及版主更好的管理论坛.

(1)贵宾可以给论坛的任意帖子进行"加精"的操作

在显示加精操作的程序代码里,判断完管理员及版主身份和,较其他操作会多一段新建一个Recordset对象实例查询用户信息表的代码,本论坛中以"userGroupID"字段为3表示该会员为贵宾.将Cookies中会员姓名与贵宾姓名比较,是贵宾的话则同样显示加精操作的选项,至于加精的处理程序上面已经详细说明.

其判断代码如下:

SQL等于"Select*fromUserswhereuserGroupID等于3"

ifwe("UserName")等于Request.Cookies("BBS")("UserName")then

Response.Write"<,ahref等于'Postings.aspAction等于IsBest&,TopicID等于"&,wc("ID")&,"''>,精<,/a>,"

(2)贵宾发表帖子所得金钱是普通用户的2倍,实现功能仅仅在原先会员发帖后的代码后再加上一段新建一个Recordset对象实例查询用户信息表的代码,当当前会员身份为贵宾时将增加金钱的程序再次执行一次即可实现:

bestSQL等于"SelectUserMoneyFromUsersWhereUserGroupID等于3AndUserNameMd5等于'"&,md5(Request.Cookies("BBS")("UserName"),32)&,"'"

IfbestUser.EofAndbestUser.BofThen

bestUser.close

else

bestUser("UserMoney")等于bestUser("UserMoney")+Site_PostMoney

bestUser.UpDate

bestUser.close

endif

相关论文范文