首页 ASP在线论坛的设计与实现论文范文

ASP在线论坛的设计与实现论文范文

举报
开通vip

ASP在线论坛的设计与实现论文范文 摘要 论坛也称为BBS,BBS是Bulletin Board System的缩写,意思是电子公告版,一种在Internet上常见的用于信息服务的Web系统,它的主要服务是用来帮助浏览者相互沟通、吸引用户、服务用户的。他起源于20世纪80年代初,最初只是用于发布公告信息和讨论问题的在线交流平台,后来随技术的发展与网络的普及功能越来越强大。由于得到了广大网友的欢迎,越来越多的商业网站开始重视论坛,把论坛作为与用户交流的平台和在线技术支持与服务的平台。 本文主要采取ASP为开发技术,并使用了一些VBScript语言来...

ASP在线论坛的设计与实现论文范文
摘要 论坛也称为BBS,BBS是Bulletin Board System的缩写,意思是电子公告版,一种在Internet上常见的用于信息服务的Web系统,它的主要服务是用来帮助浏览者相互沟通、吸引用户、服务用户的。他起源于20世纪80年代初,最初只是用于发布公告信息和讨论问题的在线交流平台,后来随技术的发展与网络的普及功能越来越强大。由于得到了广大网友的欢迎,越来越多的商业网站开始重视论坛,把论坛作为与用户交流的平台和在线技术支持与服务的平台。 本文主要采取ASP为开发技术,并使用了一些VBScript语言来实现论坛基本功能。为了简化架设的实现,采取Microsoft公司的Access作为数据库平台,这样在单机上架设一个简单的论坛几乎不需要安装任何程序。本文设计的流程是从系统的需求分析开始,确定系统的流程与设计,到模块的划分,再到数据加结构的设计,最后开始每个模块的编程与开发。 关键字:BBS,论坛,贴子 Abstract The Forum is also known as BBS, BBS is an acronym for Bulletin Board System, which means the electronic version of the bulletin, on the Internet in a common Web services for information systems, its main service is to help visitors communicate with each other to attract Users of the service users. He originated in the early 1980's, initially announced for the information and discuss issues on-line exchange platform, along with the technology and the popularization of networks more and more powerful features. As a result has been welcomed by the majority of users, an increasing number of commercial sites paying attention to the Forum, the Forum as a platform for exchanges with users and online technical support and services platform. This article taken for the development of ASP technology, and used some of the VBScript language to achieve the basic functions of the Forum. In order to simplify the realization of the set to take Microsoft's Access database as a platform for such a stand-alone in the forum to set up a simple almost do not need to install any program. In this paper, the design process from the beginning of systems analysis to determine the processes and systems design, divided into modules, to increase the data structure design, the beginning of the end of each module of programming and development. Keyword: BBS, a forum post 2第一章 系统功能设计 31.1 引言 31.2 需求分析 51.3 功能设计 71.4 扩展功能设计 9第二章 系统架构与数据库设计 92.1 功能模块的划分 122.2 数据库设计 122.2.1 需要建立的数据表 132.2.3 数据库表结构的详细设计 25第三章 基本设计 253.1 论坛首页设计 273.2 数据库连接函数 28第四章 模块的实现 284.1 用户模块 284.1.1 用户的登陆 304.1.2 用户的注册 334.1.3 浏览其他用户信息 344.2 版面与公共信息模块 344.2.1 版面浏览 354.2.2 公共信息模块 364.3 帖子模块 364.3.1 发布、修改、删除帖子 394.3.2 帖子浏览模块 414.3.3 帖子搜索模块 444.4 管理人员模块 444.4.1 系统参数设置 454.4.2 用户授权 454.4.3 数据库的备份与还原 47第五章 论坛的架构 475.1 安装环境和参数设置 495.2 运行论坛 50第六章 结论 51参考文献 52致 谢 53附录A ASP的介绍 第一章 系统功能设计 1.1 引言 随着网络的越来越普及,人们越来越关于这样一种交流平台――论坛。很多商业网站都开设自己论坛来提供交流和服务,也有很多的个人网站和个人论坛的出现,论坛已经不光是一种交流平台,甚至是成为了实现自我价值的一个舞台。正因为论坛越来越重要,所以论坛的维护也变成了一种职业,而更好的维护则需要从设计这个层面来了解和进行。 在论坛里大家最熟悉的就是用户浏览论坛中已有的内容,针对别人的主题展开讨论,也可以发表自己的观点供大家品评。同时为了防止用户发布一些不健康不合法的内容,需要有管理人员来对这些内容进行删除、修改。而且用户想在论坛发布信息则要求他注册,这样来控制用户发布信息和方便管理者操作用户的信息。论坛也要有多个版面和分区,用来区分各种帖子的内容范畴,方便整理和管理。所以论坛的基本功能就是要实现用户的数据库管理和帖子的数据库管理,以及怎么样让这些数据库和网页的操作联系起来。 1.2 需求分析 要设计一个一个论坛,首先要分析论坛里需要那些内容,以及各种内容之间的关系。 首先列出论坛常用的名词:用户、版面、公共信息、帖子、主题、积分、称号、版主、注册信息、管理员、系统参数。 对于以上名词可以精简。主题是帖子的一个特例、积分和称号是用户的一个属性、版主是增加了权限的用户,注册信息是用户的具体属性。 所以具体的对象有:用户、版面、公共信息、帖子、管理员、系统参数。 具体的操作包括:管理员对用户、帖子、版块的管理;客人和用户的对版块、帖子的浏览;客人的注册;用户的发帖、回帖、搜索等操作。 把具体的对象和具体的操作相联系,我们可以归结出论坛基本操作的流程图,如图1-1。 图1-1 论坛基本功能流程图 图1-1中个将具体的对象和操作直观的表达了出来,为了更具体的细化对象和操作的关联,用来划分开发的模块,我们将对象与对象之间的关联可以建立出一张表,对象如表1-1。 表1-1 各对象间的关联表 用 户 版 面 公共信息 帖 子 管理人员 系统参数 用  户 注 册 修 改 浏 览 联 系 浏 览 浏 览 发 布 浏 览 发 布 修 改 删 除 特殊操作 √ × 版  面 √ × × × √ × 公共信息 √ × × × √ × 帖  子 √ × × × √ × 管理人员 删 除 授 权 添 加 删 除 修 改 添 加 删 除 修 改 添 加 删 除 修 改 × 设 置 系统参数 × × × × √ × 表1-1中的对象是单向关联,是指左侧对象对上方对象的活动。×表示没有关联,√表示存在单向关联。通过以上设计,论坛需要些什么以及所需要的对象之间存在着怎么的关系就有了基本的概念。 1.3 功能设计 表1-1中用户关联的对象是自身、版面、公共信息、帖子。分别根据用户与这些对象的联系给出一个明确的菜单,如表1-2。 表1-2 用户功能列表 功能名称 说明 用户注册 用户在论坛填写必要信息后就可以注册为注册用户,并能在登陆后对注册信息进行更改 用户登陆  注册后的用户可利用用户名和密码在论坛登陆 浏览其他用户信息  用户注册后可以查看其他用户的公开信息 与其他用户联系  可以在论坛内给其他用户私下留言,或直接发送邮件等 浏览版面  用户可以看到以列表形式展现的版面信息和版面说明 浏览发布公共信息  未登陆的用户可以浏览公共信息,登陆后可以发布允许范围内的公共信息 浏览帖子  用户可以以列表形式浏览帖子主题及其全部内容 发布修改删除帖子  用户在登陆后可以发布帖子、修改自己的帖子,被给予版主权限后还可以编辑、修改、删除权限范围内的其他用户帖子 对帖子特殊操作  主要针对版主权限用户,对帖子进行置顶、加精华等特殊操作,是帖子主题不同于其他主题 版面、公共信息、帖子都没有和其他对象的关联,都属于被动的对象,是被其他对象所操作的,因此针对它们的功能主要是有其他对象产生。版面和帖子是有一定关系的,可以看作是对帖子内容的归类,类似文件夹与文件的关系,有时候可以认为版面是帖子的一个属性。 对于管理员的功能,应该认为管理员是论坛的特殊群体,工作是设置论坛参数规则和维护论坛的正常运转。管理员可以和所有对象产生关联,所以其功能设定也很丰富,如表1-3。 表1-3 管理员功能列表 功能名称 说明 用户删除  对于一些蓄意破坏的用户,删除其身份,不允许其存在 用户权限  对于一个具有管理能力的用户给予一些特殊的权限,让他们在权限范围内帮助管理和维护论坛 版面管理  版面是论坛的枝干,要设定论坛需要的合适版面,让论坛的功能更明细,分类更 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 ,方便大家的浏览 公共信息管理  公共信息是向用户展现论坛状态的部分,由于信息的普遍性,其删除和修改权限需要由管理人员来完成 帖子管理  帖子是论坛的叶子,是基本数据库,反映了论坛使用者和管理者的水平,所以需要管理人员的全权管理来规范其内容 设置系统参数  系统参数包含的内容很多,直接关系到论坛的正常运行,包括网址在内的各种参数全部要由管理人员统一设置和变更 对于管理员和用户功能关系可以细化成以下几个相关用例图。 论坛设置参数,可以把设置一组参数作为一个方法,也可以把设置一个参数作为一个方法,如图1-2。 图1-2 论坛对象的相关用例图 各个版块有浏览列表和管理两个操作,管理方法又包括了创建、修改和删除这3个子方法,如图1-3。 图1-3 版块对象的相关用例图 帖子有浏览、发帖、回帖、搜索和管理5种方法,浏览方法又可以分列表和查看2个子方法,管理方法又可分编辑、删除、置顶、转移、加精华5个子方法,如图1-4。 图1-4 帖子对象的相关用例图 用户类有注册、登陆和管理3个方法,管理方法又分为添加、删除、设置权限3个子方法,如图1-5。 图1-5 用户对象的相关用例图 这样,表1-2和1-3就分别有了各自的归属对象。 论坛一般存在两种用户:注册用户和管理员。用户的权限是向下覆盖的,即上级权限包含下级权限。这样论坛的基本功能就可以从各种需求中筛选出来了,即发帖、浏览帖子、回帖。基本功能就是构成论坛系统的必要功能,具备这些功能的Web系统即是论坛。 1.4 扩展功能设计 具备了发帖、浏览帖子、回帖的Web系统就构成论坛了,但是这样的论坛很简单,没有吸引力,用户使用起来也不会很舒服,无论是作为商业还是个人论坛都是没有竞争力的。所以需要为其添加一些更人性化的功能使内容更丰富。 用表格形式列出可能的扩展功能,如表1-4。 表1-4 扩展功能列表 功能名称 说明 用户控制自己的信息 用户可控制自己的信息是否公开 用户登陆添加验证码  登陆时需输入验证码,如登陆信息错误则重新生成验证码。这样可以防止一些软件偷取用户名和密码 站内短信  让两个用户能在论坛内更方便的交流 帖子 评价 LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载  给予用户对一个帖子评价好坏的功能 帖子发布添加多媒体  如可在帖子内使用表情图片、插入flash、音乐等功能 帖子类别多样化  让用户可以发起投票、买卖等功能的帖子 帖子收藏  在论坛中加入搜索但效率却不一定很高,对于好的帖子为了方便用户以后更方便找到这个帖子,可以让用户收藏帖子 用户等级  建立一个荣誉体系,对于对论坛贡献大的用户给予一定的荣誉称号或者高的论坛等级 论坛情况显示  让用户直接看到一些论坛统计数据,如主题总数、在线人员等 数据备份  论坛最重要的就是数据库,但数据库系统的安全并不是100%的,所以为了论坛能持续发展,需要定期对论坛数据库进行备份 非法言论过滤  对于一些非法言论或不良词汇可以在论坛进行过滤设置,一旦有人使用也会被过滤掉而不至于造成不良影响 非法IP限制  对于一个蓄意捣蛋的用户,限制他的IP不能访问论坛,但这个有很大的局限性,一般情况下用处不会很大 添加了以上功能,论坛就显得更具有亲和力了,而且也更具有实用性。 第二章 系统架构与数据库设计 2.1 功能模块的划分 模块的划分主要是按每一个对象的操作来归类。论坛操作的对象在第一章里归纳为用户、版面、公共信息、帖子、管理员、系统参数这6个对象,所以就要针对这6个对象划分功能模块。 (1) 用户:有两个模块,一个是用户注册、登陆、修改信息等功能组合,是用户对自身的操作;另一个是管理人员对用户进行删除、授权的操作;如表2-1。 表2-1 用户功能模块列表 模块 模块包含的功能 用户模块  用户注册  用户登陆  浏览其他用户信息  与其他用户联系  用户控制自己的信息  用户登陆添加验证码  用户等级 管理人员模块  用户删除  用户授权 (2) 版面:有两个模块,一个是浏览模块,一个是管理模块。如表2-2。 表2-2 版块功能模块列表 模块 模块包含的功能 版面浏览模块  浏览版面 版面管理模块  版面管理 (3) 公共信息:将用户发布和浏览公共信息的功能划分为一个模块,对象是用户对公共信息的操作;管理员对公共信息的操作划分为另一个模块。如表2-3。 表2-3 公共信息功能模块列表 模块 模块包含的功能 公共信息显示模块  浏览、发布公共信息 公共信息管理模块  公共信息管理 (4) 帖子:帖子是论坛的基本,其功能是最多最复杂的,但仍然可以分为两个模块,根据操作对象来区分。如表2-4。 表2-4 帖子功能模块列表 模块 模块包含的功能 帖子模块  浏览帖子  发布、修改、删除帖子  对帖子特殊操作  帖子评价  帖子发布增加多媒体  帖子类别多样化  帖子收藏  帖子搜索 帖子管理模块  帖子管理  帖子移动(批量) (5) 管理员:管理员主要是对其他对象进行操作,是对其他模块的操作人员,同时系统参数设置模块的功能也可以划分进来。如表2-5。 表2-5 管理员管理功能模块列表 模块 模块包含的功能 管理员管理模块  设置系统参数  数据备份  非法言论过滤  非法IP限制 通过以上分析,论坛的模块划分也就完成了。但如果要把整个论坛系统完整的架构出来,还要分析模块与模块之间的关系,把零散的功能模块用一条主线串联起来。对于论坛系统来说,联系各个模块的主线是使用者的权限,用户能使用论坛的哪些功能是由用户的权限决定的,论坛的每个功能都与相应的权限对应。同一类用户使用的功能模块。是以使用者为中心连接起来的。另外,操作同一类事物的功能模块,也是相互关系的。 浏览模块与发帖回帖模块、管理帖子模块关联,是由论坛的系统流程决定的;管理版块模块与浏览模块关联,是有帖子与版块的父子关系决定的,帖子依附与版块,先有版块后有帖子,帖子必须发表在某个版块中;管理用户模块与注册登陆模块关联,是由同一类对象用户决定的,注册后获得论坛的身份,成为用户,所有的用户需要接受管理员的管理,用户登陆证明自己在论坛中的身份。分析了这些关系,我们可以得到论坛系统的整体架构,如图2-1。 图2-1 论坛整体架构图 对于用户使用的模块成为前台模块,管理员使用的模块称为后台模块。其划分如图2-2。 图2-2 功能模块划分 2.2 数据库设计 论坛系统信息的储存一般是在文件或者数据库中,相比之下数据库要简单高效,能对论坛进行更好的控制,也能对 资料 新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单 提供一些严正和保护。所以目前流行的论坛都是使用的数据库系统。使用数据库的首先就是要设计数据库的表结构,一个设计良好的数据库结构可以提高效率、方便维护,而且对于可能的扩充也会留有余地。 2.2.1 需要建立的数据表 为了更方便操作和维护,建立的数据表名都使用相关含义的因为单词,为了区别于数据库中可能出现的其他非表内容,在给每个表名加上一个标识。根据对论坛功能的分析,可以建立16个数据表,如表2-6。 表2-6 论坛数据表 序号 表名 说明 1  Admin_T  管理员信息表 2  Bbs1_1  帖子信息表 3  BbsNews_1  公共信息表 4  Board_T  版面信息表 5  BookMark_T  收藏夹信息表 6  Friend_T  用户好友列表 7  Help_T  帮助信息表 8  Log_T  论坛日志表 9  Message_T  短消息信息表 10  Online_T  在线用户表 11  Setup_T  系统信息表 12  Topic_T  论坛主题信息表 13  Upfile_T  文件上传表 14  User_T  用户信息表 15  Vote_T  投票信息表 16  VoteUser_T  投票用户表 有些表是可以独立的,但大多数表都是存在关联的。其关联一般都是通过主线用户相关联,或者是用户ID,或者是用户的其他信息。所以也可以看到主线用户的列表是相关数据项目最多的。 2.2.3 数据库表结构的详细设计 首先是用户信息表,用户信息是相关信息最多的表。如表2-7。 表2-7 用户信息表(User_T) 序 号 字 段 名 字段类型 说 明 备 注 1 UserID COUNTER 用户编号 Key 2 UserName VARCHAR(50) 用户名 Not null 3 UserPassword VARCHAR(20) 密码 Not null 4 UserEmail VARCHAR(255) 电子邮件 Not null 5 UserPost INTEGER 发帖数 6 UserTopic INTEGER 发布主题数 7 UserSign VARCHAR(255) 用户签名 8 UserSex BYTE 性别 9 UserFace VARCHAR(255) 头像 10 UserWidth INTEGER 头像宽 11 UserHeight INTEGER 头像高 12 JoinDate DATETIME 注册时间 Not null 13 LastLogin DATETIME 最后登陆时间 14 UserLogins INTEGER 登陆次数 Not null 15 UserViews INTEGER 信息被浏览次数 16 UserClass VARCHAR(20) 用户级别 17 UserWealth INTEGER 现金货币 18 UserEP INTEGER 经验值 19 UserCP INTEGER 魅力值 20 UserPower INTEGER 威望值 21 UserDel INTEGER 被删主题数 22 UserIsBest INTEGER 精华帖子 23 UserTitle VARCHAR(50) 头衔 24 UserBirthday VARCHAR(50) 生日 续表2-7 序 号 字 段 名 字段类型 说 明 备 注 25 UserQuestion VARCHAR(50) 密码问题 Not null 26 UserAnswer VARCHAR(50) 密码答案 Not null 27 UserLastIP VARCHAR(30) 最后登陆IP 28 UserPhoto VARCHAR(255) 用户照片 29 UserFav VARCHAR(255) 用户好友分组 30 UserInfo LONGCHAR 用户其他信息 31 UserSetting VARCHAR(255) 用户设置 32 TitlePic VARCHAR(50) 标题图片 33 UserHidden BYTE 是否隐身 Not null 34 UserMsg VARCHAR(30) 用户消息 35 UserTaday VARCHAR(250) 今日信息 在用户信息表里保存的是所有在论坛注册的用户的信息,用户编号是用户在论坛中的唯一标识。其实用户名也是不可重复的,但是使用编号作为主键可以让查找起来更加方便,提高效率,而且编号也是与其他表关联的主要字段。密码和密码答案是在用户忘记密码时验证身份的保证,所以设置为不能为空。用户名和密码是登陆的唯一识别,邮件是为了方便联系和某些可能的服务需要,所以也设置为非空。 表2-8是论坛中的版面信息表。 表2-8 版面信息表(Board_T) 序 号 字 段 名 字段类型 说 明 备 注 1 BoardID INTEGER 版面编号 Key 2 BoardType VARCHAR(50) 版面名称 3 ParentID INTEGER 上级版面编号 Default 0 4 ParentStr VARCHAR(250) 上级版面名称 5 Depth SMALLINT 版面层数 6 RootID INTEGER 主版面编号 7 Child INTEGER 子版面编号 8 Orders INTEGER 显示顺序 续表2-8 序 号 字 段 名 字段类型 说 明 备 注 9 Readme VARCHAR(255) 介绍 10 BoardMaster VARCHAR(100) 版主 11 PostNum INTEGER 发帖数量 12 TopicNum INTEGER 主题数量 13 IndexIMG VARCHAR(255) 论坛图象 14 TadayNum INTEGER 今日发帖数 15 BoardUser VARCHAR(255) 状态 16 LastPost LONGCHAR 最后一帖 17 Sid INTEGER 签名标识 18 Board_Setting LONGCHAR 版面设置 19 Board_User VARCHAR(250) 版面用户 20 BoardTopStr VARCHAR(255) 置顶主题信息 版面信息表中依然是使用了版面编号做主键,一般都会用编号作为主键,这样效率要更高些。上级版面编号是为了方便分层次找到各级版面。发帖数量、主题数量是指本版面的所有发帖数量和主题数量,而上级版面的数量是包括下级版面的所有发帖数量和主题数量的,今日发帖数和最后一帖的规则也相同。版面置顶主题信息所包含的是该版面置顶的主题的编号。与版面相关最密切的是帖子和主题,表2-9是论坛的主题信息表。 表2-9 论坛主题信息表(Topic_T) 序 号 字 段 名 字段类型 说 明 备 注 1 TopicID COUNTER 主题编号 Key 2 Title VARCHAR(250) 标题 Not null 3 BoardID INTEGER 版面编号 4 PollID INTEGER 投票表编号 5 LockTopic INTEGER 是否锁定 6 Child INTEGER 回复数量 7 PostUserName VARCHAR(50) 发帖用户名 8 PostUserID INTEGER 发帖用户编号 续表2-9 序 号 字 段 名 字段类型 说 明 备 注 9 DateAndTime DATETIME 发帖时间 10 Hits INTEGER 点击数 11 Expression VARCHAR(20) 状态 12 VoteTotal INTEGER 投票总数 13 LastPost VARCHAR(250) 最后一帖 14 PostTable VARCHAR(8) 发帖内容表 15 Istop BYTE 是否置顶 16 LastPostTime DATETIME 最后发帖时间 17 Isbest BYTE 是否精华 18 Isvote BYTE 是否投票 19 TopicMode BYTE 主题模式 20 Mode INTEGER 模式 表2-10是帖子信息表。 表2-10 帖子信息表(Bbs1_T) 序 号 字 段 名 字段类型 说 明 备 注 1 AnnounceID COUNTER 帖子编号 Key 2 ParentID INTEGER 上级帖子编号 Not null 3 BoardID INTEGER 版面编号 Not null 4 UserName VARCHAR(50) 发帖用户名 Not null 5 PostUserID INTEGER 用户ID Not null 6 Topic VARCHAR(255) 标题 7 Body LONGCHAR 帖子内容 8 DateAndTime DATETIME 发帖时间 9 Lengh INTEGER 内容长度 10 RootID INTEGER 主题编号 11 Layer INTEGER 层数 12 Order INTEGER 排序号 续表2-10 序 号 字 段 名 字段类型 说 明 备 注 13 Isbest BYTE 是否精华 14 IP VARCHAR(40) 发帖用户IP 15 Expression VARCHAR(255) 状态 16 LockTopic INTEGER 主题锁定状态 17 Signflag BYTE 签名标识 18 Emailflag BYTE 电子邮件标识 19 Isagree VARCHAR(250) 评价 20 Isuoload BYTE 是否有附件 21 Isaudit BYTE 是否有音频 22 PostBuyUser LONGCHAR 购买此帖的人 23 Ubblist VARCHAR(250) UBB标识使用编号 表2-11是投票信息表。 表2-11 投票信息表(Vote_T) 序 号 字 段 名 字段类型 说 明 备 注 1 VoteID COUNTER 投票编号 Key 2 Vote LONGCHAR 投票内容 3 VoteNum LONGCHAR 每项投票的数量 4 VoteType INTEGER 投票类型 5 LockVote INTEGER 锁定投票 6 Votes INTEGER 投票人数 7 TimeOut DATETIME 截止时间 8 UArticle INTEGER 用户文章 9 UWealth INTEGER 现金货币 10 UEP INTEGER 经验值 11 UCP INTEGER 魅力值 12 UPower INTEGER 威望值 表2-12是投票用户表。 表2-12 投票用户表(VoteUser_T) 序 号 字 段 名 字段类型 说 明 1 ID COUNTER 编号 Key 2 VoteID INTEGER 投票编号 3 UserID INTEGER 用户编号 4 VoteDate DATETIME 投票日期 5 VoteOption VARCHAR(50) 投票选项 以上4个表是紧密关联的。为什么单独建立主题信息表而不把主题当成帖子的特例来筛选,是因为主题会有很多回复,而在论坛帖子搜索时如果搜索要过滤一次帖子将会速度很慢,而且用户浏览主题时也不必要看到帖子的全部内容。表2-9里用到了4个外键,如果在其他表中该字段没有的数据,在主题信息表中也是不能有的。发帖用户名和发帖用户编号来源于用户信息表,可以算是数据冗余,是在查询用户发帖时具有更高的效率。 表2-10也包含了4个外键,其中主题编号是用来关联主题信息表的。层数 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 的是该帖子是主帖还是从帖,排序数是对同一层次的帖子进行排序的。签名标识和电子邮件标识是记录用户是否在此帖中开放自己的签名和电子邮件。 表2-11记录了投票类帖子的投票部分的内容。由于投票内容和帖子信息不一样,所以单独建立一张表。后面几个U开头的字段是限制字段,可以对于投票的用户做一些资格上的限制,防止新用户反复注册投票。 表2-12记载了没个投票用户的投票情况。投票编号和用户编号都是外键。投票选项字段和表2-11中的投票内容字段想关联。 接着设计管理员信息表,如表2-13,记载了管理员的信息。 表2-13 管理员信息表(Admin_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID COUNTER 管理员编号 Key 2 Username VARCHAR(50) 用户名 3 Password VARCHAR(50) 用户密码 4 Flag Memo 权限字段 5 LastLogin DATETIME 投最后登陆时间 续表2-13 序 号 字 段 名 字段类型 说 明 备 注 6 LastLoginIP VARCHAR(50) 最后登陆IP地址 Key 7 Adduser VARCHAR(50) 用户信息表中的用户名 管理员信息表和用户信息表是有关联的,外键是用户信息表里的用户名,所以论坛的管理人员也是论坛的注册用户。这样可以让管理人员在修改论坛参数后可以很直观的看到修改后的状态。 公共信息表记载的是论坛中发布的公共信息,与版面等信息是关联的。如表2-14。 表2-14 公共信息表(BbsNews_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID COUNTER 编号 Key 2 BoardID INTEGER 版面编号 3 Title VARCHAR(50) 标题 4 Content LONGCHAR 内容 5 Username VARCHAR(50) 发布用户名 6 Addtime DATETIME 发布时间 7 Bgs VARCHAR(100) 背景音乐 表2-14中版面编号和发布用户名是外键,但版面编号可以为0,表示是在论坛首页发布的信息。背景音乐是让大家读枯燥的公告时有亲切感,不至于觉得无聊。 收藏夹信息表是针对用户的一个信息表,如表2-15。 表2-15 收藏夹信息表(BookMark_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID COUNTER 编号 Key 2 Username VARCHAR(50) 用户名 3 url VARCHAR(100) 收藏的网页地址 4 Topic VARCHAR(100) 帖子的主题 5 Addtime DATETIME 添加时间 收藏夹是为了给用户带来方便的,这里收藏的是网页的地址,其实也可以做成收藏主题的编号,但因为可能收藏版面等容易编号混乱。 短消息信息表记录用户之间的短消息,见表2-16。 表2-16 短消息信息表(Message_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID COUNTER 编号 Key 2 Sender VARCHAR(50) 发送者 3 Incept VARCHAR(50) 接受者 4 Title VARCHAR(100) 标题 5 Content LONGCHAR 内容 6 Flag INTEGER 阅读标记 7 SendTime DATETIME 发送时间 8 DelR INTEGER 接受者删除标识 9 DelS INTEGER 发送者删除标识 10 IsSend INTEGER 已发送标识 短消息是用户之间私下交流的内容,所以必须保留两者之间的信息。发送和接收者都是用户信息表关联的外键。删除标识设置两个是防止一方删除操作后另一方看不到的情况。 用户的好友信息表见表2-17。 表2-17 用户好友列表(Friend_T) 序 号 字 段 名 字段类型 说 明 备 注 1 F_ID COUNTER 好友编号 Key 2 F_username VARCHAR(50) 用户名 3 F_friend VARCHAR(50) 好友用户名 4 F_Addtime DATETIME 添加时间 5 F_mod BYTE 好友类型 6 F_userID INTEGER 用户编号 用户好友列表是用户用来相互交流的,是论坛感觉更人性化。记录好友用户名是因为用户往往记得这个好友名字却不记得编号,所以这里用用户名做记录而不是编号。 在线用户表是显示即时在先的用户,可以方便用户见看到在线情况而更及时的交流。如表2-18。 表2-18 在线用户表(Online_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID DOUBLE 编号 Key 2 Username VARCHAR(50) 用户名 3 Userclass VARCHAR(20) 用户类型 4 Stats VARCHAR(250) 用户状态 5 IP VARCHAR(40) 当前IP 6 Actforip VARCHAR(40) IP来源 7 Startime DATETIME 开始时间 8 Lastimebk DATETIME 最后操作时间 9 BoardID INTEGER 版面编号 10 Browser VARCHAR(250) 浏览器类型 11 ActCome VARCHAR(50) 来源 12 UserID INTEGER 用户编号 13 Userhidden INTEGER 是否隐身 这里的主键是DOUBLE类型,是因为用户的活动很多,数据量存在溢出的可能。用户名、编号和类型都是来自用户信息表的外键。浏览器类型记录了浏览器和操作系统的类型。 文件上传表是帖子表的一个附表,它记录了在帖子中的附件等信息,见表2-19。 表2-19 用户信息表(User_T) 序 号 字 段 名 字段类型 说 明 备 注 1 F_ID COUNTER 编号 Key 2 F_AnnounceID VARCHAR(50) 帖子编号 3 F_BoardID INTEGER 版面编号 4 F_UserID INTEGER 用户编号 5 F_Username VARCHAR(50) 用户名 6 F_Filename VARCHAR(250) 文件名 7 F_FileType VARCHAR(10) 文件类型 8 F_Type SMALLINT 文件类型编号 续表2-19 序 号 字 段 名 字段类型 说 明 备 注 9 F_FileSize INTEGER 文件大小 10 F_Readme VARCHAR(250) 文件说明 11 F_Download INTEGER 下载次数 12 F_ViewNum INTEGER 浏览次数 13 F_DownUser LONGCHAR 下载用户 14 F_Flag SMALLINT 文件标识 15 F_AddTime DATETIME 添加日期 16 F_Viewname VARCHAR(255) 显示名称 文件上传表记录了用户上传附件的内容。用户名、用户编号、版面编号等都是外键。文件名字段由于用户上传的文件可能同名,所以采取系统自动命名的方式,缺点是如果同一个文件分包上传,则下载后需要重新命名后才能恢复原文件。文件类型是文件真正的类型,而类型编号是论坛文件类型,表示下载与显示。 帮助信息表是很重要的表,是用来介绍整个论坛的使用的,见表2-20。 表2-20 帮助信息表(Help_T) 序 号 字 段 名 字段类型 说 明 备 注 1 H_ID COUNTER 帮助编号 Key 2 H_ParentID INTEGER 上级编号 3 H_Title VARCHAR(250) 标题 4 H_Content LONGCHAR 内容 5 H_Type BYTE 类型 6 H_Stype INTEGER 后台类型 7 H_begimg VARCHAR(100) 背景图片 8 H_Addtime DATETIME 添加时间 帮助信息表是个独立的表,帮助信息对于论坛是很重要的,帮助文件写得好,用户就会上手快,论坛就会更有亲切感。虽然现在的网络用户对论坛都并不陌生,但良好的帮助文件依然可以体现出论坛在设置上的到位。因为帮助文件分用户和管理员的,所有添加一个后台类型来区别帮助文件的显示位置。 论坛日志表是用来记录论坛行为的,一旦论坛出现了问题,可以通过这个表来跟踪一些活动,分析出问题的所在。见表2-21。 表2-21 论坛日志表(Log_T) 序 号 字 段 名 字段类型 说 明 备 注 1 L_ID COUNTER 日志编号 Key 2 L_AnnounceID INTEGER 帖子编号 3 L_BoardID INTEGER 版面编号 4 L_Touser VARCHAR(50) 访问页面 5 L_Username VARCHAR(50) 访问用户名 6 L_Content VARCHAR(255) 日志内容 7 L_AddTime DATETIME 添加时间 8 L_IP VARCHAR(50) 用户IP 9 L_Type BYTE 日志类型 为了保证日志记录信息的详实,因此日志表需要设计得很全面。帖子编号和版面编号是外键,记录了论坛中对帖子信息进行操作的信息,当非帖子操作时,这两个字段不是必须的。 系统信息表关系到整个论坛是否可以正常运行,是核心表,见表2-22。 表2-22 系统信息表(Setup_T) 序 号 字 段 名 字段类型 说 明 备 注 1 ID COUNTER 编号 Key 2 Forum_Setting LONGCHAR 论坛设置 3 Forum_Ads LONGCHAR 论坛广告 4 Forum_Badwords LONGCHAR 过滤词 5 Forum_rBadword LONGCHAR 注册过滤词 6 Forum_Maxonline INTEGER 最多在线人数 7 Forum_MaxonlineDate DATETIME 最多在线日期 8 Forum_TopicNum INTEGER 单页主题数 9 Forum_PostNum INTEGER 单页帖子数 10 Forum_TodayNum INTEGER 今日发帖数 续表2-22 序 号 字 段 名 字段类型 说 明 备 注 11 Forum_UserNum INTEGER 论坛用户数 12 Forum_YesterdayNum INTEGER 昨日发帖数 13 Forum_MaxPostNum INTEGER 最大发帖数 14 Forum_MAXPostDate DATETIME 最大发帖日期 15 Forum_LastUser VARCHAR(50) 最后注册用户 16 Forum_LastPost VARCHAR(255) 最后一帖 17 Forum_BirthUser LONGCHAR 过生日的用户 18 Forum_Sid INTEGER 论坛编号 19 Forum_Version VARCHAR(50) 论坛版本 20 Forum_NowUseBBS VARCHAR(8) 帖子信息表 21 Forum_IsInstall BYTE 是否被安装 22 Forum_Ad LONGCHAR 论坛广告 23 Forum_ChanName VARCHAR(50) 论坛名称 24 Forum_ChanSetting VARCHAR(250) 论坛设置 25 Forum_LockIP LONGCHAR 锁定的IP 26 Forum_Cookiespath VARCHAR(50) Cookie存储路径 27 Forum_Boards LONGCHAR 论坛版面 28 Forum_AlltopNum VARCHAR(250) 论坛置顶数 29 Forum_Pack VARCHAR(250) 超级管理员 虽然是核心表,但是每个字段的内容都很简单。论坛设置字段存储了论坛名称、地址、联系方式等。过滤词设置比较有用,当用户发表一些禁止的词汇时可以通过过滤让这些词汇不显示在论坛上。其他的一些字段都是记录了一些论坛的状态。 论坛的数据库是非常重要的,它决定了整个论坛最终的使用是否可行。 第三章 基本设计 3.1 论坛首页设计 当用户打开论坛时,首先看到的是论坛首页,用户从首页可以看到和论坛相关的内容,发帖数、用户数量和主要版面的情况等。首先这个页面应该尽量的美观,操作截面也要看起来简单易用而且具有实用性。 一般论坛的首页分4个部分,上面是论坛的顶部LOGO,一般这个要体现出论坛的一个主题;接着是论坛的导航部分,包括了用户状况和论坛了基本状况,且这两个状况应该左右分开;再下面就是论坛主题部分的各个版面信息;最下面就是论坛用户在线状况论坛当前的情况。 基本上可能变动大的只有版面部分,所以其他变动小的部分可以做成公用文件,让其他页面可以重用。这3部分不写在文件里,而是直接写进数据库中。如程序3-1。 程序3-1 首页公用程序
收藏本页
联系我们
论坛帮助
-=> 用户来访信息
您的真实IP是:{$userip}, 操作系统:{$system},浏览器:{$brw}
-=论坛在线情况 [{$showstr}][查看在线 用户位置]
目前论坛上总共有{$onlinenum} 人 在线,其中注册会员{$ousernum}人,访客{$gusernum}人。
{$BuildDate}创建以来,历史最高在线记录是{$maxuser}人同时在线, 发生时间是:{$maxusertime}
名单图例:{$piclist}

 没有新帖子            有新的 帖子             被锁定的论坛
首页里用到了很多“{}”包括的字符,里面的内容是变量,因为论坛信息会随一些操作而改变而不同的显示状态,这些信息将随这些状态的改变而改变成及时的真实的状态。这些是要与数据库连接的,所以下面将说明数据库的连接函数。 3.2 数据库连接函数 数据库连接在论坛运行中是必不可少的,把这部分单独做成一个函数,在需要的时候只需要调用这个函数就可以了,而不用每次去写连接程序,这种复用可以让操作更加方便快捷。 选择的Access作为数据库,功能不强大,不能让很多人连接,但是可以省掉很多设置,对机器要求也相对要低得多,适合用PC机架设论坛。ASP中与数据相关紧密的是ADO,要让ADO对象能存取数据库,最重要的东西是OLE DB和ODBC的驱动程序,必须具备对应数据库的其中一种驱动程序,ADO对象才能进行存取。因为根据Microsoft公司的说法,OLE DB驱动程序的执行效能比ODBC要好,所以选择用OLE DB驱动程序。 利用ADO的Connection来建立同数据库的连接。建立ADODB.Connection对象,使用此对象的Open方法打开数据库。用Access在论坛路径下建立一个数据库存储路径“data”,然后建立一个名为mybbs7.mdb的数据库,建立之前数据库设计中的表。利用Microsoft公司的OLE DB机制连接Access,用OLE DB不用建立ODBC就可以直接连接Access数据库。见程序3-2。 程序3-2 Access数据库连接 Sub ConnectionDatabase Dim ConnStr Db=”data/mybbs7.mdb” ConnStr=”Provider=Microsoft.jet.OLEDV.4.0”Data Source=”& Server.MapPath(db) Set conn=Server.CreateObject(“ADODB.Connection”) Conn.open ConnStr if Err Then Err.Clear Set Conn=Nothing Response.Write ”数据库连接出错,请检查连接字符串。” Response.End End if End Sub Sub声明了函数ConnectionDatabase,End Sub结束这个函数。Dim声明了变量ConnStr,这个变量是用来存储连接数据库信息的。变量Db声明了数据库文件所在的路径。为ConnStr赋值是声明OLE DB连接数据库的方式,Data Source后面跟的是数据库文件所在的路径。Server.MapPath是ASP内置Server对象一个函数,用来取得网站目录下文件的绝对路径。7~12行是一个判断错误的信息,如果连接出错,Asp的Err对象判断系统给出错误的存在,然后清除。 第四章 模块的实现 4.1 用户模块 4.1.1 用户的登陆 首先看用户的登陆。在用户信息表里用户名和用户密码字段是用来验证用户身份的,用这两个字段来写验证用户登陆的程序。 登陆页面命名为Login.asp,这个页面包含了输入用户名和密码、Cookie选项、和隐身登陆选项。隐身登陆只是一个判断登陆状态的标识。主要是验证用户身份和把用户信息写入Cookie。 首先看验证用户身份的程序,如程序4-1。 程序4-1 验证用户身份程序(Login.asp) sqlstr=" UserName='"&username&"'" Sql="Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex,UserFace, UserWidth,UserHeight,JoinDate,LastLogin,UserLogins,Lockuser,Userclass,UserGroupID, UserGroup,userWealth,userEP,userCP,UserPower,UserBirthday,UserLastIP,UserDel,UserIsBest, UserHidden,UserMsg,IsChallenge,UserMobile,TitlePic,UserTitle,TruePassWord,UserToday " Sql=Sql+" From [Dv_User] Where "&sqlstr&"" set rsUser=Mybbs.Execute(sql) If rsUser.eof and rsUser.bof Then ChkUserLogin=false Exit Function Else iMyUserInfo=rsUser.GetString(,1, "|||", "", "") rsUser.Close:Set rsUser = Nothing End If iMyUserInfo = "Mybbs|||"& Now & "|||" & Now &"|||"& Mybbs.BoardID &"|||"& iMyUserInfo &"||||||Mybbs" iMyUserInfo = Split(iMyUserInfo,"|||") If trim(password)<>trim(iMyUserInfo(6)) Then ChkUserLogin=false ElseIf iMyUserInfo(17)=1 Then ChkUserLogin=false ElseIf iMyUserInfo(19)=5 Then ChkUserLogin=false Else ChkUserLogin=True Session(Mybbs.CacheName & "UserID") = iMyUserInfo Mybbs.UserID = iMyUserInfo(4) RegName = iMyUserInfo(5) Article = iMyUserInfo(8) UserLastLogin = iMyUserInfo(15) UserClass = iMyUserInfo(18) GroupID = iMyUserInfo(19) TitlePic = iMyUserInfo(34) If Article<0 Then Article=0 End If 首先是一个查询用户身份的SQL语句,输入某个用户后将从数据表User_T中查找该用户。set rsUser=Mybbs.Execute(sql)一句是用来执行这条SQL语句,同时返回一个包含了查询信息的记录集。If rsUser.eof and rsUser.bof Then一句判断用户信息是否存在。如果不为空,就将把数据集的信息写入储存用户信息的字符串中。If trim(password)<> trim(iMyUserInfo(6)) Then一句判断用户密码是否和数据库中的用户密码相同。 Cookie是对于一些有限制注册用户才能看的页面用来识别是否登陆的。是由Web页服务器置于你硬盘上的一个很小的文本文件,一般不超过4KB。程序4-2是把用户信息写入Cookie的程序。 程序4-2 把用户信息写入Cookie(Login.asp) select case usercookies case "0" Response.Cookies(Mybbs.Forum_sn)("usercookies") = usercookies case 1 Response.Cookies(Mybbs.Forum_sn).Expires=Date+1 Response.Cookies(Mybbs.Forum_sn)("usercookies") = usercookies case 2 Response.Cookies(Mybbs.Forum_sn).Expires=Date+31 Response.Cookies(Mybbs.Forum_sn)("usercookies") = usercookies case 3 Response.Cookies(Mybbs.Forum_sn).Expires=Date+365 Response.Cookies(Mybbs.Forum_sn)("usercookies") = usercookies end select Response.Cookies(Mybbs.Forum_sn).path = Mybbs.cookiepath Response.Cookies(Mybbs.Forum_sn)("username") = regname Response.Cookies(Mybbs.Forum_sn)("userid") = Mybbs.UserID Response.Cookies(Mybbs.Forum_sn)("password") = TruePassWord Response.Cookies(Mybbs.Forum_sn)("userclass") = userclass Response.Cookies(Mybbs.Forum_sn)("userhidden") = userhidden Response是ASP的一个内置对象,Cookies是这个对象用来向浏览器写Cookie文件的集合。Cookies集合设置Cookie的值。若指定的Cookie不存在,则创建它,若存在。则设置新的值并且将旧值删除。Response.Cookies(Mybbs.Forum_sn).Expires=Date+1是用来保存用户选择的Cookie保存时间的,在选择时间内再次来论坛则可以不用再登陆了。 4.1.2 用户的注册 用户注册也关系到信息的验证,必须确定一些信息符合一定的规则和要求。用户注册后可以修改自己的信息和密码,如果忘记密码还有相关取回密码的操作。 首先就是用户的注册,命名为reg.asp,主要是对用户所填写信息的检测。主要包括字段是否为空,是不是满足长度、字符方面的要求;输入E-mail是否正确,主要判别是@字符是否存在和存在的位置;两次输入的密码是否一致;用户名是否已经存在,电子邮件是否被使用。 注册首先是要向数据库提交你所填写的信息,这些所填写的信息大多是表单的形式,可以使用Request.form()来获取表单内的文本框。Request是ASP的内置对象,Form是Request的一个获得表单的集合。 (1) 用户名的验证:在获取的同时就可以对文件长度等进行检测,使用Cint()函数进行强制执行整数运算判断是否在可接受的范围之内。 Cint(Mybbs.Forum_Setting(41)) or strLength(Request.form("name")) 0 or Instr(username,chr(32))>0 or Instr(username,"?")>0 or Instr(username,"&")>0 or Instr(username,";")>0 or Instr(username,",")>0 or Instr(username,"'")>0 or Instr(username,",")>0 or Instr(username,chr(34))>0 or Instr(username,chr(9))>0 or Instr(username,"")>0 or Instr(username,"$")>0 (2) 密码的验证:主要验证的是密码的长度,采用Len()函数,可以返回字符串中字符的个数。参数可以是字符串也可以是变量名。 If Request.form("psw")="" or len(Request.form("psw"))>10 or len(Request.form("psw"))<6 Then ErrCodes=ErrCodes+"
  • "+template.Strings(13) (3) 电子邮件的验证:邮件的地址一般是“用户名@域名”,采用VBScript的函数Split(),可以返回一个一维数组。在参数部分可以设置“@”为字符串的标识界限。用这个符号来拆分电子邮件地址,形成数组。UBound()函数返回了数组维数的最大可用下标。 Dim names,name,i,c Is ValidEmail=true Names=Split(email,”@”) If UBound(names)<>1 then Is VailEmail=false Exit function End If 而用户的注册信息如果是合法的则在提交注册信息后要将这个注册信息插入到数据库中去,可以使用Recordset对象。 set rs=Server.CreateObject(“ADODB.Recordset”) sql=”select * from [User_T] rs.open sql,conn,2,3 rs.addnew rs(“Username”)=username rs(“Userpassword”)=password rs(“UserEmail”)=useremail rs(“Userclass”)=userclass rs(“TitlePic”)=titlepic rs.update rs.close set rs=nothing 但光有Recordset对象没有Connection对象也没有用,Connection对象已经写入了连接数据库的函数Conn.asp。 ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db) Set conn = Server.CreateObject("ADODB.Connection") conn.open ConnStr set rs=server.createobject("adodb.recordset") sql="select * from [User_T] where username=’”&username&”’ rs.open sql,conn,1,3 在上面程序里,conn对象的功能是连接数据库,rs的功能是打开数据表User_T。而Connection对象的功能是连接数据库,连接程序如下: Sub ConnectionDatabase Dim ConnStr Db = "data/mybbs7.mdb" ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db) Set conn = Server.CreateObject("ADODB.Connection") conn.open ConnStr ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)一句分别设置了Provide参数和Data Source参数。 用户注册后要修改自己的信息。修改信息就是将原来用户的信息显示出来,待用户修改提交表单后更新数据库中的信息,这里同样要对用户新输入的信息进行检测,这个和用户注册部分的检测是一样的,只是没有了对用户名的检测。所以用户信息的修改的程序与用户注册是很相似的,只少了rs.addnew一句,另外在选取信息的时候的语句有所不同。 sql=”Select * from [User_T]” where userid=”& UserID 通过这一句可以准确的定位到用户的编号UserID的这条记录,这是利用了Recordset对象的查询功能,然后使用Recordset对象的写入功能,用rs.Update结束。 虽然用户的用户名不可以更改,但是用户的密码是可以更改的,这是用户身份验证的标识,同时也可以更改自己的密码提问和密码答案。这些更改也基本上和用户信息修改的程序相同,利用用户的编号取出用户的信息,验证用户的修改信息后更新数据库。 但是如果用户是忘记了密码而要取回,则就要调用到另外的一套程序。见程序4-3。 程序4-3 获得用户密码程序(Lostpass.asp) If request.Form("username")="" Then showerr template.Strings(6) Exit Sub Else username=replace(request("username"),"'","") End If If Mybbs.Forum_Setting(2)<>"0" Then Set Rs=Mybbs.execute("Select UserQuesion,userAnswer,Username,Usergroupid from [Dv_user] where username='"&username&"'") Else Set Rs=Mybbs.execute("Select UserQuesion,userAnswer,Username,Usergroupid from [Dv_user] where username='"&username&"' and UserGroupID>3") End If If rs.eof and rs.bof then showerr template.Strings(8) Exit Sub ElseIf rs(3) < 4 then showerr template.Strings(7) Exit Sub Else If rs(0)="" or isnull(rs(0)) Then showerr template.Strings(9) Exit Sub Else template.html(6)=Replace(template.html(6),"{$Quesion}",Rs(0)) template.html(6)=Replace(template.html(6),"{$username}",username) If Mybbs.forum_setting(81)="0" Then template.html(6)=Replace(template.html(6),"{$getcode}","") Else template.html(6)=Replace(template.html(6),"{$getcode}"," 验证码: "&Mybbs.GetCode()) End If Response.Write template.html(6) End If End If Rs.Close Set Rs=Nothing 这里是通过两步来完成取回密码的,第一步是验证用户名,第二步才是取回密码。 4.1.3 浏览其他用户信息 如程序4-4。 程序4-4 用户列表程序(dispuser.asp) UPSQL="update [Dv_user] set UserViews=UserViews+1 " SQL=" Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSign,UserSex, UserFace,UserWidth,UserHeight,UserIM,JoinDate,LastLogin,UserLogins,UserViews,Lockuser, Userclass,UserGroup,userWealth,userEP,userCP,UserTitle,UserBirthday,UserQuesion,UserAnswer, UserLastIP,UserPhoto,UserFav,UserPower,UserDel,UserIsBest,UserInfo,UserSetting,UserGroupID, TitlePic,UserHidden,UserMsg,IsChallenge,UserMobile From [Dv_User] " If ShowUserid="" Then UPSQL=UPSQL + " Where Username='"&UserName&"'" SQL=SQL + " Where Username='"&UserName&"'" Else UPSQL=UPSQL + " Where Userid="&ShowUserid SQL=SQL + " Where Userid="&ShowUserid End If Set Rs=Mybbs.Execute(Sql) If Rs.Eof And Rs.Bof Then Mybbs.AddErrCode(32) Exit Sub Else Mybbs.Execute(UPSQL) 'UserInfo=Rs.GetRows(1) SQL=Rs.GetString(,1, "@@@", "", "") Rs.Close:Set Rs=Nothing End if UserInfo=Split(Sql,"@@@") ShowUserid=Clng(UserInfo(0)) UserName=UserInfo(1) 前面的SQL语句和用户修改信息很相似,实际上就是修改用户信息的另外一种方法。Rs.GetString(,1, "@@@", "", "")这个方法是将Recordset作为字符串返回,Getstring可以有4个参数,这里只用到两个。因为浏览用户只需要从数据库中读取一条记录,所以这里的第二个参数为1,@@@是用来分割记录集字符串。使用这个方法会使读取记录的速度比较快,从而提高ASP的效率。 4.2 版面与公共信息模块 4.2.1 版面浏览 版面浏览是指版面的列表,版面有层次之分,一般以两层的方式显示。在一级版面下,依次显示子版面。可以使用几个函数来完成,如程序4-5。 程序4-5 版面浏览函数 ‘函数一(获得某版面下的子版面): Public Function ReloadBoardInfo(lBoardID) If lBoardID=0 Then Exit Function Dim Rs Set Rs=Execute("select BoardID,BoardType,ParentID,ParentStr,Depth,RootID,Child,readme, BoardMaster,PostNum,TopicNum,indexIMG,todayNum,boarduser,LastPost,Sid,Board_Setting, Board_Ads,Board_user,IsGroupSetting,BoardTopStr,BoardID As TempStr,BoardID As TempStr1, BoardID As TempStr2,BoardID As TempStr3,cid,BoardID As TempStr4 from Dv_board where BoardID="&lBoardID) If Not Rs.Eof Then Name = "BoardInfo_" & lBoardID Value = Rs.GetRows(1) Else '自动修正所有版面的boards数 Call ReloadAllBoardInfo() 'Response.Redirect "index.asp" End If Rs.Close Set Rs = Nothing End Function ‘函数二(自动修正所有版面的boards数) Public Sub ReloadAllBoardInfo() Dim Rs,Boards Set Rs=Execute("Select BoardID From Dv_Board Order By RootID,Orders") If Not Rs.Eof Then Boards=Rs.GetString(,-1, "",",","") Boards=Left(Boards,Len(Boards)-1) End If Rs.close:Set Rs=Nothing Execute("Update dv_Setup Set Forum_Boards='"&Boards&"'") ReloadSetupCache Boards,27 End Sub Value = Rs.GetRows(1)一句用到了GetRows()方法,其作用是将Recordset对象的多个记录检索到数组中。GetRows可以带3个参数,这里只用到了第一个参数。在调用了GetRows后,下一个未读取的记录就成了当前记录。如果没有其他记录,则EOF的属性将被设置成True。 4.2.2 公共信息模块 公共信息有两类,一类是可以在版面的顶端可以看到的论坛信息,一类是由用户发起的在各个版面的信息,他的功能类似于广播,称之为小字报。一般公告具有时效性,要求只有管理员才能发布,而版主可以在其负责的版区发布。小字报则可有各个会员发布,且版主可以管理这些小字报。发布公告和帖子的原理是一样的,而只需要识别用户的身份来判断是否有发布和管理权限。如程序4-6。 程序4-6 判断用户身份程序(announcements.asp) 程序一: Select case UserGroupID Case 4 Vipuser=True Case 3 Boardmaster=True Case 2 Superboardmaster=True Case 1 Master=True End Select 程序二: If Mybbs.Master Then Mybbs. Boardmaster=True ElseIf Mybbs. Superboardmaste Then Mybbs. Boardmaster=True ElseIF Mybbs.UserGroupID=3 And Not Trim(Mybbs. BoardmasteList)=”” Then IF InStr(“|”&lcase(Mybbs. BoardmasteList)&”|”,”|”&lcase(Mybbs.Membername)&”|”)>0 Then Mybbs. Boardmaste=True End If End If 注意UserGroupID和Mybbs.Membername两个变量,因为当用户登陆都其登陆信息会写如Cookie,这里面的变量信息就是从Cookie里面获得的。 4.3 帖子模块 一个论坛最重要的是数据,数据部分最重要的只有两个,一个是用户数据,另一个就是帖子数据。而帖子是一个论坛存在的根本,所以非常重要。 4.3.1 发布、修改、删除帖子 对于发布、修改和删除帖子,发布是重点,修改帖子和发布帖子是差不多的,而删除帖子只需要多数据库的帖子ID实行删除操作,相对也比较简单。发布帖子的功能很多,使用心情图片和表情图片,正文部分可以自己定义喜欢的格式,还有使用各种UBB代码。 帖子的正文部分可以通过一些代码插图图片、Flash等各种东西,而且可以自定义字体、格式、颜色等,让帖子看起来更丰富多彩。其实这里并没有提供HTML功能,而是用到了UBB码。UBB代码是HTML的一个变种,是Ultimate Bulletin Board(国外的一个BBS程序)采用的一种特殊的TAG。为了避免用户无意或有意的使用HTML代码对论坛进行攻击,一般论坛是禁止HTML代码的,但会开放一些自定义的Tag标签,类似与HTML中的Tag,这样就既可以使用一些等同于HTML代码的功能,又避免了论坛受到恶意的攻击。一般我们自定义的这些Tag叫做UBB代码。 (1) URL超级连接:直接输入http://bbs.emu618.com系统将直接创建超级链接。 [url]http://bbs.emu618.com[/url] 或者可以使用 [url=http://bbs.emu618.com]EMU618论坛[/url] (2) E-mail超级连接:在你的信息里加入电子邮件的超级链接,可以按下面的方式套用UBB代码。 [email]feilusaidi@hotmail.com[/email] (3) 粗体与斜体:可以使用[b][/b]来表示粗体,[i][/i]来表示斜体 (4) 列表:在信息里加入列表,按照下例套用UBB代码 [list] [*] firstline [*] secondline [/list] 如果要加入序列可以使用[list=A]或[list=1]就可以按照字母和数字来排序了。 (5) 加入图片:[img]图片地址[/img]可以在文章中插入图片。 (6) 引用信息:[quote]引用内容[/quote]可以插入引用的信息。 (7) 保持格式:如果需要帖入一些按一定格式排列的字符图可以使用[code]内容[/code],这样里面的内容会按照你帖入的格式严格排列。 (8) 彩色文字:[color=red]文字[/color]可以让文字变成彩色。这里red是论坛已经定义好的彩色列表,red=#FF0000,用户也可以自己定义其他非论坛定义的色彩。 以上是关于基本UBB代码的使用,而在实际操作时对于UBB代码也可以进行过滤,引用别人的发言时也可以使用直接引用选项,自动完成UBB操作。见程序4-7和4-8。 程序4-7 UBB过滤程序(post.asp) Function cutStr(str,strlen) Dim re Set re=new RegExp re.IgnoreCase =True re.Global=True re.Pattern="<(.[^>]*)>" str=re.Replace(str,"") set re=Nothing Dim l,t,c,i l=Len(str) t=0 For i=1 to l c=Abs(Asc(Mid(str,i,1))) If c>255 Then t=t+2 Else t=t+1 End If If t>=strlen Then cutStr=left(str,i)&"..." Exit For Else cutStr=str End If Next cutStr=Replace(cutStr,chr(10),"") cutStr=Replace(cutStr,chr(13),"") End Function 程序4-7的用处是过滤掉所有HTML代码的标记。 程序4-8 引用他人发言程序(post.asp) Function Ubb2Html(str) If Str<>"" And Not IsNull(Str) Then Dim re Set re=new RegExp re.IgnoreCase =True re.Global=True re.Pattern="(>)("&vbNewLine&")(<)" Str=re.Replace(Str,"$1$3") re.Pattern="(>)("&vbNewLine&vbNewLine&")(<)" Str=re.Replace(Str,"$1$3") re.Pattern=vbNewLine Str=re.Replace(Str,"
    ") re.Pattern="( )" Str=re.Replace(Str,"  ") re.Pattern="<\/I>" Str=re.Replace(Str,"") re.Pattern="( )" Str=re.Replace(Str," ") re.Pattern="<(\w+)( )+([^>]*)>" Str = re.Replace(Str,"<$1 $3>") If Request("reply")="true" Then re.Pattern="(
    以下是引用(.|\n)*<\/div>)" Str=re.Replace(Str,"") re.Pattern="(\[quote\]以下是引用(.|\n)*\[\/quote\])" Str=re.Replace(Str,"") re.Pattern="(\[quote\]\[b\]以下是引用(.|\n)*\[\/quote\])" Str=re.Replace(Str,"") End If Set Re=Nothing Ubb2Html = Str Else Ubb2Html = "" End If End Function 这两个程序都有<% Set re=RegExp %>这样的一句,RegExp储存有关正则表达式模式匹配结果的信息。此对象不能显示构造,用法是RegExp(“模式”[,”标记”])。模式表示正则表达式的文本,标记可以全定匹配(g)或忽略大小写的匹配(i)。 帖子的修改和发布是基本上相同的,不同的是修改时要取得原来帖子的全部内容,这些内容都储存在帖子信息表bbs1_T的Body字段。而删除帖子只需要对帖子信息表的相关帖子的ID进行删除操作,但要注意的是如果删除的是主题,则需要把与主题ID相关的帖子ID都进行删除,这里要进行一个筛选。 4.3.2 帖子浏览模块 帖子浏览模块部分最重要的是对数据库的操作,如帖子的分页列表、搜索等。帖子的分页程序见程序4-9。 程序4-9 帖子分页程序(list.asp) Function Show_List_Topic() Dim Cmd,limitime,SQL,Rs,i,TempStr,ti,TopicTempStr Dim Posttime If IsSqlDataBase=1 And IsBuss=1 Then Set Cmd = Server.CreateObject("ADODB.Command") Set Cmd.ActiveConnection=conn Cmd.CommandText="dv_list" Cmd.CommandType=4 Cmd.Parameters.Append cmd.CreateParameter("@boardid",3) Cmd.Parameters.Append cmd.CreateParameter("@pagenow",3) Cmd.Parameters.Append cmd.CreateParameter("@pagesize",3) Cmd.Parameters.Append cmd.CreateParameter("@tl",3) Cmd.Parameters.Append cmd.CreateParameter("@topicmode",3) Cmd.Parameters.Append cmd.CreateParameter("@totalrec",3,2) Cmd("@boardid")=Mybbs.BoardID Cmd("@pagenow")=page Cmd("@pagesize")=Cint(Mybbs.Board_Setting(26)) Cmd("@topicmode")=TopicMode If limitime="" Then Cmd("@tl")=0 Else Cmd("@tl")=limitime End If set Rs=Cmd.Execute Else Set Rs = server.CreateObject ("adodb.recordset") If Cint(TopicMode)=0 Then Sql="Select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal, lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode From Dv_Topic Where BoardID="&Mybbs.BoardID&" And IsTop=0 Order By LastPostTime Desc" End If Rs.Open Sql,Conn,1,1 End If Mybbs.SqlQueryNum = Mybbs.SqlQueryNum + 1 If Not (Rs.Eof And Rs.Bof) Then If IsSqlDatabase = 1 And IsBuss=1 Then SQL=Rs.GetRows(-1) Else If TopicNum Mod Cint(Mybbs.Board_Setting(27))=0 Then n = TopicNum \ Cint(Mybbs.Board_Setting(27)) Else n = TopicNum \ Cint(Mybbs.Board_Setting(27))+1 End If Rs.MoveFirst If page > n Then page = n If page < 1 Then page = 1 If page >1 Then Rs.Move (page-1) * Clng(Mybbs.Board_Setting(26)) End if If Rs.Eof Then Exit Function SQL=Rs.GetRows(Mybbs.Board_Setting(26)) End If 'TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastpostti me,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode Dim Showtitle,postusername With Response For ti=0 To Ubound(SQL,2) ‘显示帖子部分省略 Next SplitPageNum=Ubound(SQL,2)+1 SQL=Null If TopicNum Mod Cint(SplitPageNum)=0 Then n = TopicNum \ Cint(SplitPageNum) Else n = TopicNum \ Cint(SplitPageNum)+1 End If If action="batch" And Mybbs.GroupSetting(45)=1 Then Dim Forum_Boards,Board_Datas,BoardJumpList,ii,Depth Forum_Boards=Split(Mybbs.CacheData(27,0),",") ‘显示部分省略 End If If Forum_AllTopNum = 0 And ti = 0 Then Response.Write template.html(4) SQL=Null Rs.Close Set Rs=Nothing Set Cmd=Nothing End Function 看<% Set Cmd = Server.CreateObject("ADODB.Command") %>一句,这里用到了ADODB的Command对象,定义要对数据源执行的特殊命令,使用Command对象查询数据库并返回Recordset对象中的记录,以便执行大量的操作或对数据库结构进行操作。 为了提高页面的读取速度,帖子一般不会在一页里罗列出来,而是采用分页显示,让每页显示一定的帖子数。论坛的分页显示主要有两种方法,一种是将数据库中所有符合查询条件的记录一次性读入Recordset中,并存放在内存中,然后通过ADO Recordset对象所提供的几个专门支持分页处理的属性来管理分页处理;另一种方法是根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录读出显示。两种方法的区别在于前者要把所有记录都读入内存,如果记录很多的话,效率会比较低;而后者是先根据指示做判断再读入符合条件的一定数目的记录进内存,但如果访问人数多时,会造成很大负担。因为在一般情况下效率相差不大,而第一种方法更容易实现,所以一般采取第一种方法。在第一种方法中,进行ADO存取数据库时的分页显示,其实就是对Recordset的记录进行操作。Recordset对象表示基本表或命令执行结果的记录全集。任何时候Recordset都只将集合中的单个记录作为当前的记录引用。使用ADO时,将几乎全部使用Recordset对象来对数据进行操作。 4.3.3 帖子搜索模块 如果论坛的的帖子数据量比较大的时候,用帖子列表的方式来人为的寻找某帖子显然是很浪费时间的,这时要用到帖子搜索的功能。搜索最重要的是效率,这时就需要设计搜索需要的条件,使搜索达到最大效率。如图4-1。 图4-1 帖子的搜索 在图4-1里能看出,帖子的搜索,首先是有两种搜索方式,搜索作者或搜索主题的关键字。过滤的条件是三个,论坛版块、帖子日期和帖子所在数据表(如果帖子数量大的话,是可以分不同数据表储存的)。有了这些条件可以增加搜索的效率。搜索肯定要用到SQL的Select语句,那么关键就是ASP是如何操作SQL语句的。见程序4-10。 程序4-10 帖子搜索程序(Query.asp) Dim SearchUserID,Rs SqlColumn = "Select Top " & Cint(Mybbs.Forum_Setting(11))*SearchMaxPageList If stype=1 And (nSearch=2 or nSearch=3) Then SqlColumn = SqlColumn & " BoardID,RootID,Topic,Expression,UserName,PostUserID, DateAndTime,IsBest,LockTopic,Body,AnnounceID From " ElseIf stype=2 And pSearch=2 Then If IsSqlDataBase Then SqlColumn = SqlColumn & " T1.BoardID,T1.RootID,T1.Topic,T1.Expression, T1.UserName,T1.PostUserID,T1.DateAndTime,T1.IsBest,T1.LockTopic, T1.Body,T1.AnnounceID From " Else SqlColumn = SqlColumn & " BoardID,RootID,Topic,Expression,UserName, PostUserID,DateAndTime,IsBest,LockTopic,Body,AnnounceID From " End If ElseIf stype=3 Then SqlColumn = "Select Top 50 BoardID,TopicID,Title,Expression,PostUserName,PostUserID, DateAndtime,IsBest,LockTopic From " SqlColumn = "Select Top 50 BoardID,rootid,topic,Expression,username,postuserid, dateandtime,IsBest,LockTopic,Body,Announceid from " Else SqlColumn = SqlColumn & " BoardID,TopicID,Title,Expression,PostUserName, PostUserID,DateAndtime,IsBest,LockTopic From " End If 'Mybbs.Stats = template.Strings(2) Mybbs.Stats = template.Strings(4) If Trim(searchday)<>"" Then Mybbs.Stats = Mybbs.Stats & Replace(template.Strings(5),"{$searchday}", request("SearchDate")) Else Mybbs.Stats = Mybbs.Stats & template.Strings(6) End If Select Case stype Case 1 ‘省略部分 Case 2 Select Case pSearch Case 1 '标题 SqlColumn = SqlColumn & " dv_Topic Where "&searchboard&" "&searchday&" Title like '%"&keyword&"%' Order By TopicID Desc" Mybbs.Stats = Mybbs.Stats & template.Strings(10) Case 2 '内容,SQL全文索引 If Mybbs.Forum_Setting(16)<>"0" Then If IsSqlDataBase Then If Trim(searchboard)="" And Trim(searchday)="" Then SqlColumn = SqlColumn & stable & " T1 Inner Join ContainsTable("&stable&", body,'" & keyword & "'," & Mybbs.Forum_Setting(11)*SearchMaxPageList & ") As T2 ON T1.AnnounceID = T2.[KEY] Order By T1.AnnounceID Desc" ElseIf Trim(searchboard)="" Then SqlColumn = SqlColumn & stable & " T1 Inner Join ContainsTable("&stable&", body,'" & keyword & "'," & Mybbs.Forum_Setting(11)*SearchMaxPageList & ") As T2 ON T1.AnnounceID = T2.[KEY] Where "&Replace(Replace(searchday, "and",""),"DateAndTime","T1.DateAndTime")&" Order By T1.AnnounceID Desc" ElseIf Trim(searchday)="" Then SqlColumn = SqlColumn & stable & " T1 Inner Join ContainsTable("&stable&", body,'" & keyword & "'," & Mybbs.Forum_Setting(11)*SearchMaxPageList & ") As T2 ON T1.AnnounceID = T2.[KEY] Where "&Replace(Replace(searchboard, "and",""),"BoardID","T1.BoardID")&" Order By T1.AnnounceID Desc" Else SqlColumn = SqlColumn & stable & " T1 Inner Join ContainsTable("&stable&", body,'" & keyword & "'," & Mybbs.Forum_Setting(11)*SearchMaxPageList & ") As T2 ON T1.AnnounceID = T2.[KEY] Where "&Replace(searchboard, "BoardID","T1.BoardID")&" "&Replace(Replace(searchday,"and",""), "DateAndTime","T1.DateAndTime")&" Order By T1.AnnounceID Desc" End If Else SqlColumn = SqlColumn & stable & " Where "&searchboard&" "&searchday&" body like '%"&keyword&"%' Order By AnnounceID Desc" End If Mybbs.Stats = Mybbs.Stats & template.Strings(11) Else Response.redirect "showerr.asp?ErrCodes=
  • "&template.Strings(19)&"&action= OtherErr" End If End Select 程序里基本上都是在使用SELECT语句,在程序的第二行的代码是<% SqlColumn = "Select Top " & Cint(Mybbs.Forum_Setting(11))*SearchMaxPageList %>就有Select。这里的Select除了一般的语法外还用到了一些统计上的函数。使用语法如下。 Select 函数(栏位名称) From 表名 where 表达式 Select比较重要的函数有日期函数DateADD()和字符型函数CHAR()、REPLACE()、CAST()和CONVERT()。 在帖子搜索完成后,将搜索所取得的主题要形成一个帖子浏览列表,这部分和帖子的显示与浏览模块是基本上相同的,只是取出了需要帖子的ID重新生成一个ID序列。 4.4 管理人员模块 管理人员模块实际上其实是多个模块的组合,模块的功能都实现了的话,这里只是对这些功能进行限制。 4.4.1 系统参数设置 系统参数设置是后台设置,界面见图4-2。 图4-2 系统设置页面 在系统参数设置里对许多东西都进行了设置,这些东西都是网站必须的和公用的东西。如果不在这里储存,就要在每个页面都写出这些信息,如果一旦其中的某个需要修改,就要把所有的页面都修改一遍,这样工作量就会很大。现在把它们提取出来写,当需要时很容易地就能从数据库中取出来显示在页面上,如果出现变化,就很方便地可以修改了。系统参数程序基本上和用户注册修改信息部分是差不多的,从数据表从读出数据显示在表单,在修改后又把更新后的表单数据提交给数据库更新。 4.4.2 用户授权 用户授权也是在后台进行的,授权的方式是设置好论坛等级,对于不同的论坛等级设置不同的权限字段,然后授权只需要授予用户相应的论坛等级,如版主、超级版主等就可以达到授权的目的。基本上只牵涉到用户表某些字段的操作与系统参数设置。 用户授权的主要目的就是让用户参与到论坛中来,同时也减少管理员的负担,让论坛显得更加规范。 4.4.3 数据库的备份与还原 数据库对于一个论坛来说是至关重要的,当论坛运行一段时间后,某些关键数据如果不小心删除了,或者数据库出现了异常错误数据被破坏,如果有数据库的备份就能很好的恢复了。所以这是论坛日常管理中最重要也是最不可缺少的一部分,其他的参数设置设置好后一般都不会有太多更改,但是数据库的备份却要定期的执行一次。 Access数据库的备份与还原如程序4-11。 程序4-11 数据库备份程序(admindata.asp) Dim fso, Engine, strDBPath,JET_3X strDBPath = left(dbPath,instrrev(DBPath,"\")) Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(dbPath) Then fso.CopyFile dbpath,strDBPath & "temp.mdb" Set Engine = CreateObject("JRO.JetEngine") If boolIs97 = "True" Then Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp1.mdb;" _ & "Jet OLEDB:Engine Type=" & JET_3X Else Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb" "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp1.mdb" End If fso.CopyFile strDBPath & "temp1.mdb",dbpath fso.DeleteFile(strDBPath & "temp.mdb") fso.DeleteFile(strDBPath & "temp1.mdb") Set fso = nothing Set Engine = nothing 这里用到了在处理文件上的重要的对象——FSO,也就是FileSystemObject对象,其作用是提供对计算机文件系统的访问。 Scripting. FileSystemObject 以下代码说明了如何使用FileSystemObject对象返回一个TextStream对象,此对象可以被读取或写入。 Set fs=CreatObject(“Scripting. FileSystemObject”) Set a=fs.CreateTextFile(“e:\testfile.txt”,True) a.WriteLine(“This is a test”) a.Close CreateObject函数返回FileSystemObject对象(fs)。使用CreateTextFile方法创建一个文件,作为TextStream对象(a),然后使用WriteLine方法在此文件中写入一行文本。最后使用Close方法刷新缓冲区并关闭文件。 第五章 论坛的架构 5.1 安装环境和参数设置 需要的安装软件和环境如下: (1) Windows 2000或者Windows XP (2) Internet Information Services 5.0以上版本 将论坛的源代码解压到硬盘某个目录下,打开我的电脑的管理。打开服务和应用程序,选择Internet信息服务,再选择网站。这时一般会有一个默认网站,可以编辑默认网站的属性,也可以重新创建一个新的网站。,如图5-1。 图5-1 计算机管理界面 打开网站的属性页面,注意以下几个属性:网站、主目录、文档。 网站属性见图5-2。 图5-2 网站属性 这里的描述部分是可以自定义的,即创建的网站名。IP地址是选择外界访问用的地址,如果是服务器的话外界可以直接通过域名访问。不配置IP的话,本机可以通过Localhost访问或者127.0.0.1的IP访问。TCP端口可以自己设定,设定端口后访问地址应该是“IP地址:端口”,如果是80端口则可省略端口部分。 主目录属性见图5-3。 图5-3 主目录属性 内容来源选择此计算机上的目录,本地路径设置成代码存档目录。但比如如果这里设置成“F:\”,而不是“F:\BBS”的话,访问的时候在IP或域名后面需要加“/BBS”来访问。这里的配置选项里要把里面选项设置中的“起用父路径”点上。 文档属性见图5-4。 图5-4 文档属性 这里如果有多个默认文档必须要让index.asp处于第一个的位置,其他的放下移或删除处理。 5.2 运行论坛 配置完以上参数就可以访问论坛了。打开IE浏览器输入之前设置的IP地址,或者直接属于localhost,就可以进入论坛主页面。这里要注意数据库的连接文件是CONN.ASP文件,如果要更改数据库的名称,或者更改数据库路径都要在这个配置文件里更改相应的设置。 访问论坛首页如图5-5。 图5-5 论坛首页 使用管理员登陆后,可以看到管理选项,进入时要再次输入密码。这个密码可以和登陆密码不同。管理员用户名为admin,密码为admin888,后台密码相同。可以更改论坛相关显示信息。 第六章 结论 本文主要说明了ASP论坛的设计和Access数据库的设计和实现,运用的ASP Web数据库技术具有强大的功能和普遍的适用性。ASP技术发展已经有许多年了,现在也有各种其他的更安全稳定的技术,如JSP、PHP等。ASP作为可以直接应用于页面的技术仍然有他的优势,在各种网络应用领域依然很有实用性,也是Web设计的基础技术。Access作为数据库的功能是相当差的,但是在作为最为流行的Office系统的组件,拥有使用简单,平台架设方便和普及性强的特点,作为一般学生论坛或者个人论坛其功能也是足够的。本文的主要是说明如何设计数据库已经如何将页面和数据库进行连接,而且这里的数据库也可以更换成SQL等高级数据库进行应用,只需要修改数据库的连接函数就可以做到数据库的转换。通过研究和设计工作,对于Web编程有了更深入的了解,对掌握和运用ASP和数据库的应用方面也有了更进一步的提高,对于今后的对于其他技术的深入和研究也打好了良好基础。 参考文献 [1]欧阳周,刘道德。理工类学生专业论文导写。长沙:中南大学出版社 2000 [2]刘小华,任廷奇 毕业论文写作指导 北京 科学出版社 2004 [3]黄明,梁旭 Asp信息系统设计与开发实例 北京 机械工业出版社 2004 [4]黄斯伟。HTML4.0动态网页制作。北京:人民邮电出版社, 1999 [5]孙丽君, 吴红普. ASP编程基础及应用实例集锦 [M]. 北京: 人民邮电出版社. 2001 [6]陈会安. ASP网页制作彻底研究[M]. 北京:人民邮电出版社. 2001 [7] Richard Anderson Chris Blexrud. ASP 高级编程[M]. 北京: 机械工业出版社.2001 [8]李瑞旭. ASP实例教程[M]. 北京: 中国电力出版社. 2001 [9]冯能山, 李其艺. --轻松学习ASP网络实用编程 [M]. 北京: 清华大学出版社 .2002 [10]邓文渊, 陈惠贞, 陈俊荣. ASP与网页数据库设计 [M]. 北京 中国铁道出版社. 2001 [11]张海藩.软件工程导论(修订版). 北京:清华大学出版社 2002 [12]张海藩,牟永敏。面向对象程序设计实用教程。 北京 清华大学出版社 2001 致 谢 光阴似箭,四年的大学生活转眼即将过去。这四年是我人生中最重要的阶段。在这期间,我幸运的遇到了许多好老师,在他们的帮助和指导下,我学到了大量专业知识及学习方法,这些知识和方法为我日后进一步学习打下坚实基础。在此,我要感激所有教过我,给予我帮助的老师们,正是他们无私奉献精神和诲人不倦的育人态度,才使我顺利成长。 感谢大学四年中所有的任课老师,感谢他们对我学习上的帮助和影响,他们特色的教学风格,渊博的专业知识,高度的责任感给我留下深刻印象。 感谢大学四年和我一同走过的朋友们,与他们一起学习,生活,让我拥有许多难忘时光。我们共同经历成长中的一点一滴,无论是欢笑还是泪水,我都将铭记一生。 本论文是在指导老师指导下完成的。在本人毕业设计过程中,。父母的鼓励和支持帮助作者克服了许多困难,使得本科学业顺利完成。作者向邓老师及本人父母表示衷心的感谢!另外,同窗好友蒋鹏也给予了大力的帮助和悉心的指导,借此机会,一并向他表示感谢! 感激大学四年在这里度过,它给我留下了最美好的回忆。 附录A ASP的介绍 ASP的全称是Active Server Pages,是Microsoft推出的应用于Web应用程序开发的技术,被描述为“一个服务器的脚本环境,在这里可以生成和运行动态的、交互的、高性能的Web服务应用程序”。它不是一种编程语言,也不是一种开发工具,而是一种强大的技术框架。 ASP的工作方式是客户端提交请求或申请,服务器接收请求或申请后进行服务器处理,服务器把处理完成的结果传送或返回到客户端,即请求—接收/处理—响应的过程。 ASP提供了6个内置对象:Request、Response、Session、Server、Application、ObjectContext,这些对象可以直接在页面中生成且在脚本使用时不需要创建,它们构成了ASP的基本框架。 1 Request对象 Request对象是用来处理HTTP请求的,包含各种集合、属性和方法。当客户端使用浏览器通过HTTP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 向Web服务器发请求的时候,Request对象检索传递给Web服务器的项,利用这个对象的集合、属性和方法可以获得浏览器请求到服务器的各项信息和数据。 一般主要是把用户在浏览器端输入的信息和其他相应的信息传递给服务器,各个对象被传递到服务器后使用Request对象接收。表A-1里列出了Request对象包括的内容和解释。 表A-1 Request对象的集合、属性和方法 名  称 作用/意义描述 集  合 ClientCertificate 从Web浏览器发布请求中获取验证字段。如果Web浏览器使用SSL3.0/PCT1协议,也就是说,它使用以https://开头的URL,而不是http://连接服务器及服务器请求验证,则浏览器将发送验证字段。如果没有发送验证,集合将返回EMPTY。只有先将Web服务器配置为要求客户端验证,然后才能使用集合 续表1 名  称 作用/意义描述 Cookies  允许用户检索在HTTP请求中发送的Cookie的值 Form  检索使用POST方法的表格传送到HTTP请求正文中的表格的值 QueryString  检索HTTP查询字符串中变量的值。HTTP查询字符串由(?)后的值指定。几个不同的进程都可以生成查询字符串 ServerVariables  检索客户端预定的环境变量 属  性 TotalBytes  指定客户端在请求正文中发送的总字节数,该属性只允许读 方  法 BinaryRead  获取作为POST请求的一部分而从客户端传送到服务器的数据。此方法获取来自客户端的数据并将其储存在SafeArray的数组中,且包含维数和边界信息,此方法用于在底层访问数据 在表A-1所列的项中最常用的是Form、QueryString、ServerVariables三项。服务器是如何接收来自客户端的信息和数据呢?Form容器提交数据的方式有两种,可以使用method参数来确定,当method被设置为post时,就使用Form来接收。 前台是一个命名为testDataRec的容器,它的提交方式为post,里面含有两个input对象,分别为MyName和Mypwd,当用户输入信息后,单击发送按钮,就可以提交给后台接收程序,这个接收程序页必须命名为前台Form容器里的“receiveMe.asp”。 QueryString,当前台的程序使用提交方式为get时,将后台的接收端中的Form修改成QueryString即可。 ServerVariables项接收到的主要是客户端相对应的系统或其他一些相应信息。它的内容和格式是确定的,包含了很多项。常用项一般是URL、PATH_INFO、SCRIPT_NAME,通过request. ServerVariables(“URL”)能够获得用户的浏览器地址框里的地址,其实和使用PATH_INFO、SCRIPT_NAME相差不错。 2 Response对象 Response对象同Request对象可以说是一对姐妹,它负责HTTP响应,把Web服务器的处理结果向客户端发送输出,然后在客户端通过浏览器把结果显示给用户。他也是6个内置对象中包含集合、属性、方法最多的一个对象。Response对象的内容见表A-2。 表A-2 Response对象的集合、属性和方法 名  称 作用/意义描述 集  合 Cookies 设置Cookie的值。若指定的Cookie不存在,则创建它;若存在,则设置新的值并将旧的删去 属  性 Buffer 指示是否缓冲页输出。当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了Flush或End方法后,服务器才将响应发送给客户端。服务器将输出发送给客户端后就不能再设置Buffer属性了。因此,应该在ASP文件的第一行调用 CacheControl 设定或显示缓冲储存器的属性,默认值为Private。当设置成Public时,代理服务器可以缓冲由ASP产生的输出 Charset 指定该网页的字符集,将字符集名称附加到Response对象中content-type标题的后面 ContentType 指定响应的HTTP内的内容类型,默认为text/HTML Expires 指定在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页过期之前又回到此页,就会显示缓冲区中的版本。将此参数设置为0可使缓存的页立即过期 ExpiresAbsolute 设定缓存于浏览器中的页的到期日期和时间。若未指定时间,则在当天午夜过期;若未指定日期,则在脚本运行当天的指定时间到期 IsClientConnected 它指示自上次调用Response.Write之后,客户端是否与服务器相连 PICS 向响应标题的PICS标签字段添加值 Status 指定服务器返回的状态行的值。HTTP规格中定义了Status值 方  法 AddHeader 用指定的值添家HTML标题。该方法常常响应添加新的HTTP标题。一旦标题被添加,将不能删除 AppendToLog 将字符串添加到Web服务器日志条目的末尾。可以在脚本的同一部分中多次调用该方法。每次调用时都会在当前条目中添加指定字符串 续表2 名  称 作用/意义描述 BinaryWrite 不经任何字符转换就将指定的信息写到HTTP输出。该方法用于写非字符串信息 Clear 删除缓冲区中所有HTML输出。但Clear方法只删除响应正文而不删除响应标题。可以用该方法处理错误情况。如果将Response.Buffer设置为True,则该方法将导致运行错误 End 使Web服务器停止处理脚本并返回当前结果。文件中剩余的内容将不被处理 Flush 立即发送缓冲区中的输出。如果将Response.Buffer设置为True,则该方法将导致运行错误 Redirect 浏览器尝试连接其他URL Write 将指定的字符串输出写到当前的HTTP输出 这个对象中最常用的是Write、Redirect、End和Clear,Write是使用得最多的。Response.Write后面就是所要输出显示的信息,可以使用括号,也可以直接书写。 Redirect则是直接让浏览器马上重定向到指定的URL地址。Response的这个方法是立即执行并生效的,在这个后面的所有脚本程序都不再被执行。 End和Clear的使用正好是相反的。End的使用是将执行到Response.End的程序全部执行完成,在这个语句后的程序将不再执行;Clear则是将执行到Response.Clear的内容全部被清除掉,不做处理了。 3 Session对象 Session对象是用来建立Web服务器同客户端的联系,并维持这一联系的,其实是一个管理会话的对象,不仅可以保持管理会话,而且在此会话中,可以为此次会话存储特定用户会话所需要的属于它自己的个性化的信息,当用户在应用程序的Web页之间跳转时,存储在Session对象中的所有这些变量都将不会丢失,而是在整个用户会话中一直存在下去。 当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。Session对象的内容见表A-3。 表A-3 Session对象的集合、属性、方法和事件 名  称 作用/意义描述 集  合 Content 包括所有未使用标记而为该会话建立的项目。此集合可用于确定指定会话项的值或遍历集合并检索出会话中所有项目的列表 StaticObject  包含Session对象范围中用标记创建的所有对象。可用于确定对象特定属性的值,或用于遍历集合并获取所有对象的全部属性 属  性 CodePage 决定将被用以显示动态内容的代码页,代码页是一个可以包括数字、标点符号、以及其他字母的字符集。 LCID 决定用于显示动态内容的位置标识 SessionID 返回用户的会话标识。在创建会话时,服务器为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回 Timeout 以分钟为单位为该应用程序的Session对象指定超时时限。如果用户在该时限内不刷新或请求网页,则该会话将终止 方  法 Abandon 删除所有存储在Session对象中的对象并释放这些对象的源。如果未明确的调用Abandon方法,一旦会话超时,服务器就将删除这些对象 事  件 Session_OnStart 在服务器创建会话时发生,在这时候可以完成会话或其他的相关设置 Session_OnEnd 在会话被终止或超时时发生,利用此对象可以在会话结束后释放资源 当用户通过浏览器在输入正确的用户名和密码成功登陆后,服务器使用Session来记录这个用户输入的用户名,以方便显示;而且在用户推退出登陆后,会将用户的会话Session清除掉。Abandon是Session唯一的方法。可以清除用户的Session对象并释放用户所占用的资源。 4 Server对象 Server对象提供了访问服务器的方法和属性,它同服务器的关系非常紧密,但其中大多数方法和属性是为了实用程序的功能服务的。其包含内容见表A-4。 表A-4 Server对象的属性和方法 名  称 作用/意义描述 属  性 ScriptTimeout 指定脚本在结束前最多可运行多长时间。当处理服务器组件时,超时限制将不再生效 方  法 CreateObject 创建服务器组件的实例,在默认情况下,由Server. CreateObject方法创建的对象具有页作用域。这就是说,在当前ASP页处理完成之后,服务器将自动破坏这些对象 HTMLEncode 对指定的字符串应用HTML编码 MapPath 指定的相对或虚拟路径映射到服务器上相应的物理目录上 URLEncode 将URL编码规则,包括转义字符,应用到指定的字符串 这个对象中常用的是HTMLEncode和MapPath。HTMLEncode可以把HTML编码都作为字符显示出来,MapPath用来获得服务器端的绝对路径。 5 Application对象 Application对象是在特定的应用程序中用于为所有的用户共享信息的饿,基于ASP的应用程序同所在的ASP文件一样在一个虚拟目录及其子目录中定义。为了确保多个用户无法同时改变某一属性,可以共享Application对象。Application对象使用Lock和Unlock方法保证了共享信息管理与操作的可靠性和完备性。其包含的内容见表A-5。 表A-5 Application对象的集合和方法 名  称 作用/意义描述 集  合 Contents 是由所有通过脚本命令添加到应用程序的项目组成的集合。可以使用Contents集合获取给定的应用程序作用域的项目的列表或指定一个特殊项目为操作对象 StaticObjects 包含所有的在Application对象范围中使用标记创立的对象。用户可以使用该集合确定某对象的指定属性的值或遍历集合及检索所有静态对象的所有属性 续表5 名  称 作用/意义描述 方  法 Lock 阻止其他客户修改存储在Application对象中的变量,以确保在同一时刻仅有一个客户可以修改和存储Application变量。如果用户没有明确调用Unlock方法,则服务器将在ASP文件结束或超时后即解除对Application对象的锁定 Unlock 使其他客户端可以使用Lock方法锁住Application对象后,修改存储在该对象中的变量。如果未调用显示该方法,则Web服务器将在ASP文件结束或超时后即解除对Application对象的锁定 6 ObjectContext对象 ObjectContext对象在ASP里不经常用到,主要是用来提交或放弃一项有Microsoft Transaction Server管理的事物的。包含的内容见表A-6。 表A-6 ObjectContext对象的方法和事件 名  称 作用/意义描述 集  合 SetAbort 取消被ASP初始化的事物 SetComplete 忽略脚本中以前调用过的任何SetAbort方法 方  法 OnTransactionAbort  如果事务异常终止,就会发生OnTransactionAbort事件。当OnTransactionAbort事件发生时,如果脚本中有OnTransactionAbort子程序,则IIS将执行它 OnTransactionCommit  OnTransactionCommit事件在一个已处理的脚本提交后发生。OnTransactionCommit事件发生时,如果脚本中有OnTransactionCommit子例程,则IIS将处理该子例程 附录B ADO对象 ADO是Web编写程序中同数据库打交道最重要的方式。利用ADO可以连接数据库、操作数据库、查询数据库;它可以同多种数据库进行操作。 1 ADO对象简介 ADO对象包含的对象如表B-1所示。 表B-1 ADO内容 名  称 描  述 对  象 Connection对象 与数据存储相连的对象 Command对象 对数据存储执行命令的对象 Recordset对象 从数据存储中提取的数据集,可以更改(增加、更新和删除)记录集中的记录,上下移动记录,过滤记录并只显示部分内容等 Record对象 访问记录集 Stream对象 用于访问节点的内容 集  合 Field集合  拥有与记录集或记录关联的Field对象 Praameters集合  仅被Command对象使用,确定在存储命令中的参数 Errors集合  包含因运行命令而引起的上一次ADO或OLEDB提供者错误的详细内容,只能被Command对象访问 Properties集合  将属性组成一个集合。可以使之能动态的根据不同的数据提供者而随时改变 2 ADO的习惯用法 ADO连接操作,要操作数据库必须先同数据库建立连接。ADO同数据库建立连接的程序如程序B-1。 程序B-1 ADO连接操作 Set objConn=CreateObject("ADODB.Connection") '建立连接对象 objConn.open DataBaseStr 'DataBaseStr为建立数据库的字符串 当ADO同数据库建立连接后,一般使用Record对象操作,我们可以把数据库操作语句传入到ADO对象Connection,然后使用执行方法,完成对数据库的操作并返回操作结果,结果集就生成了一个Record对象,如程序B-2所示。 程序B-2 ADO的Record操作 Set objConn=CreateObject("ADODB.Connection") '建立连接对象 objConn.open DataBaseStr 'DataBaseStr为建立数据库的字符串 Set objTempRS=objConn.Execute(SQL) '生成Record对象 3 ADO的Recordset对象 记录集对象的方法及功能说明见表B-2。 表B-2 RecordSet内容 名  称 描  述 Move 它的格式是RS.MoveNUM,若NUM是正数则向前移,若是负数则向后移 MoveFirst 移动到当前记录的第一行记录 MoveLast 移动到当前记录的最后一行记录 MoveNext 用来把当前记录移动到记录集的下一行记录 MovePrevious 用来把当前记录移动到记录集的上一行记录 4 ADO中的事务 ADO中事务的处理同数据库完全一样,使用同数据库建立连接的Connection对象,当你建立完成Connection对象后,可以使用Connection对象中的事务处理,如程序B-3。 程序B-3 数据库事务处理 Set objConn=CreateObject("ADODB.Connection") '建立连接对象 objConn.open DataBaseStr 'DataBaseStr为建立数据库的字符串 oConn.Begintrans '开始启用事务 '中间处理过程 oConn.Committrans 上面的实例中,介绍了Connection对象处理事务的方法,建立数据库连接后,直接使用Begintrans标识开始事务,在执行完成操作后,使用Committrans标识事务结束。 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 浏览版块 浏览帖子 回 帖 搜 索 客 人 注册登陆 用 户 管 理 员 发 帖 管理用户 管理帖子 管理版块 用户相关参数 基本参数 论坛分页参数 设置论坛参数 管理员 用户 删除版块 修改版块 管理版块 管理员 创建版块 浏览列表 浏览 搜索 回帖 发帖 编辑 加精华 置顶 转移 删除 管理帖子 用户 管理员 浏览 管 理 员 回帖 发帖 管理版块 设置权限 管理用户 添加 删除 管理用户 用户 管理员 管理帖子 用  户 选择版块 浏览帖子 注册登陆 发帖回帖 搜  索 论坛系统 论坛系统 论坛系统 用户模块 版面浏览模块 公共信息显示模块 帖子模块 用户管理模块 版面管理模块 公共信息管理模块 帖子管理模块 管理人员管理模块
    本文档为【ASP在线论坛的设计与实现论文范文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
    该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
    [版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
    本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
    网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    下载需要: 免费 已有0 人下载
    最新资料
    资料动态
    专题动态
    个人认证用户
    北溟愚鱼
    暂无简介~
    格式:doc
    大小:1001KB
    软件:Word
    页数:0
    分类:工学
    上传时间:2018-09-22
    浏览量:1