ASP网上论坛的实现
【摘要】
20世纪末,随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。个性化已逐渐成为当今Web应用的潮流。本文研究了一种基于数据关联规则网上论坛系统,此方案与现今网上已采用的一些方案相比,具有用户使用更简单、界面更直观等优点。
本文中所做的主要工作如下:
(1)介绍了个性化页面的背景及Win2000server+IIS+ASP系统的一般原理;
(2)阐述整个个性化页面的系统结构及工作原理;分析了系统实现中的特殊性、难点和重点。
(3)设计实现用户管理、帖子管理、版面管理、数据库管理、浏览和查找、短消息功能等ASP页面 。
(4)分析并解决实现中的若干技术问题。
(5)建立完整的网上论坛,进行测试并分析结果。
【关键字】
NewBBs 论坛 ASP 连接 数据库
目 录
【摘要】 - 2 -
第一章 引 言 - 4 -
第二章. 特殊技术困难 - 5 -
第三章 ASP技术综述 - 7 -
3.1 ASP的产生 - 7 -
3.2 ASP与IIS - 7 -
3.3 ASP的内部特点 - 8 -
3.4 利用ADO访问数据库 - 9 -
3.5 ASP与CGI的比较 - 10 -
第四章 网上论坛系统分析及实现 - 12 -
4.1网上论坛系统说明 - 12 -
4.2网上论坛系统总体分析 - 12 -
4.3论坛系统应用表的结构 - 12 -
4.4网上论坛系统添加、查询设计 - 14 -
4.5网上论坛系统文件夹、文件说明 - 18 -
4.6网上论坛系统运行环境与系统结构 - 19 -
结论 - 20 -
致谢 - 20 -
参考文献 - 21 -
第一章 引 言
Internet是目前世界上最大的计算机互联网络,它遍布全球,将世界各地各种规模的网络连接成一个整体。作为Internet上一种先进的,易于被人们所接受的信息检索手段,World Wide Web(简称WWW)发展十分迅速,成为目前世界上最大的信息资源宝库。据估计,目前Internet上已有上百万个Web站点,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在Internet中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化。
我们发现这样一个事实,一个用户在访问一个网站时一般来讲只对该网站的部分内容感性趣,而且这种兴趣会持续一段时间。这点启发了我们,如果能根据用户的喜好为不同的用户显示其个性化的页面,即着重显示该用户感兴趣的内容,将为用户节约大量的检索时间,而且这样的网页显然是更具有吸引力的。一些站点已经在这方面作出了一定的尝试,通常采用的方法是,在用户登陆时为其提供一系列的选项,使用户能够对站点进行一些自主的设置。这样做能够使站点呈现一定程度的个性化,但是对用户来讲,还是比较烦琐,而且在用户了解一个站点前让其对站点进行设置,其结果未免有些粗糙。于是我们构想了这样一种方案,对用户登陆后的动作进行跟踪,分析,发掘用户点击的规律,即用户先后点击的关联规则,这样,在用户点击一个主题(链接)之后,系统能够自动生成一页面,其中包含了该主题下用户经常关注的内容(若干链接),这样便在无须用户作出任何额外工作的情况下实现了为用户量身订做的个性化页面。
要实现这样的功能,离不开后台数据库的支持。用户验证信息,收集到的用户点击信息,主题层次信息,分析得出的关联规则表等大量的数据都由数据库管理系统管理。本文中数据库服务器端采用了Microsoft Access数据库作为ODBC(Open DataBase Connectivity )数据源,并以先进的ADO(ActiveX Data Objects)技术进行数据库存取等操作,使Web与数据库紧密联系起来。
整个个性化页面生成系统主要由使用Dreamweaver_MX开发的关联规则采掘系统和利用IIS+ASP技术实现的个性化Web页面生成器两部分组成。关联规则采掘系统对数据库中的历史记录进行分析,产生用户关联规则表;页面生成器则负责记录用户行为和根据关联规则表动态生成用户个性化Web页面。二者通过数据库服务器和Web服务器连接。
本文作者主要完成Web服务器端的用户管理、帖子管理、版面管理、数据库管理、浏览和查找、短消息功能等设计、实现与完善以及整个实验网站的组织建立和测试工作。
第二章. 特殊技术困难
用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐怕是遇见最多的问题了,尤其是上传图片,比如你想要有一个图片浏览功能,就要图片上传照片的功能。上传图片文件到服务器可以使用各种免费的 文件上传组件,使用起来功能虽然很强大,但是由于很多情况下,我们只能使用免费的支持ASP的空间或者租用别人的虚拟空间,对于第一种情况,我们根本就没有可能来使用文件上传组件;至于第二种情况,我们也要付出不少的“银子”才可以。除非你拥有自己的虚拟主机,你就可以随便的在服务器上面安装自己所需要的组件,这种情况对于大多数人来说是可望而不可及的。经过一段时间搜集资料,终于使我克服了这个困难,使用纯ASP代码来实现图片的上传功能。其主要代码如下:
dim upload,file,formName,formPath,iCount,sname
set upload=new upload_5xSoft ''建立上传对象
response.write upload.Version&"" ''显示上传类的版本
if upload.form("filepath")="" then ''得到上传目录
HtmEnd "请输入要上传至的目录!"
set upload=nothing
response.end
else
formPath=upload.form("filepath")&year(now)&month(now)&"/"
''在目录后加(/)
if right(formPath,1)<>"/" then formPath=formPath&"/"&year(now)&month(now)&"/"
end if
iCount=0
for each formName in upload.file ''列出所有上传了的文件
set file=upload.file(formName) ''生成一个文件对象
if file.FileSize>0 then ''如果 FileSize > 0 说明有文件数据
file.SaveAs Server.mappath(formPath&file.FileName) ''保存文件
response.write "
<center><font size=2 color=red>上传成功,请复制下边剪切板中内容而后粘贴到图书图片剪切板内!</font></center>
"
dim thename,fsobj,spp,paths
'文件更名
thename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&right(file.filename,4)
'response.write thename
spp=file.filename
file.filename=thename
file.SaveAs Server.mappath(formPath&file.FileName)
paths=server.mappath("../")&"\bookpic\"&year(now)&month(now)&"\"&spp
set fsobj=server.CreateObject("scripting.filesystemobject")
if fsobj.fileExists(""&paths&"") then
fsobj.deletefile(""&paths&"")
end if
set fsobj=nothing
response.write "<center><input type=text size=26 value=bookpic/"&year(now)&month(now)&"/"&file.filename&"><button onclick=window.clipboardData.setData('text',this.previousSibling.value)>复制</button>
<a href='javascript:window.close()'><font color=red size=2>关闭窗口</font></a></center>"
iCount=iCount+1
end if
set file=nothing
next
set upload=nothing ''删除此对象
response.write "<font color=red size=2>"
'Htmend iCount&" 个文件上传成功!</font>"
sub HtmEnd(Msg)
set upload=nothing
response.write "
"&Msg&" [<a href='javascript:window.close()'><font color=red size=2>关闭窗口</font></a>]</body></html>"
response.end
end sub
Function GetPP
dim s
s=Request.ServerVariables("path_translated")
GetPP=left(s,instrrev(s,"\",len(s)))
End function
虽然这样上传图片比较麻烦,不过这样就不用连到数据库,要连数据库就更麻烦了。
由于在对大多数技术困难的解决中频繁用到了ASP技术的许多独特的性质和处理方法,这里有必要对ASP及相关技术的一些重要部分进行介绍,以便于对全文的理解。
第三章 ASP技术综述
3.1 ASP的产生
近年来随着Internet技术的飞速发展及用户需求的不断升级,Web页面技术也不断的推陈出新,使得Web站点的功能越来越强大,能够提供的服务种类越来越繁多。从HTML、Client Script 到CGI,从JAVA的诞生到ActiveX, Web页面设计人员不断受到冲击,微软公司在总结了以往技术,重新思考Web页面设计的真正需要后,推出了Active Server Pages (ASP),一种用以取代CGI(Common Gateway Interface,通用网关接口)的技术。简单讲,ASP是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的动态网页,包括使用 HTML 表单收集和处理信息,上传与下载等等。更重要的是,ASP使用的ActiveX技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的Web编写工具所远远不及的地方。使用ASP还有个好处,就在于ASP可利用ADO(Active Data Object,微软的一种新的数据访问模型)方便快捷地访问数据库,从而使得开发基于WWW的应用系统成为可能,这也是本文选择ASP作为开发工具最重要的原因之一。
3.2 ASP与IIS
3.2.1 IIS简介
Wsb服务器是Web应用程序的心脏。IIS(Internet Information Server)是微软推出的Windows NT Option Pack的主要成员,作为Win2000server的扩展,自推出以来已经有了很大发展,其体系结构是当今市场上最受关注的Web服务器之一。新推出的IIS4.0版本增强了系统安全性,具有服务器端脚本开发调试,内容管理和站点分析,崩溃防护,内置JAVA虚拟机及全面支持ASP等强大功能。
3.2.2 IIS与ASP的结合
在过去,客户机/服务器结构的设计与Web的相关技术几乎处于平行线上,两者相互独立并无法作出集成性的设计。现在我们利用IIS+ASP构成三层式Web结构(如图2.1所示)的中间一层,将客户机/服务器结构与Web密切结合,完成前后端两者的集成输出功能,使得Web站点的开发更方便,实现的功能更强大。
利用IIS+ASP技术来集成Web前后端所带来的强大效益可归结为以下几个方面:
1. 减少构建和维护成本
2. 加快联机过程
3. 应用软件集中在服务器端开发管理
4. 前端可使用任何浏览器(IE、Netscape…..)
5. 后端可存取任何数据库 (SQL、Access…..)
6. 可使用任何脚本语言开发 (VBScript、JavaScript、PERL…..)

3.3 ASP的内部特点
3.3.1 ASP内部6大对象
ASP提供了6个功能强大的内部对象,每个对象具有各自的属性(Property)、方法(Method),有的还拥有数据集合(Collection)与事件(Event),它们共同完成Web中的一些重要工作。这6个对象及其功能描述如表2.1所示。
对象名称 功能描述
Request 从客户端取得信息
Response 将信息送给客户端
Server 提供一些Web服务器工具
Session 储存在一个Session内的用户信息,该信息仅可被该用户访问
Application 在一个ASP-Application中让不同的客户端共享信息
ObjectContext 配合Microsoft Transaction服务器进行分布式事务处理
表2.1 ASP 内部6大对象及其功能
合理地运用这些对象可以使原本复杂,烦琐的工作变得简捷而条理清晰。
我们可以用以下的语法直接使用这些对象:对象/属性/方法/数据集合
3.3.2 Global 文件
每一个以Active Server Pages为基础的应用程序都拥有一个Global.asa文件(ASA后缀名其实是Active Server Application的缩写),它位于每一个应用程序的基点目录之下。当Active Server Pages做下面两个动作时,Server便会去读Global.asa文件:
1.Web Server启动之后,一个应用程序目录中任一个ASP文件被提出第一个HTTP请求(Request)时。
2.不具有任何Session的客户端向Server请求一个ASP文件时。
前面已经提到Application和Session这两个ASP的内部对象。Application对象内的信息供所有正在执行该应用程序的用户分享,它创建于Web Server启动后一个应用程序中任一ASP文件被提出第一个HTTP请求时,结束于Server端停止运行。而Session对象仅属于一位用户,维持一个用户端的信息,其他用户无法访问,它创建于一个不具有Session的用户向Server请求一个ASP文件时,结束于该Session到期(即用户端超过某时间段没有向Server提出要求或刷新Web页面)或Abandon语句的调用。可见,Global.asa文件的调用与Application与Session这两个对象密切相关。事实上我们通常在Global。asa文件中写入以下内容:
1. Application或Session的开始事件(Start-event)。
2. Application或Session的结束事件 (End-event)。
这样,在一个Application或Session对象被创建或结束时,系统会自动完成Global.asa文件中写入的相应事件。值得注意的是,如果一个Application与一个Session同时开始,Active Server Pages会先处理Application的开始事件,而如果一个Application与一个Session同时结束,Active Server Pages则会先处理Session的结束事件。
3.4 利用ADO访问数据库
ADO(ActiveX Data Objects)是一种操作Microsoft所支持的数据库的新技术。在ASP中,ADO可以看作是一个服务器组件(Server Component),更简单点说,是一系列的对象,应用这些功能强大的对象,即可轻松完成对数据库复杂的操作。本文中个性化页面的实现便大量地用到了ADO技术。具体的操作步骤可以归纳为以下几步:
1.创建数据库源名(DSN)
2.创建数据库链接(Connection)
3.创建数据对象
4.操作数据库
5.关闭数据对象和链接
每一步的作法如下:
一、创建数据源名
DSN(Date Source Name)即数据源名称。我们知道,ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵驱动程序的数据库。比如我们系统中有Access的ODBC驱动程序,那么即使我们没有Access软件,也可以在我们的程序中对一个Access的MDB数据库加、删、改记录。而且我们根本不用知道这个数据库是放在哪里的。我们只要写出SQL语句,ODBC驱动程序就会帮我们做一切事情。我们在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如我们改用了SQL Server的数据库,只要其中表的结构没变,我们就不用改写我们的程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁。
二、创建数据库链接(Connection)
链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。ASP文件中如果要访问数据,必须首先创建与数据库的链接,其语法如下:
set Conn=Server.createObject(“ADOBD.CONNECTION”)
这条语句创建了链接对象Conn,接下来:
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data.Source="&Server.MapPath(""&db&"")
conn.Open connstr
这条语句打开链接,用到了DSN,本例为“connstr”。
以上两个步骤缺一不可,因为链接对象的创建与打开是两回事,只有打开了才真正可以使用。
三、创建数据对象(Record Set)
ADO中的数据对象通常保存的是查询结果。Record Set是ADO中最复杂的对象,有许多属性和方法。Record Set保存的是一行行的记录,并标有一个当前记录。以下是创建方法:
Set Record Set=Conn.Execute(sqtStr)
这条语句创建并打开了对象Record Set,其中Con是先前创建的链接对象,rs是一个字串,代表一条标准的SQL语句。例如:
rs=“SELECT * FROM shop_books”
Set Record Set=mConn.Execute(rs)
这条语句执行后,对象Record Set中就保存了表tab1中的所有记录。
四、操作数据库
我们通过调用链接对象的Execute方法来将查询结果返回给一个数据对象或进行插入、删除等操作。例如:
rs=“INSERT INTO tab1 VALUES(1,2)”
mConn.Execute(rs)
/执行插入操作
五、关闭数据对象和链接对象
在使用了ADO对象之后要关闭它,因为它使用了一定的服务器资源。通过调用方法close实现关闭,然后再释放它。
Record Set.close
Set Record Set=Nothing
/关闭创建的数据对象
mConn.close
Set mConn=Nothing
/关闭创建的链接对象
3.5 ASP与CGI的比较
CGI(Common Gateway Interface,通用网关接口)也是Internet上一种功能强大的Web页面技术,其工作方式有别于ASP。我们现对二者进行比较。
Active Server Pages开发Web应用程序的特点:
1. 完全嵌入HTML,与HTML、Script语言完美结合。
2. 无须手动编译和链接程序。
3. 面向对象,并可扩展ActiveX Server组件功能。
4. 使用脚本语言(JavaScript、VBScript或PERL)编写。
5. 存取数据库轻松容易(使用ADO组件)。
6. 可使用任何语言编写自己的ActiveX Server组件。
7. 无浏览器兼容问题。
8. 程序代码隐藏,客户端仅能看到ASP输出的HTML文件。
9. 缩短Web开发时间。
相比之下,使用CGI开发Web应用程序具有以下缺点:
1. 不易与HTML文件集成。
2. 须使用其他较复杂的语言来开发CGI程序。
3. 程序开发时间较长。
4. 存取数据库不容易。
5. 每个CGI程序被不同用户执行时都得重新执行一次,并占去Server的一个端口(Port),降低Server效率。
可见,ASP在数据库访问、与HTML的集成、提高服务器的效率等诸多方面都优于CGI,更适应Web应用程序开发的需要,因此本文选择了ASP作为个性化页面生成器的开发工具。
第四章 网上论坛系统分析及实现
4.1网上论坛系统说明
此网上论坛可以实现:
游 客:查看帖子、注册新用户。
注册用户:查看帖子、发新帖子、在线发布信息、回复信息、修改个人资料、在线短消息。
管理员:发布公告、帖子管理、论坛设置、版面管理、用户管理、友情连接、短消息管理、数据库备份。
4.2网上论坛系统总体分析
通过上面的功能说明,我们可以将论坛的制作分为四大部分:
(1) 网友注册和管理模块:因为引入了站长或者版主,在论坛中就必须能够对其进行身份验证。这个模块的功能,就是管理注册的网友,并能够提供相关的查询。比如,查询指定作者的所有发表的文章,查询当前发表文章最多的十个网友,等等。如果你的论坛不是很大,这个模块可以省略为只带有版主身份验证的功能,而去掉那些关于注册,查询的部分。
(2) 文章显示模块:显示所有版主审核过的,觉得值得推荐的文章。
(3) 发表文章模块:为注册网友提供发表见地的地方,发表后等待版主审阅。
(4) 文章审阅模块:版主对所有网又发表但未经审阅的文章进行处理,已决定是发表 还是删除。
了解了具体的功能需求后,就可以按模块的开始论坛的设计了。当然,这些模块的只是在功能上对论坛结构的划分,实际上并不能够完全的把他们独立出来进行设计。对于这种较小的应用,也没有必要进行完全的模块化设计,在良好的规划下直接写程序代码或许来的更为简单一些。
4.3论坛系统应用表的结构。
(1)作者表(用来存放作者讯息):
Id(论坛用户表)
id 自动编号
Name 文本 用户名
Pass 文本 密码
passda 文本 备用密码
Email 文本 邮件
Xingming 文本 是否阅读
Sex 文本 性别
Oicq 文本 Oicq
Icq 文本 icq
msn 文本 msn
Shengri 文本 生日
Home 文本 个人主页
Qian 数字 钱
Meili 数字 魅力
Weiwang 数字 威望
Jingyuan 数字 经验
Touxiang 文本 头像
Qianming 文本 签名
(2)内容表(用来存放具体文章内容和相关讯息):
Book(论坛帖子)
id 自动编号
Title 数字 文章标题
Type 数字 文章类型
Fid 数字 文章号
Hits 数字 文章类别
Bid 数字 版面号
Faceimg 文本 用户头像
Reply 数字 回复次数
Body 备注 文章内容
Wdate 日期/时间 发布日期
Ldate 日期/时间 最后一次更新日期
Usermail 文本 用户邮件
Username 文本 用户姓名
Ip 文本 用户IP
(3)看板列表(用来存放有关看板的讯息):
Board(论坛版面设置)
id 自动编号 版面号
Ename 文本 英文名称
Cname 文本 中文名称
Logo 文本 版面图片
Bdinfo 文本 版面简介
(4)论坛设置表(用来存放有关论坛设置讯息):
Bbsset(论坛设置)
id 自动编号
Name 文本 论坛名称
guanggao 文本 论坛广告
Logo 文本 论坛LOGO
Time 文本 修改时间
Test 文本 论坛公告
Tongzhi 文本 公告内容
Copyright 文本 版权信息
(5)论坛消息表(用来存放有关论坛用户短消息)
Hand(论坛消息表)
id 自动编号
Name 文本 用户名
Neirong 备份 内容
Riqi 文本 日期
Tname 文本 发送到用户名
Isnew 文本 是否阅读
(6)论坛友情连接表(用来存放有关论坛友情连接讯息)
Link(论坛连接表)
id 自动编号
Linkname 文本 连接名称
Shuoming 文本 说明
Url 文本 连接网址
(7)论坛在线人数表(用来存放有关论坛在线人数讯息)
Online(论坛在线人数表)
Name 文本 用户ID
Ip 文本 用户IP
Ltime 日期/时间 登陆时间
4.4网上论坛系统添加、查询设计
所有的表是设计完了,但是数据库的设计并没有完,所以我们还需要建立表间关系,这样就能够让数据库执行一些相关性检查,避免资料出错。建立表间关系的另外的一个好处,就是通过它能够很容易的建立出复杂的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的事了。
二、构建
1、构建主窗体
先要给出一个窗体,能够让网友输入注册讯息,这些是HTML的内容,且放在一边,我们来仔细看看具体实现注册的ASP脚本。
(1)将资料中的单引号改成两个单引号,并且在前后加上单引号
Function SqlStr( data )
SqlStr = "'" & Replace( data,"'", "''" ) & "'"
End Function
注:这是一个自定义的函数,用来把用户输入中的单引号(')转换成两个单引号('')。在ASP中,用双引号围着的是字符串,因而上面的"'"代表的就是只有一个单引号的字符串。之所以要把一个单引号换成两个单引号,这是因为在SQL语句中,用单引号围起来是用来代表变量的。为了不至于混淆,就要把字符串中的单引号用两个单引号来表示。而所有的用户输入都要作为变量嵌入到SQL语句中的,所以这个函数是必不可少的。
(2)存贮准备
id=Request("id")
password=Request("password")
nickname=Request("nickname")
email=Request("email")
sex=request("sex")
注:把来自用户输入窗体中的内容保存在变量中,这不是必须的,但写了更容易读写。
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
因为这些内容不是必须填的,为了防止用户没有输入任何内容,而造成数据库操作上的错误,就必须把没有填入字段用空格来代替。
(3)建立连接
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
注:这一段是建立数据库连接,数据库的名称为bbssystem.mdb,这一段中唯一要注意的是Server.MapPath函数的应用。一般来说,凡是涉及到具体的目录的地方,都不要直接使用目录名,而用Server.MapPath函数来代替。善用好Server.MapPath和Request.ServerVariables()等函数,能够让你的WEB应用具有更好的可移植性。
Set cmd = Server.CreateObject("ADODB.Command")
(4)查询作者是否已存在
Set cmd.ActiveConnection = conn
cmd.CommandText = "查询作者"
ReDim param(0) ' 声明参数数组
param(0) = CStr(id) ' Cint 不可忽略
Set rs = cmd.Execute( ,param )
注:这一段就是用来执行预存程序的。在ADO中执行查询的方法有很多种,但是对于预存程序就只能使用Command对象了。首先,建立了一个叫做cmd的Command对象,然后把conn连接对象设定给cmd对象的ActiveConnection属性,把要执行的查询名称"查询作者"设定给CommandText属性,然后为查询参数赋值。我们声明了一个参数数组param(0),因为在"查询作者"这个查询中只有一个参数,所以数组就只有一个分量了。一般的,在查询中有几个参数,就要申明有相应分量个数的参数数组。并且参数出现的顺序是个数组中分量的顺序是对应的。在使用参数查询的过程中,尤其要注意的是,参数的类型要严格匹配,否这就会出错,所以上面的CStr()类型转换函数是不可缺少的。
if not (rs.eof or rs.bof) then
response.write "错误,你输入的ID号已经被占用,请换一个再试试!"
else
sql = "Insert Into 作者表 (id, 昵称,Email, 密码,姓名,学校,系别,性别,电话) Values("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(nickname) & ","
sql = sql & SqlStr(email) & ","
sql = sql & SqlStr(password) & ","
sql = sql & SqlStr(name) & ",&", "
sql = sql & SqlStr(sex) & ","
sql = sql & SqlStr(phone) & ")"
conn.Execute sql
4.5网上论坛系统文件夹、文件说明
文件/文件夹 用途
Index.asp 首页、登陆页面
begin.asp 登陆后页面
reg.asp 注册页面
MyInfo.asp 个人资料页面
Mywz.asp 参与的主题帖子
Mysms.asp 收件箱
Mylogout 退出论坛
login.asp 超级管理员登陆页面
man.htm 超级管理员管理页面
bbsset.asp 论坛基本设置
Boardman.asp 论坛版面管理
Userman.asp 版主管理
Admin.asp 用户管理
Link.asp 友情连接
Bfmdb.asp 数据库操作
Admindelsms.asp 删除短信操作
Editinfo.asp 修改资料
Quit.asp 退出管理
Backdata\backdata.asp 备份数据库文件
Data\data.asp 数据库
Images\ 图片文件夹
Pic\ 头像文件夹
Upload\ 用户上传文件夹
4.6网上论坛系统运行环境与系统结构
为了保证系统运行的效率和可靠性,系统服务器端应具有较高的软硬件配置,客户端的要求不是很高。此应用程序可广泛运行于国际互联网即Internet,也可适用于内部的局域网。其运行要求如下:
☆软件环境:
客户端: Windows95/98,Internet Explorer(IE)等
服务器端:Windows NT/Windows2000,Internet Information Server (IIS)4.0及其以上版本,IE等;或者Windows98,Personal Web Server(PWS),IE等。
数据库:采用access,运行于服务器端。
☆硬件环境:
服务器 CPU:PIII 500以上 ,内存:256M以上
客户机 CPU:P200MMX以上,内存:32M以上
结论
BBS(Bulletin Board Service,公告牌服务)是Internet上的一种信息服务系统。它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法。
随着网络技术的飞速发展,论坛已经成为网络上不可缺少的交流方式之一,深受网民的喜爱。整个论坛系统使用Browser/Web模式来设计,服务器端采用Access数据库系统和ASP组件来构成论坛系统;客户端采用浏览器来完成系统维护和管理。
1、 该论坛所实现的功能
用户注册、发帖、回复、发短消息、图片上传、帖子加精华
2、 论坛待完善问题
管理员发贴审核系统、实现论坛的树行结构、邮件发送
致谢
在短暂的三年大学时光里,同学和朋友们给了我无私的帮助与支持,在此我对所有学习和生活上帮助过我的同学们表示深深的谢意!