| http://www.zk168.com.cn 招考学习网 2006-4-30 12:32:00 |
|
| -----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]-- |
修正ASP GuestBook留言本的错误 ----------------------------------------------------- 数据库的结构 gstbook.mdb 表config 结构 id autonumber(自动增量) owner char 50 留言本名称 pwd char 10 留言本维护密码 ps char 255 留言本的欢迎信息 homepage char 255 主页连接 注:id=1的记录用于保存站长的密码, 故ID=1的留言本不可用。
表book id autonumber guestbookID long name char 50 留言者的大名 sex char 50 留言者的性别 fromwhere char 50 留言者来自何处 homepage char 255 留言者的主页 email char 255 留言者的电邮地址 content memo(备注) 留言者的留言内容 reply memo 回复内容 dateandtime char 50 留言的日期 飞鸟按: 应该再加上回复的时间,俺太懒就不改了。
关于数据检查 数据检查就是检查对方输入的内容,如果对方留言,就必须至少 输入名字和留言。本程序是放在服务器端检查,飞鸟感觉用客户 端去检查,然后弹出MSGBOX告诉对方输错了,比较烦人,而且还 不能用msgbox显示中文(在英文系统下不能显示)。
程序处理输入内容的流程 call getInput() '获得输入的内容 call chkInput() '检查输入的内容 if foundError then '如果输入的内容有错误(比如少输入了内容,或长度超过了) call showErrors() '提示出错信息,并重新显示输入画面,对方已输入的内容 '也显示,方便对方修改 else saveData() '保存输入的内容 if foundError then '保存数据出错(通常是数据库操作失败, '飞鸟提供下载的程序实际上无法处理这 '种错误,鞠躬致歉,请阅读下面的内容) call showErrors() else '显示正常的画面或redirect到别处去 end if end if
处理错误 在文件的头上加上下面的语句 on error resume next 并且每个函数和过程内都应该加上这句 在可能出现错误的地方加上 if err.number<>0 then '应保存错误信息,或进行适当的处理 err.clear else '不出错的情况 end if 举例:savedata.asp <% on error resume next dim sql dim rs
dim sBookID dim sName dim sEmail dim sSex dim sFrom dim sHomePage dim sInput
dim foundError dim errorMsg
call getInput() call chkInput() if foundError then call showErrors() else saveData() if foundError then call showErrors() else response.redirect "default.asp?id="&cstr(sBookID) end if end if
sub saveData() on error resume next dim cmdTemp dim InsertCursor dim dataconn Set DataConn = Server.CreateObject("ADODB.Connection") dataconn.open connstr Set cmdTemp = Server.CreateObject("ADODB.Command") Set InsertCursor = Server.CreateObject("ADODB.Recordset") cmdTemp.CommandText = "SELECT * FROM book WHERE (name is null)" cmdTemp.CommandType = 1 Set cmdTemp.ActiveConnection = dataconn InsertCursor.Open cmdTemp, , 1, 3 InsertCursor.addnew InsertCursor("guestbookid") =clng(sBookID) InsertCursor("name") =sName InsertCursor("sex") =sSex InsertCursor("fromwhere") =sFrom InsertCursor("homepage") =sHomePage InsertCursor("email") =sEmail InsertCursor("content") =sInput InsertCursor("dateandtime") =cstr(now()) InsertCursor.Update InsertCursor.close dataconn.close '提供下载的程序使用sql语句插入留言,但不能保存大容量的字符串, '鞠躬致谦应该改成上面的形式,同理savaReply.asp也应做同样修改 if err>0 then err.clear foundError=true ErrorMsg="<li>数 据 库 操 作 失 败 !</li>" end if end sub
sub chkInput() '略 end sub
sub getInput() '略 end sub
sub showErrors() '略 end sub %>
飞鸟的留言本还存在的问题 1.中文下使用函数len()不能求出字串的字节数 故inc/char.inc增加下列内容 dim WINNT_CHINESE WINNT_CHINESE=(len("飞鸟论坛")=4)
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 将len替换成strLength即可。 飞鸟按:鞠躬致歉
2.sub showErrors()中显示对方输入内容也存在问题 可以做以下的实验 不输入“大名”,在"来自"中输入"test test"(含空格) 连续提交两次,就会出现问题:空格变成了XX; XXX大概是161还是160 如果在留言中输入</textarea>也会出现问题 解决:在inc/char.inc增加函数htmlencode2() function htmlencode2(str) dim result dim l 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(34) result=result+""" case "&" result=result+"&" case chr(9) result=result+" " case else result=result+mid(str,i,1) end select next htmlencode2=result end function 而sub showErrors() 改成 <input type="text" name="txtFrom" size="11" value="<%=htmlencode2(sFrom)%>"> 即可,其他的输入项目也同样修改(包括textarea) 飞鸟按:飞鸟提供下载的asp wwwboard也存在同样的问题,处理方法也一样。 鞠躬致歉
3.修改conn.inc处理无法创建connection的情况 <% dim conn dim connstr dim sessionname sessionname="gstbookconn"
on error resume next connstr="DBQ="+server.mappath("db/gstbook.mdb")+ _ ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"+ _ "DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;"+ _ "MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;"+ _ "Threads=3;UserCommitSync=Yes;" if isobject(session(sessionname)) then set conn=session(sessionname) else set conn=server.createobject("ADODB.CONNECTION") if err then err.clear %> <script language="javascript"> top.location="bookerr.htm" </script> <% 'bookerr.htm显示一些出错信息,比如数据库连接过多,请以后访问 else conn.open connstr set session(sessionname)=conn end if end if %>
飞鸟按: 就不提供补丁程序了,大家如果需要修改的话,就自己改8, 自己动手会有更多的心得。 :-)
|
| -----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]-- |
友情提醒:
1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网 友来信指正!
2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
4.如需转载请注明出处及作者,谢谢合作!
5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL: XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接! |
|