如何编写一个自己喜欢的留言薄呢?本文将以 Active Server Pages 为中心,向你全面展示制作的过程,并使用大量的例子循序渐进地为大家进行讲解和演示,让你在不断的理论和实践之中更轻松地跨入ASP的大门。当然在学习应用ASP之前,让我们先来看一下ASP到底有什么优点。
ASP(Active Server Pages)动态网页,是微软公司推出的一种用以取代CGI(Common Gateway Interface)通用网关接口的技术。我们可以通过ASP结合HTML语言、ASP指令和ActiveX元件以及数据库等方面知识,使用自己的 Web 服务器创建并运行动态的交互式 Web 站点。ASP的主要优点大概可以归纳如下:
1、您可以用 VBScript 或JScript创建脚本,同时结合HTML语言就能够非常方便地完成网站的应用程序。对于 VBScript和JScript,使用哪种语言并不重要,Web 服务器等同地处理这两种语言,并向用户的浏览器发送 HTML 格式化结果。
2、因为ASP采用Script语言(VBScript和JScript)就可以轻松编写程序,因此这就大节省了网络设计人员又得重新学习一种新语言的时间。而且编写ASP无须手工compile编译或链接程序,可在服务器端直接执行,这无疑是更加方便了我们的编写过程。
3、使用普通的使用记事本之类的文本编辑器,即可进行编辑设计,如:Windows的记事本。建议不要用FontPage98或DreamWeaver2.0等主页制作软件修改,因为他们会破坏源代码的。在这里我建议使用CuteFTP携带的CuteHTML编辑器进行编辑设计。
4、ASP是运行在服务器端,所以我们无须担心浏览器是否支持ASP所使用的编程语言,用户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。ASP在服务器端运行,当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。
5、ASP能与任何ActiveX scripting语言相容。除了可用VBScript或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其他脚本语言,譬如Perl、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model)组件。
6、Active Server Pages的程序代码隐藏,在客户端上仅可以看到由ASP输出的动态HTML文件。因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
7、可使用服务器端的脚本来产生客户端的脚本。
8、面向对象(Object oriented),并可扩展ActiveX Server组件功能。
9、ActiveX Server Components(ActiveX服务器组件)具有无限可扩充性。你可以使用任何编程语言来编写你所需要的ActiveX Server 组件。
10、可以通过ADO(ActiveX Data Objects,微软的一种新的数据访问模型,是一种可以提供WEB页面开发者轻松存取Internet的数据库,并可以在用户端实现网上立即、即时更新显示的最新WEB页面数据库技术。)非常方便地访问数据库,从而使存取数据库变得轻松容易。
看了ASP如此多的优点,是否开始觉得心动啦!其实想学习ASP,我个人觉得最有效的方法莫过于:先从网络上Download一些别人提供的免费例子,再进行自己改编;遇到不明白的地方我们可以查找相关资料,或者直接到一些ASP论坛去向我们的“大虾”们讨教。
好了,讲了这许多,我们也该言归正传了。那么从下一章起我们就开始从一个最简单的文本留言簿开始我们的教程。 从本章开始我们将由一个简单的,利用文件储存访问留言的留言簿程序进入我们的教程。编写这样一个留言簿,我们大致可以从以下三个步骤来完成。
步骤一:先设计一个留言表单的网页(如:guestbook1.asp,这不用我在这儿说教了吧?)。见下图:
步骤二:在设计好留言表单后,我们开始进行编写处理留言的ASP程序。
我们要编写处理留言的ASP程序,最重要的问题是如何实现存取留言。而在ASP程序中,要存取文件,我们必须建立FileSystemObject对象(该对象主要用于读取Unicode或ASCII码的文件)。而要建立FileSystemObject对象,我们又可以使用以下的语句:
SET 对象实例 = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
FileSystemObject对象的方法包括:CreateTextFile 和OpenTextFile:
CreateTextFile :建立一个文件名称,并返回一个TextStream对象提供你读写文件
OpenTextFile :打开一个已存在的文件并建立一个TextStream对象以供你读写文件 在建立并打开一个可供编辑的文件后,我们最后可以调用TextStream对象下的方法WriteLine(把信息写入到已打开的文件中并换行)和方法ReadLine(读取已打开文件的一行信息)来存取文件。
因此,要实现存取留言的ASP程序,我们可以大致构思如下:
先建立FileSystemObject对象;然后通过该对象来调用OpenTextFile打开文件或者调用CreateTextFile来创建新的文件,建立TextStream对象;最后我们再进行调用TextStream对象的WriteLine和ReadLine进行存取文件。解决了这个主要问题后,我们可以将处理留言的ASP程序写成如下所示:
<%
Name = Request("Name") )
Email = Request("Email")
Subject = Request("Subject")
Memo = Request("Memo")
'从留言表单取得数据
If Name = "" Or Email = "" Or Subject = "" Or Memo = "" Then
Response.Write "输入框不能为空白!"
Response.End
End If
'检查表单的各输入框是否有信息输入,若留有空输入框没填则显示说明信息:"输入框不能为空白!" 并停止执行下面的程序。?
Line1 = "留言人:" & Name
Line1 = Line1 & String(5, " ")
Email = "< A HREF=mailto:" & Email & ">" & Email & "< /A>"
Line1 = Line1 & "Email" & Email & "< BR>"
Line2 = "主 题:" & Subject & "< BR>"
Memo = Replace( Memo, vbCrLf, "< BR>" )
Line3 = "< TABLE BORDER=1>< TR>< TD>"
Line3 = Line3 & "您的留言:" & Memo & "< /TD>< /TR>< /TABLE>"
Line4 = "时 间:" & Now()
'定义留言的显示格式,其中留言信息用信息框框起来。
On Error Resume Next
'避免如果执行下面的ReadAll(读取已打开文件的全部信息)时,无法读取信息就造成的程序错误的情况发生,因此加入此句用于忽略所有的错误。
Set fso = Server.CreateObject("Scripting.FileSystemObject") Application.Lock
TxtPath = Server.MapPath("book1.txt")
NewPath = Server.MapPath("newbook.txt")
fso.MoveFile TxtPath, NewPath
Set fin = fso.OpenTextFile(NewPath, , True)
Set fout = fso.CreateTextFile(TxtPath)
'建立 FileSystemObject对象,并锁定Application对象,不让任何两位上网者同时执行留言操作,同时建立和打开一个TextStream对象,指向要对其实行僮鳎糜诹粞约锹嫉奈谋綽ook1.txt。
fout.WriteLine Line1
fout.WriteLine Line2
fout.WriteLine Line3
fout.WriteLine Line4
fout.WriteLine "< hr>"
fout.WriteLine fin.ReadAll
'把留言表单中的信息分行写入到已打开的文件中。
fin.Close
fso.DeleteFile NewPath, True
Application.UnLock
Response.Redirect "guestbook1.asp"
'关闭并删除gbookold.txt,然后解除Application对象的锁定,再指引客户端浏览器到新的Web页面guestbook1.asp。
%>
将上述代码COPY到你的记事本,注意:要记得将所有“<”符号后面多加的空格去掉,然后存成文件manage1.asp。
步骤三:设计留言页面
因为我们要本留言簿的留言显示在留言表单下面,所以我们可以将以下HTML代码COPY到guestbook1.asp的最后面。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>您的留言< /title>
<link rel="stylesheet" href="../images/Text.css">
</head>
<body TEXT="#000000" BGCOLOR="#FFFFFF" BACKGROUND="b01.jpg">
<h2 ALIGN="CENTER">您的留言< /h2>
<hr noshade color="red">
<!--#include file="book1.txt" -->
</body>
</html>
<% Response.End %>
完成上述的所有步骤后,将guestbook1.asp和manage1.asp保存在WEB服务器的可执行虚拟目录(如:asp/)下,并在浏览器中用HTTP的方式进行浏览,如:http://yourcomputername/asp/guestbook1.asp。瞧!就这么简单,你已经有了自己的留言簿了。还不赶快试试!
第一章的简单留言簿虽是易学易懂,但毕竟是界面过于单调,而且将访客留言跟留言表单放在同一页面上总让人觉得有点乱。
为了能使我们做出来的留言簿更美观,让我们来给上一章的简单留言簿润下色,再令其留言在另外的一个单独的页面显示。
那么怎样给该留言簿润色呢?留言表单界面的背景总不能没吧?而且为了让留言表单的内容显示得更加规整,我们是否有必要用框架将留言表单的内容框起来呢?想好了,现在就让我们立即动手给我们的留言簿粉饰刷新。
步骤一:先给留言表单加上背景,这个问题我在这里就不多费口舌了。至于如何给表单的内容加点底色然后用虚框框起来,我们可以将上一章所给程序中的“定义留言的显示格式”部分进行更改。我在这里只是给留言表单的内容加上了点底色。我的方法非常简单就只将代码:
Line3 = "< TABLE BORDER=1>< TR>< TD>"
Line3 = Line3 & "您的留言:" & Memo & "< /TD>< /TR>< /TABLE>"更改如下:
Line1 = "< TABLE BORDER=0 BGCOLOR=#33CCCC width=781>< TR>< TD>"
Line1 = Line1 & Name & String(5, " ") & Email & "< /TD>< /TR>< /TABLE>" Line2 = "< TABLE BORDER=0 BGCOLOR=#33CCCC width=781>< TR>< TD>"
Line2 = Line2 & "主 题:" & Subject & "< /TD>< /TR>< /TABLE>"
Line3 = "< TABLE BORDER=0 BGCOLOR=#33CCCC width=781>< TR>< TD>"
Line3 = Line3 & "您的留言:" & Memo & "< /TD>< /TR>< /TABLE>"
我在这里想再一次提醒各位,不要用FontPage98或DreamWeaver2.0等主页制作软件进行修改 。
步骤二、如何让留言另起一页显示出来呢?
我们可以将第一章中介绍的guestbook1.asp去掉步骤三里的那段HTML代码后另存为guestbook2.htm;将manage1.asp的最后一句:Response.Redirect "guestbook1.asp" 改成:Response.Redirect "book2.asp"后另存为manage2.asp。其实上述的两个改动只是为了实现这样一情况,就是:把原来的“指引客户端浏览器到guestbook1.asp中去观看留言”更改成“指引客户端浏览器到新建的另一Web页面book2.asp中去观看留言”。(注意:guestbook2.htm和manage2.asp中源代码所涉及到的文件名得做相应的变更,我在这里不再赘述)
既然在manage2.asp中,我们指引客户端浏览器到book2.asp中去观看留言,那么我们就得新建一book2.asp,并且在book2.asp中打开留言记录。我们可以将以下代码剪切下来并存成book2.asp。
< html>
< head>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< title>留言薄< /title>
< link rel="stylesheet" href="../images/Text.css">
< /head>
< body TEXT="#000000" BGCOLOR="#FFFFFF" BACKGROUND="b01.jpg">
< h2 ALIGN="CENTER">留言薄< /h2> < hr noshade color="red">
< !--#include file="book2.txt" -->
< a HREF="guestbook2.htm" class="text2">
< p align="center">返回留言薄< /a>
< /p>
< /body>
< /html>
给留言簿润色,我们可以根据自已的喜恶进行设置,这都比较简单。但是我们有没有想过这样将所有留言只显示在一个网页
上是否有点不太妥当呢?试想,假如留言只有那么十来二十条的也就算了,但是如果我们有上百条甚至上千条的留言记录,天啊,我到底要等到什么时候才能等到留言界面完全显示出来呢?而且如此繁多的留言记录放在同一页面上,这还能让你提起兴趣来查看留言么?
为了管理好留言的显示,将留言簿做得更实用、更易管理,我们在下一章将开始学习数据库版本留言簿的编写。
在前两章我们介绍了文件版本的留言簿,现在我们不妨来设想一下:如果留言文件里面的留言很多,而你又急于想寻找其中的某条留言时,这时打开txt留言文件,对着一段段的留言记录,你敢担保你不会当场晕倒吗?而且文件留言簿最令人讨厌还远不只是这个原因,更气人的是:譬如你已经找到了你要找的留言,而且是非要将其删除不可(当然是因为那段留言竟毫不留情地往你脸上抹黑的缘由啦),那么此时其余想对你大发赞赏之言的朋友,就会因为你正在做留言删除的操作而不能留言了。看,这有多可惜!不过,你也无须叹气,虽然留言文件不能供多人共用,但是改成数据库来管理留言记录,当你在做删除留言的期间,访问者的留言还是可以加进来的。既然数据库留言簿能对你的系统如此照顾入微,我们现在就事不宜迟,立即来揭开她的庐山真面目。
至于如何建立自已的数据库版本的留言簿,我们还是通过分步骤的方法来说明吧。要编写一个数据库版本的留言簿,我们大致可以从以下三个步骤来完成。
步骤一:使用Access先建立用来存放留言的数据表。(当然,如果你想使你的数据库能很好地工作在高需求、高质量的Web应用程序的客户-服务器数据库,而且无论是在性能还是在可靠性上都能经受得起严格的考验,那么你最好是用服务器等级的数据库,如:SQL server、Oracle等。对于非服务器等级的数据库,我推荐使用Access中文版来建立。凡是用Access来建立的数据表,都是以.mdb为后缀名,如:book0.mdb。)
Access的界面非常友好,操作也非常简便,相信聪明的读者们,即使以往从未用过Access的,只要动手试试,也定能很快对其驽驾自如,所以我在这里也就不再赘述(当然也不排除有那么几分懒惰的成份)。
步骤二:设计一个留言表单的网页也同样是不可或缺的(如:guestbook0.htm)。
步骤三:又到编写处理留言的ASP程序了。(我们可以将下述代码COPY下来,然后另存为manage0a.asp文件。)
< !--#include file="adovbs.inc" -->
'调用adovbs.inc文件,所谓inc 文件顾名思义是include file的意思,adovbs.inc是IIS/PWS所提供的文件,存放着ADO相关常数的定义,使用inc文件可以使我们的程序,增加可读性,更易于开发和维护。
< % Function SqlStr( data )
SqlStr = "'" & Replace( data, "'", "''" ) & "'"
End Function
'这里用了SqlStr函数,其作用是将数据中的一个单引号改成两个单引号,并且在前后加上单引号。之所以要用该函数是由于上网者输入的数据必须以用单引号括起来的形式'输入的数据'与Insert Into命令组合在一起,但是如果用户输入的数据含有单引号,则'输入的数据'将会产生错误,因此输入的数据必须经过SqlStr的切换(将单引号切换成两个单引号)才是正确的。
Name = Request("Name")
Tel=Request("Tel")
Email = Request("Email")
Subject = Request("Subject")
Memo = Request("Memo")
'从留言表单取得数据
If Name = "" Or Tel="" Or Email = "" Or Subject = "" Or Memo = "" Then Response.Write "输入框不能为空白!"
Response.End
End If
'检查表单的各输入框是否有信息输入,若留有空输入框没填则显示说明信息:"输入框不能为空白!" 并停止执行下面的程序。
Set conn = Server.CreateObject("ADODB.Connection")
'用Server.CreateObject取得对象ADODB.Connection。因为在ASP中,如果要访问数据必须首先创建与数据库的链接,因此建立连接是存取Web数据库不可缺少的步骤,执行以上语句之后,conn便是一个 Connection对象。
DBPath = Server.MapPath("book0.mdb")
'通过调用服务器对象的MapPath方法来获取book0.mdb的完整路径。
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
'因为我们想打开的是Access(.mdb)数据库,所以我们要透过Access的ODBC驱动程序{Microsoft Access Driver (*.mdb)}来存取数据库,dbp参数则是用来指定想打开的数据库文件,因为它必须是完整路径名称,所以我们上一语句用了Server.MapPath 函数 。
Name = Left( Name, 40 )
Tel = Left(Tel,10)
Email = Left( Email, 80 )
Subject = Left( Subject, 127 )
'截短输入到各字段里数据的长度,以避免因输入到某一字段中的数据超长而引发的错误,当然假如我们将数据库book0.mdb中的各字段的数据类型都有设为“备注”,我们则再无需担心上网者所输入的数据有多长。
sql = "Insert Into GuestBook (姓名, 电话, Email, 主题, 留言) Values( "
sql = sql & SqlStr(Name) & ", "
sql = sql & SqlStr(Tel) & ", "
sql = sql & SqlStr(Email) & ", "
sql = sql & SqlStr(Subject) & ", "
sql = sql & SqlStr(Memo) & ")"
'在"guestbook"数据表中增加一个数据记录,然后把其中的各字段 (姓名, 电话, Email, 主题, 留言)分别设置成从留言表单上取下的对应的数据。
conn.Execute sql
'执行sql指令。
%>
我们知道:对于一个留言簿,如果我们只让上网者能看到自己的留言而看不到其他人的留言,那么这类留言簿也就只能适用于某些特殊的地方(例如“客户意见返馈表”或“投诉留言”之类的留言,因为假如你是老板的话,你也不会愿意将自己的“伤疤”随便揭开给人看)。因此我们必须令每一位上网者都能看到留言簿中的所有留言。为了提高页面的读取速度,我们将留言簿中的留言分成多页来显示,每页显示一定数目的留言数,譬如5条。
讲了这许多,那么到底如何实现留言记录的分页显示功能呢?如果我们对ADO的Recordset对象清楚的话,其实实现起来并不难。因为进行ADO存取数据库时的分页显示,就是对Recordset的记录进行操作。因此在没讲解程序之前,我觉得很有必要先给大家介绍一下有关Recordset对象方面的知识。
主要的ADO对象有三个:Connection、Command和Recordset。Connection对象能够建立数据与应用程序之间的联系,在建立联系后,Command和Recordset对象用来要求、存储或更新数据。Command对象主要担任数据库查询(Database Query)的角色,而
Recordset对象则是三者之中最为特别,功能亦最为强大,由数据取得的数据集合就存储于Recordset中,该返回的Recordset数据集合取得后再通过服务器端的脚本语言环境加于处理、分析、显示数据于客户浏览器上。
现将Recordset对象所提供的所有内部属性与其功能简述罗列如下:
AbsolutePage属性--目前的绝对数据页位置
AbsolutePosition属性--目前的绝对数据位置
ActiveConnection属性--与Connection、Command对象主动链接
BOF属性--数据集的开头边界
Bookmark属性--提供游标位置的书签功能
CacheSize属性--Recordset内数据所暂存的内存大小
CursorLocation属性--控制游标的类型为服务器端或客户端
CursorType属性--控制如何由服务器端数据库取回数据
EOF属性--记录集的结尾边界
EditMode属性--控制目前数据的处理状态
Filter属性--控制欲显示或隐藏的数据内容
LockType属性--控制数据更新的模式
MaxRecords属性--允许由服务器端取回的最大记录行数目
PageCount属性--数据页总数
PageSize属性--控制每一数据页内的记录行
RecordCount属性--由服务器端取回的记录行总数
Source属性--数据查询信息
Status属性--最近一行数据处理后的状态或信息
在了解了Recordset对象的以上属性和方法后,我们开始来学习如何实现留言记录的分页显示功能。在以下的学习当中,前面几章已学过的知识我在这里就不再赘述,我们只在这里重点学习处理留言记录分页的page2.asp文件。
< !--#include file="adovbs.inc" -->
< !--#include file="self2.asp" -->
'调用adovbs.inc文件和留言页面self2.asp。
'-=此处已略去Web页面的HTML代码,具体内容可下载源代码后查看=-
< %
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & _ Server.MapPath("book2.mdb")
'打开数据库book2.mdb并建立Recordset对象。
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "Select * From GuestBook Order By 时间 DESC"
'选取数据表GuestBook中的所有数据记录,并按时间顺序对其排序。
rs.Open sql, conn, adOpenStatic
'将数据记录打开成Recordset的adOpenStatic类型。
Sub ShowOnePage( rs, Page )
'利用Page参数来指定页码。
rs.AbsolutePage = Page
For iPage = 1 To rs.PageSize
self2 rs
rs.MoveNext
If rs.EOF Then Exit For
'如果显示的页码是最后一页,则该页的数据记录条数可能会不满5条,所以在这里要判断是否移过了整个数据记录的最末端。
Next
End Sub
rs.PageSize = 5
'设置你一页要显示的多少条留言记录。
Page = CLng(Request("Page"))
If Page < 1 Then Page = 1
If Page >rs.PageCount Then Page = rs.PageCount
ShowOnePage rs, Page
'检查Request("Page")所读取的页码是否在有效的范围内。
%>
< form action="page2.asp" method="GET" align="right"> < p>
< a href="guestbook2.htm">返回留言表单< /a>
< %
If Page <> 1 Then
Response.Write "< A HREF=page2.asp?Page=1>第一页< /A>"
Response.Write "< A HREF=page2.asp?Page=" & (Page-1) & ">上一页< /A>"
End If
If Page <> rs.PageCount Then
Response.Write "< A HREF=page2.asp?Page=" & (Page+1) & ">下一页< /A>" Response.Write "< A HREF=page2.asp?Page=" & rs.PageCount & ">最后一页
< /A>"
End If
%>
页数:< font color="#FF0000">< %=Page%>/< %=rs.PageCount%>< /font>
'< %=Page%>表示当前所在的页码,< %=rs.PageCount%>表示数据页的总数。
正文
ASP留言薄制作2006-04-30 22:54:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/iamben250/13433.html
阅读(33766) | 评论(2)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论