前言:现在网上的论坛到处都有,但不知您是否遇到过这样的情况:在杂乱无章的讨论信息中来寻找自己想要的内容,是一件很费费时费力的事情,到后来,您就都不想去看什么论坛了。那么我们能不能对自己网站论坛的内容增加审核功能呢?即所有网友发到论坛的文章,并不立即被显示出来,必须经过站长或者版主审阅之后,认为有价值,有必要推荐给其它网友的,就发表出来。否则就删掉了,免得浪费空间,搞得有点像精华区的意味,这样你的论坛比起一般的论坛来,能够提供给为明确有益的内容。放到你的网站上,应该能够吸引更多的网友来访问。这个设想当然可以实现,下面我就简单介绍如何制作。
注:由于本文适用于对access数据库、html、asp有一定了解的读者。
一、论坛结构分析
通过上面的功能需求分析,我们可以将论坛的制作分为四大部分:
(1) 网友注册和管理模块:因为引入了站长或者版主,在论坛中就必须能够对其进行身份验证。这个模块的功能,就是管理注册的网友,并能够提供相关的查询。比如,查询指定作者的所有发表的文章,查询当前发表文章最多的十个网友,等等。如果你的论坛不是很大,这个模块可以省略为只带有版主身份验证的功能,而去掉那些关于注册,查询的部分。
(2) 文章显示模块:显示所有版主审核过的,觉得值得推荐的文章。
(3) 发表文章模块:为注册网友提供发表见地的地方,发表后等待版主审阅。
(4) 文章审阅模块:版主对所有网又发表但未经审阅的文章进行处理,已决定是发表还是删除。
了解了具体的功能需求后,就可以按模块的开始论坛的设计了。当然,这些模块的只是在功能上对论坛结构的划分,实际上并不能够完全的把他们独立出来进行设计。对于这种较小的应用,也没有必要进行完全的模块化设计,在良好的规划下直接写程序代码或许来的更为简单一些。
对于论坛实现起来有一般两种方法:用文件或者数据库。相对而言,用数据库要简单高效一些,能够对论坛进行更好的控制,也能够对资料提供一些验证和保护。这儿我使用的是access数据库,对于一般的中小型的应用,access应该是能够胜任的。
从上面的分析可以知道应该有四个表,下面我给出每个表的结构。
(1)作者表(用来存放作者讯息):
id:文本类型,必填。是网友代号。
密码:文本类型,必填。
昵称:文本类型,必填。
email:文本类型,必填。
职务:数字类型,必填。-1代表普通网友,0代表站长。大于0的数字代表版主,并且号码是相应的看板表中某个板的id,表示是那个板的版主。
文章数:数字类型,必填。网友发表的文章总数。
姓名:文本类型,可选。
性别:文本类型,可选。
电话:文本类型,可选。
(2)内容表(用来存放具体文章内容和相关讯息):
id:自动编号,并为其设置索引,以加快搜寻的速度。
看板id:数字类型,来自看板列表,表示文章所属看板。
主题id:数字类型,来自主题表,表示文章所属主题。
作者id:文本类型,来自作者表,表示文章的作者。
日期:日期/时间类型,预置初值为函数now(),系统在添加这一条字段时,将自动取系统当前时间为其值。
标题:文本类型。文章的标题。
发表:是/否类型,为"真"时表示文章已经通过审阅,可以发表;为"否"表示文章尚待审阅。
推荐度:数字类型,文章的推荐程度。
内容:备注类型,文章的具体内容。
点击次数:数字类型,文章的点击次数。
(3)看板列表(用来存放有关看板的讯息):
id:自动编号,同样的,也为其设置了索引。
名称:文本类型,看板的名称。
板主:文本类型,看板版主的id。
主题数:数字类型,看板中包含的主题数。
(4)主题表(用来存放有关主题的讯息):
id:自动编号,并为其设置索引。
标题:文本类型,表示主题名。
看板:数字类型,来自看板列表,表示主题所属的看板。
文章数:数字类型,主题中包含的文章数。
所有的表是设计完了,但是数据库的设计并没有完,所以我们还需要建立表间关系,这样就能够让数据库执行一些相关性检查,避免资料出错。建立表间关系的另外的一个好处,就是通过它能够很容易的建立出复杂的join查询。
通常我们在asp中操作数据库的时候,都是使用的执行时生成的查询,然后由传递给数据库解释执行。而在这儿我们要用的是存贮查询。与执行时查询比较而言,预存程序具有更多的优点。
它保存在数据库中,独立于asp程序代码,使得他更容易建立和修改,并且查询的效率更高,速度更快,可以调试好了以后再放在asp页面中使用,能避免很多问题。而且使用存贮查询的asp程序代码更加容易阅读和修改。可能大家都对在asp中使用sql查询感到很烦,特别是那些逗号啊,分号啊什么的,一不小心就会出错。使用存贮查询后,就可以不用顾虑这些问题了。当然,预存程序再使用上也有一些要注意的地方,在后面我会详细的讲解它的使用方法。在access中建立预存程序是一件很容易的事,这儿我就不再多说了。在这儿我只给出各个查询的sql语句程序代码。
我把所有要使用到的查询都作为预存程序保存在了数据库中,主要的有以下的一些:
(1)按id查询文章:
select 主题表.标题 as 主题名, 看板列表.名称 as 看板名, 内容表.*
from 主题表 inner join (内容表 inner join 看板列表 on 内容表.看板id = 看板列表.id) on 主题表.id = 内容表.主题id
where (((内容表.id)=[articleid]));
(2)版主密码查询:
select 看板列表.板主, 作者表.密码
from 作者表 inner join 看板列表 on 作者表.id = 看板列表.板主
where (((看板列表.id)=[id];
(3)查询作者:
select 作者表.*
from 作者表
where (((作者表.id)=[id]));
(4)发表文章列表:
select [内容表].[id], [内容表].[标题], [内容表].[作者id] as 作者, [内容表].[日期], [内容表].[推荐度], [内容表].[点击次数] as 点击数。
from 内容表
where ((([内容表].[主题id])=[topicindex]) and (([内容表].[发表])=true));
未发表文章列表:
select 内容表.id as 文章id, 主题表.id as 主题id, 主题表.标题 as 主题, 内容表.标题 as 标题, 内容表.作者id as 作者, 内容表.日期 as 日期
from 主题表 inner join 内容表 on 主题表.id = 内容表.主题id
where (((内容表.发表)=false) and ((内容表.看板id)=[boardid]));
(5)主题列表:
select 主题表.*, 看板列表.名称 as 看板名
from 看板列表 inner join 主题表 on 看板列表.id = 主题表.看板
where (((主题表.看板)=[boardindex]));
还有一些查询,因为大多类同,我就不一一列出了。
在上面的查询语句中,可以看到一些由"["和"]"包围起来的东西,那就是查询参数了。需要在执行时给出参数值,然后把参数值带入到查询语句中才能够执行。还有一点要注意的是:在建立那些inner join查询时,是需要把表间关系添加到设计视图中的,否则是不能够自动生成inner join查询语句的。
到这儿,数据库的设计就算完了,以后的工作就是asp的事了。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器