




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于asp的某学校校园bbs的设计与实现1 引言1.1 课题背景与开发目的 bbs是bulletin board system的缩写,即电子公告板。它是以文字为主的界面,为广大网友提供了一个彼此交流的空间。随着互联网技术的迅猛发展,网络给人们带来了很多便利,人们借助于网络进行相互交流变得更加方便。于是,以互联网为基础的网上论坛逐渐成为人们发表言论的一个平台。一些具有前卫风格的校园bbs随着互联网的普及在各大高校建立,并逐渐成为学生之间交流信息,共享资源,娱乐休闲的场所,成为广大高校学生课余生活中不可获缺的一部分。而且在不久的将来,各种各样展现自身风格的校园bbs会深入到中学甚至小学校园。本系统采用b/s模式设计,开发目的除了作为在校学生、老师发布消息,共享资料,娱乐休闲的平台,也可成为对外展示校园的一个“活广告”。1.2开发环境本系统是在windows xp操作系统下,使用ultraedit-32和dreamweaver作为开发工具进行开发的。数据库使用的是access。1.3硬件需求在运行本系统前,请检查一下计算机是否满足以下要求。计算机要求的配置为:(1) windows servicepack4.0和 internet 信息服务器 5.0 (iis 5.0)(2) microsoft office access2000以上版本(3) windows 2000/xp 简体中文版简体中文ie5.0以上版本 需求分析2.1系统概述根据该bbs的逻辑功能划分,本系统一共分为七大功能模块,分别是用户注册和登陆模块,用户资料管理模块,文章发表和文章浏览模块,文章搜索模块,管理员操作模块,版主操作模块,论坛短消息功能模块。其中管理员操作又划分为论坛文章操作模块及论坛设置模块。用户资料管理模块可划分为用户密码重设模块,用户信息查询模块,用户资料修改模块。其功能结构图如图2.1所示。校园bbs系统用户注册和登陆模块用户资料管理模块文章发表和浏览模块文章搜索模块管理员操作模块版主操作模块论坛短消息模块用户信息查询模块用户资料修改模块用户密码重设模块论坛文章操作模块论坛设置模块图2-1 系统功能结构图(1)用户注册和登陆模块主要是完成新用户的注册,将新用户注册信息加入数据库;登陆模块主要验证用户身份,使用会员身份登陆论坛即可进入论坛并享有会员的使用权限。(2)用户资料管理模块主要功能是注册用户可以随意修改自己的个人信息,可随时查询其他用户的个人资料;如果不幸遗忘自己的登陆密码,还可利用本论坛的密码重设功能,重设密码,极大的方便了用户使用。(3)文章发表和文章浏览模块本论坛最主要的功能,登陆用户和游客都可随意点击感兴趣的帖子进行浏览,而登陆用户还可以随时在论坛里发表自己的文章,或者对论坛里的帖子进行回复。(4)文章搜索模块登陆用户可利用该功能对感兴趣但无法记起位置的帖子进行查找,方便用户游览论坛的一个功能。(5)管理员操作模块本论坛管理者才拥有的功能,可以对论坛中任意版块的帖子进行固顶,加精,删除等操作,还可以对论坛的一些基本设置进行修改。(6)版主操作模块论坛各个版块的具体管理者,在自己的版块有和管理员一样的管理权限,负责维护自己版块的秩序。(7)论坛短消息功能模块登陆用户可利用该功能对其他论坛用户留言,进行私下的交流。2.2系统角色划分本系统操作用户按不同级别依次可分为:游客,普通会员用户、版主、管理员。高级别的用户可以继承低级别用户的公用功能。同时,各级别用户具有一定的只有以本级别身分登录才具有的私有功能。1.游客:只能进入论坛浏览帖子,无其他权限。2.普通会员:浏览帖子,发表或回复帖子、资料维护、文章搜索、论坛短消息。3.版主:除会员基本功能外,可对自己所在版块的文章进行操作。4.管理员:除会员基本功能外,可对所有版块的文章进行固顶,加精,删除等,并且有论坛设置修改权限。3 系统总体设计3.1关键技术3.1.1 asp技术asp技术是一种类似html(hypertext markup language超文本标识语言)、script与cgi(common gateway interface通用网关接口)的结合体,简单的讲它是一种运行于服务器的脚本语言,但是其运行效率比cgi更高、程序编制也比html更方便且更有灵活性,程序安全性及保密性也远比script好。其特点归纳如下:1. asp可以和html或其他脚本语言(vb script与java script)互相嵌套。2. asp是一种在web服务器端运行的脚本语言,因此,程序代码完全保密。3. asp以对象为基础,因此可以使用activex控件继续扩充其功能。4. asp内置ado组件,因此可以轻松地存取各种数据库,大大缩短了程序开发时间。5. asp可以将运行结果以html的格式传送至客户端浏览器,因此asp可以适用于各种浏览器。下面来介绍一下asp的几个内置对象:request对象,我们知道http通讯协议是一种请求与响应(request/response)的通讯协议,因此通常由客户端向web服务器提出请求,web服务器才会响应信息。因此在asp中,特别将“客户端提出的要求”与“web服务器响应的信息”等动作封装成request对象与response对象。换而言之,request对象通常包含了用户端的相关信息,如浏览器的种类、表头信息、表单参数及cookies等等。response对象,每一种程序语言或开发工具一定都有与用户沟通的界面或函数,asp也不例外。在asp中负责将信息传达到用户的对象就是response对象。server对象,server对象允许用户取得服务器提供的各项功能,例如,server对象的createobject方法允许客户端用户建立一个activex server组件实例,其所建立组件实例会随着服务器端完成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系统流程图论坛设计按照一般操作进行设计:开始非论坛会员仅可阅读论坛文章管理员进入论坛显示管理员操作项论坛版主进入相应版块显示版主操作项一般会员享有的除管理权限外的一切功能nyynny登陆结束图3-1 系统流程图3.3方案选择3.3.1 数据库需求分析根据系统功能和数据流程,可以确定一下数据项和数据结构:1.会员信息:包括会员标示id号,姓名,性别,论坛头像,论坛币,发帖数等论坛资料。2.论坛配置信息:包括创建时间,会员总数,论坛货币单位等。3.版块信息:版块说明,版主等。4.论坛帖子信息:帖子号,作者,内容,发表日期,回复数等。5.好友信息:论坛好友的姓名,注册时间。3.3.2 数据库设计根据数据库的需求分析,酒店管理系统需要建立10个数据表,他们分别是:论坛文章表(bbs), 论坛版块表(bbsforumid),论坛配置表(config),用户好友表(friend),论坛短消息表(message),用户等级表(usergroups),用户信息表(users)。各表具体信息见下表:表3-1 bbs表中字段字段名数据类型字段描述id自动编号主题帖子号id(主键)forumid数字论坛版块号rid数字回复主题帖子号idtopicface数字作者心情贴图title文本文章标题content备注文章内容datetime日期/时间发表日期username文本作者isbest数字是否为精华帖istop数字是否为置顶帖isnews数字是否为论坛公告islocked数字是否被锁isvote数字是否为投票帖ismana数字是否需要威望mananum数字要求威望值lastusername文本最后回复人lastdatetime日期/时间最后回复时间readtimes数字浏览次数retimes数字回复次数表3-2 bbsforumid表中字段字段名数据类型字段描述forumid数字论坛版块号id(主键)版块说明文本版块说明版块名称文本版块名称borderusername文本版主名字表3-3 config表中字段字段名数据类型字段描述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-4 usergroups表中字段字段名数据类型字段描述usergroupid数字组idgrouptitle文本用户组名称groupclass文本用户组分类minarticle数字需发表多少文章titlepic文本类别图groupclassid数字等级id表3-5 friend表中字段 字段名数据类型字段描述id自动编号好友id(主键)usernamemd5文本用户加密名称friendname文本好友名字joindate日期/时间加为好友时间checkuser数字是否列入黑名单表3-6 message表中字段字段名数据类型字段描述id数字消息id号(主键)title文本消息标题content文本消息标内容to_man文本收件人from_man文本发件人isread数字是否已读表3-7 users表中字段字段名数据类型字段描述uid自动编号会员id(主键)username文本会员姓名usernamemd5文本会员姓名加密userpassword文本会员密码userquestion文本密码提示问题useranswer文本密码提示问题答案userhonour文本会员头衔userface文本会员头像usersex数字会员性别userhomepage文本会员主页useremail文本会员邮箱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 设置数据库的连接方式,使用的是access ole db驱动程序。本设计还使用了server对象的server.mappath(path)方法,作用是将(path)指定的虚拟路径转换为实际路径,大大提高了本系统的移植性。然后使用server.createobject方法建立connection对象的实例变量conn,使用connection对象的open方法打开数据库连接,核心代码如下:mdb = data/mybbs.mdb数据库相对路径connstr = provider = microsoft.jet.oledb.4.0;data source = & server.mappath(&mdb&)set conn = server.createobject(adodb.connection) conn.open connstr4 系统的完整设计与开发4.1系统显示前的准备4.1.1 论坛基本配置系统运行时,有些数据库里的数据是会被频繁调用的,为了便于书写代码和程序的严谨,可以将这些数据首先赋给一些变量,在后面的程序运行中直接调用变量,不用频繁的访问数据库。一些保存论坛基本信息的数据就属于这类。所以在运行时首先将论坛一些基本参数在数据库连接后即从数据库中调出,以上内容在conn.asp文件里连接数据库后执行,其中使用connection对象的execute方法对存放基本配置信息的表进行sql查询,还使用了recordset对象的bof和eof属性,其中bof属性表示查询数据库的指针位于第一条记录之前,则为真:eof属性表示查询数据库的指针位于最后一条记录之后,则为真。如果两者都为真,说明数据库里并没有对应的数据,然后可关闭刚才创建的对象实例,并将其清空,释放系统资源;如果找到需要的记录,则将其数据读出到创建的变量里以便使用:=读取论坛基本设置= set rsconfig = conn.execute(select * from config)创建一个查询数据库的对象实例 if rsconfig.bof and rsconfig.eof then查询为空而且到最后 rsconfig.close关闭变量 set rsconfig = nothing释放对象实例 response.write 网站配置数据丢失!系统无法正常运行! response.end else site_name = rsconfig(site_name) site_postnum= rsconfig(site_postnum) 省去部分代码 end if进入系统时由于有些功能只针对注册会员和管理员开放的,并不是进入论坛的人都能使用,这里就涉及到一个用户身份判断的问题。本设计包含了一个用户验证功能函数的user_auditing.asp文件,在其他程序执行前都会先执行该文件里的函数,在需要验证时不必重复书写代码,只需在需要身份验证的程序之前调用该具有验证功能的函数就行。其中的checkusers()函数验证会员,checkunadmin()函数验证管理员或版主。本设计一大特点是使用了cookies来暂存会员信息,主要是会员姓名、密码这两项,这一功能的实现对程序的运行是十分方便的,如上面提到的checkusers()函数的功能就是根据cookies里的会员密码来验证会员是否登陆;因为一旦会员登陆后登陆处理程序会将该会员的密码暂存到cookies中,所以只需验证当前cookies里的会员密码是否为空就可以判断目前的用户是否登陆论坛。checkunadmin()函数则是创建一个ado对象模块的两个recordset对象实例来访问数据库中存放管理员身份信息和版主身份信息的表,读取有关管理员或版主身份的字段进行比较判断。sub checkunadmin() set wd=server.createobject(adodb.recordset)sql=select borderusername from bbsforumidwd.open sql,conn,1,1if wd(borderusername) request.cookies(bbs)(username) then省去部分代码4.2 系统主要功能分析4.2.1 用户注册在论坛主页的工具栏里是会员享有的一般操作选项,该工具栏由在user_auditing.asp文件里定义的mybbstop()函数实现,同样只需在以后的页面调用该函数实现工具栏的显示。该函数一开始会先在cookies里去查找会员姓名,如果发现会员姓名为空,则说明当前浏览论坛的用户未登陆,则工具栏中会显示未登陆的提示信息,以及显示未注册用户注册的信息。若是未注册会员,则可点击“注册”链接到注册页面,如下图:图4-1 会员注册页面用户进入该页面根据要求填写上述必要的信息后,会通过表单传递的“post”方法将输入的内容传递给后台处理页面的reg()函数对信息进行处理,其中在传递“用户名”、“密码”及“密码问题”等信息时又调用了mayhtmlencode和replacebadchar函数。其中mayhtmlencode函数的功能是将一些特殊符号替换成浏览器识别的符号,而replacebadchar函数的功能是过滤非法的sql字符。从而保证了用户名等信息符合网页设计的要求。当以上所有的数据都审核通过后,reg函数便将返回的内容传递给自定义变量,然后创建一个ado对象模块的recordset对象实例来访问数据库的用户信息表,同样使用了recordset对象的bof和eof属性来查看此用户名是否已被注册,使用一条ifelse条件语句将条件定为not (rs.eof and rs.bof),若为真,即数据不为空,说明用户名已被注册,则以response对象的redirect方法提示用户重新注册,保证了会员名的唯一性,方便论坛的管理。若条件为假,则执行else以后的操作,即创建recordset对象实例来将当前新的用户信息添加到数据库的用户信息表里,并将新会员数加1更新,完成注册功能,同时将所有注册后的会员信息写入cookies中。页面提示用户注册成功,以response对象的redirect方法跳转回论坛主页面,此时会员就可以享用所有会员权限,尽情游览论坛。response对象的redirect方法是实现页面的跳转,使当前页面跳转到指定的页面。本设计中都是以clueinfo.asp文件中的函数来提示操作完成的信息或错误信息。当操作成功时,则调用clueinfo.asp文件中的“yes”函数,该函数即是显示成功操作的信息,并将页面跳转链接重新定义回主页面;如果发生错误,则调用clueinfo.asp文件中的“othererr”函数,该函数即是显示错误信息,然后同样将页面跳转链接重新定义回主页面,使用户可以重新操作。4.2.2 论坛显示下图是论坛主页面,里面的分割区域将论坛五个话题不同的版块分别显示:图4-2 论坛主页面考虑到用户访问及发帖的需要,在每个版块中以“forumid”为不同的值表示不同的版块。版块结构中分别创建了2个recordset对象实例来访问数据库,一个对象实例以代表版块号的“forumid”的值为查询条件查询存放版块信息的表,将数据库里存放的版块内容和版主名字读出,并将内容以response对象的write方法显示到页面上;另一个对象实例以代表版块号的“forumid”的值为查询条件查询存放在该版块所发表的文章的表,为保证所查询的结果为最近的一条信息,在查询语句中“top 1”和“order by datetime”两个查询条件将时间最近的第一条信息以response对象的write方法将显示到页面上,查询语句的核心代码如下:sql=select top 1 * from bbs where forumid=?order by datetime用户任意点击一个版块名称即链接到相应版块:图4-3 论坛“校园新闻”版块页面该页面关键技术是调用的session对象。除了在很多地方创建recordset对象实例来访问数据库的表外,有时还必须根据需要对当前版块号“forumid”进行保存,目的是在任意版块发帖的时候,能够将该帖子所要显示的版块号一起写入数据库,保证在哪个版块里发表的帖子能在哪个版块里显示,从而避免在不同版块发表文章却因为版块切换而造成的版块id号与所要求的id号不一致,不能正常显示的问题。利用session对象的特点就可以解决这个问题。所以每个版块页面一开始都会先将版块号用session对象保存。然后在其他地方则都是创建recordset对象实例来访问数据库的表,然后根据表中字段情况做不同的处理。每个版块都分为两部分,一个部分是显示论坛公告等一系列重要主题的区域,另一部分则是显示普通文章的区域。所以在重要主题区域都会创建一个recordset对象实例来访问数据库,但是都以“isnews”为1查询条件,并用一个while条件语句来处理,若该字段为 1,则版块有公告帖,就将公告显示;若没有公告等重要主题,while条件为假,则显示为空。至于在普通主题区域里则以表示公告的“isnews”和表示固顶的“istop”字段为0为查询条件查询数据库,然后将符合条件的文章主题等内容读出并在页面显示。这里用了一条do while循环语句,只要读取帖子信息的指针没到最后,则重复执行显示信息的操作,使所有帖子都依次显示。在读取文章之前都会做关于是否为“精华”、“锁定”的判断,即多使用一条ifelse条件语句,查询帖子年息中代表“精华”和“锁定”的“isbest”,“islocked”语句,为真则显示提示,否则就不显示。以上所述的关键代码如下:session(forumid)=1 sql=select * from bbs where isnews=1 and rid=0 and forumid=1 order by id desc while not wc.eof省去部分代码sql=select * from bbs where istop=0 and isnews=0 and rid=0 and forumid = 1 order by lastdatetime descdo while not wc.eofif wc(isbest) = the_true then response.write省去部分代码然后会员可随意点击阅读感兴趣的帖子:图4-4 阅读帖子页面此时调用read.asp文件实现内容显示,这里也用到了session对象来保存当前文章所在版块的id号,并根据session对象所暂存的id号来进行ifelse条件选择,然后在标题的“游览”处添加相应的版块链接,这样在用户点击“游览”时可根据刚才保存的id号返回刚才的版块页面,使返回的版块根据保存值动态更新,实现退回版块主页的功能。要实现显示文章信息的功能首先最关键的是要得到所浏览文章的id号,这个在文章主题的链接到read.asp文件时会将当前文章的id号一同传递给read.asp中的处理程序。所以read.asp中执行程序一开始就会先将从request对象传递来的主题id号保存到变量id中,然后就能以该变量为查询条件创建recordset对象实例来访问数据库的表,并将作者信息、帖子内容等数据内容以response对象的write方法显示到页面上;显示文章内容是调用自定义函数showcontent()实现的,因为该帖子除了主题帖外,可能还会有一些跟帖的回复内容,都需要显示,所以showcontent()函数使用了do whileloop循环,这种循环在执行do while时,会查询“条件”的返回值,若返回值为真则执行程序代码,这里是查看搜索数据库的指针是否没到最后,若成立,说明还有信息,则用同样的response对象的write方法显示,然后碰到loop又回到do while再次检查,这样就保证了文章所有内容都显示出来。以上提到的核心代码如下:首先利用得到的帖子的id号做为查询条件得到帖子作者,id = request(topicid)set rs=server.createobject(adodb.recordset)sql=select * from bbs where id=&id& or rid=&id& order by id asc省去部分代码session对象所暂存的id号:forumid2 = session(forumid)if forumid2 = 1 then response.write(游览)if forumid2 = 2 then response.write(游览)省去部分代码showcontent()函数:do while not rs.eof省去显示文章内容的代码rs.movenextloop4.2.3 发帖与回复图4-5 写新帖子页面该页面实现较简单,属于一个静态表单传递页面,只用于会员填写帖子内容,关键部分是在提交后的后台处理。这里表单传递数据方法用的是“post”,表单处理程序由标准输入取得数据。将以上内容写好后点击“提交”按钮,将由后台postings.asp代码处理并写入数据库。后台以request对象接受表单传递来的数据,然后将这些数据赋给自定义的变量,接着创建recordset对象实例来访问数据库的多个表,用rs.addnew语句在数据库中添加新的文章信息。这里要特别提出的是新帖子的id号在数据库中是以自动编号的形式自动生成的,从而保证了每个帖子都有一个唯一的id号。完成后则以response对象的redirect方法提示操作成功并跳转,而这里正是以刚才新生成的帖子的主题id号来做为跳转的条件,这样就可以直接返回新帖子页面。以上核心代码如下:这里的onkeydown=“”的意思是实现当用户提交帖子时不需要点击“提交”按钮,直接用ctrl+enter组合键也能实现相同的效果,这一点快捷功能在很多的论坛中都有体现。title = mayhtmlencode(trim(request.form(title)content = trim(request.form(content)省去部分代码sql=select * from bbsset rs = server.createobject(adodb.recordset)rs.open sql,conn,1,3rs.addnewrs(forumid)=session(forumid)将session对象保存的版块id号写入数据库rs(title) = title省去部分代码rs.update添加回复的页面和发表新话题一样,不同在于选择“回复”时当前主题帖子的 id号做为一个附加条件一起传递给回复页面的后台代码,并以当前的主题帖的id号做为查询条件访问数据库,在回复页面中则可将回复主题帖子的题目从数据库中读取出来。在用户填写好回复信息并提交时,刚才保存的主题帖的id号也一同传递到postings.asp文件的回复处理程序中,将该id号传递给回复帖子的“rid”标示字段,从而保证了回复的内容属于原来的主题帖子,并可以一同显示出来。以上核心代码如下:topicid = request(topicid) 首先得到原帖的id号topicid = request.form(topicid)主题帖的id号传递到回复处理程序rs.addnewrs(rid) = topicid 该id号传递给回复帖子的“rid”标示字段注:为方便使用增加了快速回复功能,其程序实现原理与回复功能一致4.2.4 查看个人资料会员可以随意点击其他会员的名字就能查看对方资料:图4-6 会员信息页面该功能实现原理同阅读文章的实现一致,只是查询的条件是将从request对象返回的会员名字作为查询数据库里users表的条件,然后将相应内容读出。这里要提出的是由于会员名在保存入数据库时用到了md5算法加密,而该算法是单向处理的程序,不能解密,所以对于返回的会员名字首先要进行一次md5加密,将加密后的密文再去和数据库中的内容进行比较,也在一定程度上保证了信息的安全。 usernamemd5 = md5(trim(request(username),32)set rs = conn.execute(select * from users where usernamemd5=&usernamemd5&)用户名 省去部分代码会员也可在“控制面板”中修改自己的信息,该页面也容易实现,原理同发表文章类似,在修改信息的表单页面中填好自己所要修改的信息,然后利用“post”方法将表单数据传递到usermanager_postings.asp文件里的处理程序中,创建recordset对象实例来访问数据库里的用户信息表,将新的信息在数据库中进行更新。图4-7 会员信息修改页面会员填好修改信息后,将调用后台处理文件,表单传递代码如下:在处理文件usermanager_postings.asp中自定义了两个功能函数,分别是修改会员资料的usermodify函数和修改会员密码的passwordmodify函数,使用哪个方法就在action行为后调用哪个函数,以实现功能。同理,修改密码也是根据表单传递的“post”方法将修改信息传递给处理程序调用passwordmodify函数,并创建recordset对象实例来访问数据库里的用户信息表,更新会员密码。以上核心代码如下:action = request(action)select case actioncase usermodify修改个人资料call usermodify()case passwordmodify修改密码资料call passwordmodify()case else以上功能查询数据库都是以当前返回的会员姓名加密后的密问做为查询条件更新数据库的。4.2.5 个人好友管理本论坛还为会员开设了添加好友或黑名单的功能。进入添加好友页面:图4-8 会员好友添加页面以上功能的实现是通过会员对添加好友还是添加黑名单的不同选择,调用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)if username = friendusernamemd5 then response.write“不能添加自己为好友。”sub addfriend()rsadd(checkuser) = the_falsersadd.updatesub addcheckuser()rsadd(checkuser) = the_truersadd.update4.2.6 文章搜索功能本论坛一个重要功能,即会员可以根据一些条件搜索论坛里的相关文章,十分方便,以下为该页面:图4-9 会员搜索页面该功能的实现是根据会员所选择的各种条件,在代码中由“input”的“ value”值决定。将这些选择的条件一起通过“post”方法传递给后台处理程序,处理程序将得到的这些参数作为sql查询语句的限定条件来决定搜索的范围,在代码中以“&”符号作为查询条件的连接字符。其中通过“关键词”传递的数据作为模糊查询的条件,语句中以“like”代码模糊查询。其他参数则作为唯一条件查询。这里的关键代码如下:关键词搜索作者搜索日期范围 :所有日期昨天以来省去部分代码请选择要搜索的论坛 全部论坛校园新闻省去部分代码当确定查询条件后,如选择“关键词搜索”,输入“我是”,然后“日期范围”定为30天:,查找范围为“全部论坛”,就会根据“关键词”,“30天”,“全部论坛”这3个条件进行查询,得到相关文章信息:图4-10 搜索结果页面:根据条件处理程序代码,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 * from bbs where rid=0 if search = key then sql = sql & and title like % & content &% else sql = sql & and username = & content & end if if forumid then sql = sql & and forumid = & forumid & if (timelimit ) then sql = sql & and day(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)set rs=server.createobject(adodb.recordset)sql=select * from messagers.open sql,conn,1,3rs.addnewrs(to_man)=manrs(from_man)=from_manrs(isread)=0rs.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国兔肉项目创业计划书
- 中国黑番茄项目创业计划书
- 中国桑寄生科项目创业计划书
- 中国康复辅具项目创业计划书
- 中国鹅雏项目创业计划书
- 中国毒蛇养殖项目创业计划书
- 个性化学习路径设计与跨文化适应性-洞察阐释
- 乙烯生产试题及答案
- 卡通春节传说启发幼儿的想象
- 蔡欢与张伟离婚协议书及财产分割及债务处理执行协议
- 吸附原理及应用课件
- JC∕T 2637-2021 水泥制品行业绿色工厂评价要求
- 商务西班牙语210句
- 上海市上海师大附中2023学年化学高二下期末调研模拟试题(含解析)
- 破壁灵芝孢子粉产品介绍课件
- 海洋生物活性成分的提取、分离与结构分析
- 应急管理概论-理论与实践电子教案完整版
- 水利ABC考试试题
- 医药代表培训医院微观市场管理教学课件
- 火力发电企业作业活动风险分级管控清单(参考)
- 表C.0.1 系统材料和设备进场检查、系统线路设计检查、安装质量检查记录表
评论
0/150
提交评论