ASP编程技术:如何制作留言本
如何制作留言本
问题
网上留言是网络浏览者经常光顾的地方,因此留言本是一个常用的的交流信息手段,那么如何在ASP中制作留言本?
解决思路
与聊天室相比,留言本不具有动态性和实时性,不过它信息量大,可以保存信息更加长久。而且对于公司来说,留言本也是一个信息反馈的途径。在ASP中制作留言本是一件容易的事情,主要是对数据的读写操作。
下面将讲解一个完整的留言本制作实例。
具体步骤
1.建立Data.mdb数据库,它包括guest表,该表的数据结构如表
表12.6 Guest表结构
字段名称 |
数据类型 |
说明 |
ID |
自动编号 |
|
Name |
文本 |
用户名 |
|
文本 |
邮件地址 |
Title |
文本 |
标题 |
Content |
备注 |
留言内容 |
Time |
文本 |
留言时间 |
2.编写连接数据库的ASP文件“conn.asp”,代码如下:
<%
dim conn
dim connstr
on error resume next
connstr="DBQ="+server.mappath("data.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
if err then
err.clear
response.write "数据库连接出错!"
else
conn.open connstr
if err then
err.clear
response.write "读取数据库出错!"
end if
end if
%>
3.编写显示留言的ASP文件“index.asp”,代码请见光盘。
4.编写输入留言的ASP文件“guestbook.asp”,代码请见光盘。
5.编写保存留言的ASP文件“update.asp”,代码如下所示:
<%@ LANGUAGE="VBSCRIPT" %>
<%option explicit
Response.Cookies("UserInfo")("UserName")=trim(Request.Form("txtName"))
Response.Cookies("UserInfo")("UserEmail")=trim(request.form("txtEmail"))
Response.Cookies("UserInfo").Expires = now() + 365
%>
<%
function htmlencode2(str)
dim result
dim l
if isNULL(str) then
htmlencode2=""
exit function
end if
l=len(str)
result=""
dim i
for i = 1 to l
select case mid(str,i,1)
case "<"
result=result+"<"
case ">"
result=result+">"
case chr(13)
result=result+"
"
case chr(34)
result=result+"""
case "&"
result=result+"&"
case chr(32)
'result=result+" "
if i+1<=l and i-1>0 then
if mid(str,i+1,1)=chr(32) or mid(str,i+1,1)=chr(9) or mid(str,i-1,1)=chr(32) or mid(str,i-1,1)=chr(9) then
result=result+" "
else
result=result+" "
end if
else
result=result+" "
end if
case chr(9)
result=result+" "
case else
result=result+mid(str,i,1)
end select
next
htmlencode2=result
end function
dim WINNT_CHINESE
WINNT_CHINESE=(len("留言")=2)
function strLength(str)
if WINNT_CHINESE then
dim l,t,c
dim i
l=len(str)
t=l
for i=1 to l
c=asc(mid(str,i,1))
if c<0 then c=c+65536
if c>255 then
t=t+1
end if
next
strLength=t
else
strLength=len(str)
end if
end function
sub chkInput()
if Trim(sName)="" then
sName="过客"
elseif strLength(sName)>=50 then
foundError=true
ErrorMsg=ErrorMsg+"
end if
if strLength(sEmail)>255 then
foundError=true
ErrorMsg=ErrorMsg+"
end if
if Trim(sTitle)="" then
sTitle="<无主题>"
elseif strLength(sTitle)>255 then
foundError=true
ErrorMsg=ErrorMsg+"
end if
if Trim(sInput)="" then
foundError=true
ErrorMsg=ErrorMsg+"
elseif strLength(sInput)>16384 then
foundError=true
ErrorMsg=ErrorMsg+"
end if
end sub
sub getInput()
sName=request.form("txtName")
sEmail=request.form("txtEmail")
sTitle=request.form("txtTitle")
sInput=request.form("txtContent")
end sub%><%
dim sql
dim rs
dim sName
dim sEmail
dim sTitle
dim sInput
dim foundError
dim errorMsg
getInput()
chkInput()
if foundError then
call showErrors()
else
saveData()
if foundError then
call showErrors()
else
call success()
end if
set rs=nothing
conn.close
set conn=nothing
end if
sub saveData()
on error resume next
dim cmdTemp
dim rs
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText = "SELECT * FROM guest where name is null"
cmdTemp.CommandType = 1
Set cmdTemp.ActiveConnection = conn
rs.Open cmdTemp, , 1, 3
rs.addnew
rs("name") =htmlencode2(sName)
rs("email") =htmlencode2(sEmail)
rs("title") =htmlencode2(sTitle)
rs("content") =htmlencode2(sInput)
rs("time") =cstr(now())
rs.Update
rs.close
conn.close
set rs=nothing
set conn=nothing
if err>0 then
err.clear
foundError=true
ErrorMsg="
end if
end sub
sub showErrors()%>
不 能 保 存 留 言 !
- <%=ErrorMsg%>
<%end sub%>
<%sub success()
response.write "
Content='2;url=index.asp'>"
response.write "
response.write "
"response.write "
"
response.write "
谢 谢 您 的 留 言 !
response.write "
2秒后将自动 返 回
response.write ""
end sub%>
提示:在本节实例中使用了Cookies保留用户信息,以便用户下次登录时可以不用再输入用户信息。