你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
应用ASP技术编写一个简单论坛(上)
 
一、论坛的应用技术和支持环境

 

论坛,即讨论组,是基于网络技术的WEB应用。人们可以在上面按一定的组织形式发布各自的问题和观点、进行非实时性交流。笔者在此给出一个编写简单论坛的方法,读者若有兴趣可以一试。

本论坛采用ASP(Active Server Pages)技术编写,后台数据库为简单起见,采用Microsoft Access。在95/98平台上,需要安装Microsoft Personal Web Server,在NT平台则使用Internet Information Server(调试可用Peer Server),以此来设置你的网站的目录和名称,并能运行和调试你的ASP应用程序。笔者对数据库接口ODBC的配置是

   数据库名称:forum.mdb

   数据库与ASP应用程序在同一目录下,在此,均放在网站主目录下的子目录/forum

   ODBC中用户数据源(DSN)名为:forum,选取forum.mdb作为数据库

   登录名称:user

   登录密码:无

配置好ODBC数据源后,启动你的PWSIIS,即可开始运行你的ASP应用程序。

 

二、论坛的形式

 

本论坛充分利用了浏览器的框架特性(frames,当然,必须浏览器支持,IE4.0以上即可),将页面划分成三部分,如下图1所示。该页面由顶框架TOP、左框架LEFT和主框架MAIN三个部分组成:

u       顶框架:导航栏,在整个论坛的使用和浏览期间始终不变,包括:

[返回主页]——从论坛直接退回网站主页;

 [刷新内容]——对论坛进行刷新,读取最新消息;

[        ]——在主框架中显示发送消息表单。

u       左框架:论坛目录和消息的列表,包括:

论坛目录——显示论坛组织的讨论主题,如本例中的六种,足球、篮球、排球、网球、羽毛球、乒乓球;

消息列表——按讨论主题分类显示消息,并且将消息与其答复消息组织在一起,并采用向右缩格方式表示其答复关系,如图1种足球主题中的一则消息“马明宇走得好!!!”,其答复消息为“RE:同意”。

u       主框架:消息内容显示和发送消息区,包括:

消息发送页面——进入论坛或点击导航栏的[        ],显示一组由文本框和选择框组成的表单,填写相应内容后,点击“发送内容”按钮发送消息。消息发送成功会显示发送成功页面;

消息内容显示页面——选择点击左框架消息列表中的一项,在主框架中会显示该消息的标题、主题、提交作者、提交人邮箱、提交日期、提交时间、提交内容。在该页面中还有一个按钮“答复”,用于答复所浏览的消息;

消息答复页面——在消息内容显示页面中点击“答复”按钮,此时显示一个表单,填写相应内容后,点击“发送内容”按钮发送消息。消息发送成功会显示发送成功页面。答复消息将显示在所答复的消息下方,如消息列表中所述。

三、论坛的程序结构和数据库设置

 

3.1论坛的文件清单

本论坛由以下几个文件(均在forum子目录中)组成:

myforum.html——本论坛的进入主页,仅起引导作用;

discuss.asp——论坛的主页,包括三个框架,由discuss_top.htmldiscuss_left.aspdiscuss_main.asp组成,如图1所示即为discuss.asp页面。本asp预统计每个论坛主题的消息总数和7天内的最新消息数并存在数据库中;

discuss_top.html——论坛主页的导航栏,即图1中的顶框架部分;

discuss_main.asp——论坛主页的主框架,即图1中的右下角表单部分,用于发送消息;

discuss_left.asp——论坛主页的左框架,即图1中的左下角目录列表部分,用于显示论坛的讨论主题目录,以及每个主题下的消息;

disc_post.asp——发送消息处理页面。当discuss_main.asp中填写的表单信息被发送时,调用本asp处理表单信息,并返回发送是否成功的信息;

contentdisplay.asp——显示消息内容页面。当选择点击左框架中消息列表的一项时,在主框架中显示该消息的相关信息(内容见前文2中主框架部分)

disc_reply.asp——答复消息表单页面。当主框架中显示某消息内容时,若点击“答复”按钮,则调用本asp显示一个表单,用于答复所浏览的消息;

disc_response.asp——答复消息处理页面。当disc_reply.asp中填写的答复表单信息备发送时,调用本asp处理表单信息,并返回发送是否成功的信息;

disc_showre.inc——消息发送成功包含文件。当disc_post.aspdisc_response.asp处理表单信息成功后,调用本包含文件显示消息发送成功信息;

message_show.inc——消息列表显示包含文件,在disc_left.asp中处理消息列表的显示;

    opendb33.inc——包含文件,以光标类型3和锁定类型3打开主题消息表;

    closedb33.inc——包含文件,执行事务处理并关闭和清除主题消息表对象;

forum.mdb——本论坛的数据库,采用Microsoft Access,其内所有的表和域说明见后。

3.2论坛的程序结构

下面采用图来说明论坛的文件关系和程序结构:

  

 

文本框: 处理消息统计信息文本框: 主框架文本框: 左框架文本框: 显示消息内容

2 论坛程序结构图


其中黑箭头表示调用或访问关系。

3.3论坛的数据库设置

    本论坛的数据库为forum.mdb。此数据库内有数个表,分两类:

²  论坛主题表——forum_content,其结构设置如下:

字段名称

数据类型

字段大小

必填字段

允许空

 

 

index

自动编号

长整形

 

 

(无重复)

记录索引

contentname

文本

100

讨论主题

total

数字

长整形

 

该主题消息总数

newest

数字

长整形

 

最近7天内的新消息数

1 论坛主题表的结构

 

◇主题消息表——在论坛主题表forum_content中字段contentname中有几个记录,就应该建立几个主题消息表,表的名称和contentname的值相同。

例如,本论坛中设定了六个讨论主题,即在讨论主题表forum_content中添加六个

    记录,其字段contentname值依次为:足球、篮球、排球、网球、羽毛球、乒乓球,则建立六个主题消息表,其表名依次为:足球、篮球、排球、网球、羽毛球、乒乓球,并且每个主题消息表的结构都是相同的。

主题消息表的结构设置如下

字段名称

数据类型

字段大小

必填字段

允许空

 

 

index

自动编号

长整形

 

 

(无重复)

记录索引

subject

文本

100

消息标题

submitdate

日期/时间

 

 

消息提交时间

level

数字

长整形

 

该消息所处的层次,详见4

content

备注

65,535字符

 

消息正文

next

数字

长整形

 

链接指针,指向该消息的下一个消息,详见4

name

文本

50

提交该消息者的姓名

email

文本

50

提交该消息者的电子邮箱

2 论坛主题消息表的结构

 

四、论坛的关键算法说明

 

编写本论坛有两个需要注意的,一个是论坛主题的确定和显示,一个是消息按主题和层次显示和处理。
    4.1
论坛主题的确定和显示

    可能读者已经注意到,在3.3中论坛主题表forum_content中有一个字段域为contentname,用来存放论坛主题。在本论坛中,采用读取该字段值输出到客户端浏览器页面的方法来显示论坛主题,这样只需要在论坛主题表中修改、添加或删减记录即可实现论坛主题的变更,而不需修改应用程序。唯一需要注意的一点是,每当发生论坛主题的变更时,应该相应地对3.3中的主题消息表的表名进行变更,保证论坛主题的每个记录在数据库中都有一个以该记录中字段contentname的值命名的主题消息表存在。

    这段处理程序在文件discuss_left.asp中,如下:

<%          ‘display discuss content显示讨论主题

   on error resume next 程序出错则继续运行

   dim recordtotal      定义变量recordtotal存储论坛主题表中记录总数

   dim contotal()       定义数组contotal存储论坛主题表中的contentname的值

   set rs=server.createobject("ADODB.recordset")

   rs.open "select * from forum_content","DSN=forum;UID=user;PWD=",3,1

                    以只读方式打开数据库forum.mdb中表forum_content

   if not rs.eof then       记录不为空则继续

%>   <ul>           采用无序项目列表方式显示所有的讨论主题

<%  

     recordtotal=rs.recordcount

                    获得记录总数

     redim contotal(recordtotal-1)

                    重定义数组contotal,确定实际内存大小

     for i=0 to recordtotal-1

%>

       <li><a href="#content<%=i%>"><%=rs("contentname")%></a>

       (<%=rs("total")%>,<font color="#ff0000"><%=rs("newest")%></font>)</li>

                显示论坛主题及该主题下的消息总数和新消息数(这里为7天内)

                    其统计处理程序段在discuss.asp

<%   contotal( i )=rs("contentname")

         rs.movenext

         next%>     ‘for循环,直到记录尾

        </ul>

<%

    else            没有讨论主题记录

       response.write "对不起,还没有讨论内容."

       rs.close

       set rs=nothing

       response.end    

显示相应信息,关闭并清除rs,结束asp页面请求并显示页面结果

   end if

   rs.close

           set rs=nothing       有讨论主题记录操作结束时关闭并清除rs

%>

程序段1

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089