|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
实例四、结合DW MX服务器行为在服务器端检验表单的合法性 虽然大家可以使用DW MX的“行为”的检查表单生成JS代码来检查用户提交的表单数据是否合法,但这是在客户端执行的,我们的用户千奇百样,假如使用较低版本的浏览器可能会使客户端检验失败,把不合法的信息插入到数据库中。这是不答应的。下面我们利用上面学习的request对象和判定语句添加到DW MX“服务器行为”代码中,实现服务器端检验表单,以杜绝不合法的表单信息。 新建一个ASP页,用ACCESS创建一个数据表,设计两个字段:“uers”、“pws”,设这两个字段为必填字段。用“自定字符串”连接数据库。在页面中插入表单、三个文本域、一个按扭,表单方式为:“POST”,按扭类型为“提交表单”,三个文本域名称对应如下: 用 户 名:uers 密 码:pws 重复密码:pws2 现在,要求这三项为必填项,并且“密码”必须等于“重复密码”,否则告诉操作者,输入有误,请返回!。操作步骤以下: 实例三(3) 1、插入“插入记录”服务器行为,按“F12”键预览页面,能正常插入记录。 2、找到以下几句代码: <% \\\' *** Insert Record: set variables If (CStr(Request("MM_insert")) = "form1") Then MM_editConnection = MM_new_STRING MM_editTable = "use" MM_editRedirectUrl = "" MM_fieldsStr = "uers|value|pws|value" MM_columnsStr = "Cuse|\\\',none,\\\'\\\'|pws|\\\',none,\\\'\\\'" \\\' create the MM_fields and MM_columns arrays MM_fields = Split(MM_fieldsStr, "|") MM_columns = Split(MM_columnsStr, "|") .......... 插入记录代码.... %> 在上面这句“If (CStr(Request("MM_insert")) = "form1") Then”下面输入以下代码: if request.Form("uers")="" then response.write"对不起!请输入用户名!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws")="" then response.write"对不起!请输入密码!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws2")="" then response.write"对不起!请输入重复密码!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws")<>request.form("pws2") then response.write"对不起!两输入的密码不相符!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end end if 形如: If (CStr(Request("MM_insert")) = "form1") Then \\\'手写代码始 if request.Form("uers")="" then response.write"对不起!请输入用户名!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws")="" then response.write"对不起!请输入密码!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws2")="" then response.write"对不起!请输入重复密码!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end elseif request.form("pws")<>request.form("pws2") then response.write"对不起!两输入的密码不相符!请<a href=\\\'untitled-5.asp\\\'>返回!</a>" response.end end if\\\'手写代码结束 MM_editConnection = MM_new_STRING MM_editTable = "use" MM_editRedirectUrl = "" MM_fieldsStr = "uers|value|pws|value" MM_columnsStr = "Cuse|\\\',none,\\\'\\\'|pws|\\\',none,\\\'\\\'" 本例中,除了request对象外,我们用到了response对象的write方式输出提示信息,和end方式来结束脚本执行,阻止response.end以后的代码继承执行,这样就轮不到数据插入那一段代码了。 好了,关于判定语句的介绍就到这儿了,你可要把握这点内容,在设计论坛时,它大有用处。 二、response对象――向客户端输出数据 前面介绍的例子有用到了Response对象的write方式向客户端输出数据和和end方式结束脚本执行。本节将具体介绍它。 response对象与request对象工作原理相反,response对象是把由request对象从客户端接收过来的数据进行加工处理后,再把“加工“好的“成品”输出给客户端浏览器。 response对象语法格式: response[(集合)|属性|方式] 先试试response对象的神奇魅力。 1、response.write方式的使用――向直接客户端浏览器输出数据 实例一、使用response对象向客户端输出数据信息 新建ASP页,在<body></body>标签内输入以下语句: <%response.write("欢迎学习response对象实例!") %> 完整代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> </head> <body> <%response.write("欢迎学习response对象实例!") %> </body> </html> 按“F12”键试试,是不是把文字显示出来? response.writ方式还可以输出字串的结果或函数,假如是变量的话,就要先定义和赋值。response.write可输出HTML标准格式代码。 实例二、使用response.write输出当前系统时间及HTML超链接 在新建文件的<body>和</body>标签间输入下面代码: <p> <%response.write (now()) %> </p> <p> <% response.write("<a href=\\\'index.asp\\\'>打开主页</a>")%> 这里的<a href=\\\'index.asp\\\'>打开主页</a>是标准的HTML格式,不过\\\'index.asp\\\'用的是单引号,以避免与ASP脚本冲突混淆。 按“F12”试试效果。 注:常用的时间函数: now() 获取当前系统日期和时间,ASP输出可以这样写:<%=now()%> Year(now()) 获取年份, ASP输出:<%=Year(now())%> Month(now()) 获取当前月份,ASP输出:<%=Month(now())%> day(now()) 获取当天数,ASP输出:<%=day(now())%> Minute(now()) 获取分钟数,ASP输出:<%=Minute(now())%> Second(now()) 获取秒钟数,ASP输出:<%=Second(now())%> date() 获取当前系统日期,格式为:2004-2-28 time() 获取当前系统时间,格式为:22:24:59 用response.write方式输出字符串信息时,“()”集合内必须在英文方法下的一对“""”双引号。假如是函数和数字类数据就不用了,如: 文本字符串输出:<% response.write ("输出文本信息")%> 函数输出:<% response.write (now())%> 数字输出:<% response.write (1142568147)%> 还可用“&”来准确区分数字或函数和文本混合输出: <% yy="这里输出变量的值了"\\\'赋值给变量“yy”,假如是文本加“""” response.write ( now()&" 这儿输出文本"&" "&yy ) %> 2、response.redirect方式――链接到新网址 假如希望用户能在浏览器链接到另外一个网址的话,response.redirect方式可实现此功能。也许有些朋友会想到用js代码也能实现这个功能呀!不过,我们是在服务器端执行的,不受客户端浏览器版本影响。 实例三、“友情链接”的页面 新建一个ASP页,插入表单、列表/菜单、按扭,表单方式为“GET”,“列表/菜单”名称为“url”,“目标”为“_blank”,动作选择它自己。如下图: 列表/菜单的值和标签如下: 在<html>标签上方输入以下代码: <% select case request.QueryString("url") case "1" response.Redirect("http://www.163.com") case "2" response.Redirect("http://www.sina.com") case "3" response.Redirect("http://www.sohu.com") case "4" response.Redirect("http://www.6to23.com") end select %> 完整的代码以下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% select case request.QueryString("url") case "1" response.Redirect("http://www.163.com") case "2" response.Redirect("http://www.sina.com") case "3" response.Redirect("http://www.sohu.com") case "4" response.Redirect("http://www.6to23.com") end select %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> </head> <body> <form action="Untitled-6.asp" method="get" name="form1" target="_blank"> <select name="url" id="url"> <option value="1">网易</option> <option value="2">新浪</option> <option value="3">搜狐</option> <option value="4">中国学生网</option> </select> <input type="submit" name="Submit" value="提交"> </form> </body> </html> 按“F12”键,选择你想去的网站吧! 3、使response.write方式实现循环输出 这里要涉及到一个VBScript脚本语言,很简朴的,却很有用,以后我们要做记录集分页的时候,要用到它。 for...next循环语句结构: for 变量=起始值 to 终值 step 步长值 循环体 next 下面做一个小例子: 实例五、循环输出字符数 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> </head> <body> <% for y=1 to 50%> <%response.Write("字") %> <%next%> </body> </html> 按“F12”键预览,执行结果如下: 可见,它把一个字重复50次后输出,假如没有设置步长值,将按默认值(为1)处理。设置步长值: <% for y=1 to 50 step 2%> <%response.write(y)%> <%next%> 执行结果如下: 可见,输出是以“2”为步进的。 还可以改: <%response.Write("字") %> 为: <%response.write(y)%> 看看执行结果以下: 它把从“1”开始循环以1为步进值输出直至“50”终始。 我们就只先学这个循环语句。还有其它的do...loop、do while...loop、do until...loop、while...wend循环结构这里就不讲了,也许我们暂时会用不到手工接触这些东西。 4、response对象属性 response对象有下属性: * buffer 服务器缓冲。 * charset 将字符集合名称附加到response对象中的content-type标题的后面。 * contenttype 指定服务器响应的HTTP内容类型。 * expires 指定在浏览器上缓冲存储页面过期时间。 * expiresabsolute 指定在浏览器上缓冲存储页面的确切到期时间。 response对象方式: * write 向客户端直接输出信息。 * redirect 转向地址。 * end 停止程序执行。 * flush 用于立刻发送服务器缓冲区中的输出,必须设置response.buffer=true,否则报错。 * clear清除服务器缓冲区中的所有HTML输出。 response集合: * cookies 用于设置cookie的值。 response.cookies集合语法格式: response.cookies(变量名称)[(key)|属性]=等于写入的信息 “变量名称”则是指定cookies的名称,以便页面可以读取不同的cookies里的数据。 三、session对象――服务器特定用户会话 “session”对象在DW MX的帮助文档中称为“阶段变量”,当我们在页面插入“登陆用户”和“限制对页的访问”服务器行为后,它就是利用session对象来识别用户是否登陆。当创建该会话后,服务器对该页面进行跟踪,并分配内存存储session会话信息。session会话信息只有创建它的用户才能看到。 实例一、使用request.form方式将信息存储在session会话中 新建ASP页,在<HTML>标签上方输入这句代码: <%session("MM")=request.Form("y")%> 在<body>和</body>间输入以下代码: <form action="Untitled-6.asp" method="post" name="form1"> <select name="y" id="y"> <option value="网易">网易</option> <option value="新浪">新浪</option> <option value="搜狐">搜狐</option> <option value="中国学生网">中国学生网</option> </select> <input type="submit" name="Submit" value="提交"> </form> <p><%= Session("MM") %></p> 其中,<%= Session("MM") %>为读取session变量的值显示在页面上。 按“F12”键预览执行结果。 假如用request.QueryString方式数数据存储于session对象中的话,将<%session("MM")=request.Form("y")%> 改为: <%session("MM")=request.QueryString("y")%> 即可。 1、session.adandon方式 session对象只有一个方式,即abandon方式,它的作用是删除所有存储在session对象的数据,并释访这些资源。假如未明确地调用adandon方式,当会话超时(IIS服务器默认超时时间为900秒,这由空间服务器商决定),服务器将删除这些会话,以释放资源。 语法以下: <%session.adandon%> DW MX的“注销用户”代码剖析 <% \\\' *** Logout the current user. MM_logoutRedirectPage = "index.asp" Session.Contents.Remove("MM_Username") Session.Contents.Remove("MM_UserAuthorization") If (MM_logoutRedirectPage <> "") Then Response.Redirect(MM_logoutRedirectPage) %> 这段代码中就使用到的是Session.Contents.Remove属性来指定要删除的某个session变量,假如不指定“Contents.Remove”而使用“adandon”的话,它会把该页面创建的所有会话删除,但有时我们只需要删除其中一个或几个会话,而保留其它的会话状态。 删除多个会话: Session.Contents.Remove("MM_Username") Session.Contents.Remove("MM_UserAuthorization") ... 下面是DW MX的“限制对页的访问”服务器行为生成的代码: <% \\\' *** Restrict Access To Page: Grant or deny access to this page MM_authorizedUsers="" MM_authFailedURL="yesno.asp" MM_grantAccess=false If Session("MM_Username") <> "" Then If (true Or CStr(Session("MM_UserAuthorization"))="") Or _ (InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then MM_grantAccess = true End If End If If Not MM_grantAccess Then MM_qsChar = "?" If (InStr(1,MM_authFailedURL,"?") >= 1) Then MM_qsChar = "&" MM_referrer = Request.ServerVariables("URL") if (Len(Request.QueryString()) > 0) Then MM_referrer = MM_referrer & "?" & Request.QueryString() MM_authFailedURL = MM_authFailedURL & MM_qsChar & "accessdenied=" & Server.URLEncode(MM_referrer) Response.Redirect(MM_authFailedURL) End If %> 其中这句“If Session("MM_Username") <> "" Then”就是用来判定“MM_Username”会话变量是否有值,否则由“Response.Redirect(MM_authFailedURL)”转向出错页。 其实我们可以写个更简朴的: <% if session("MM_Uesrname")="" then response.Redirect("出错页.asp") response.end end if %> 该段代码判定“MM_Uesrname”session变量是否为空,是的话,用response.Redirect("出错页.asp")方式将用户带到“出错页.asp”,并用response.end方式来停上所有脚本处理,所以这段代码最好放在页面头部。 也可以把 response.Redirect("index.asp") 改为: response.write("对不起!请登陆!") 这样直接在同一个页面完成错误提示,不用那么的页转来转去,以便于站点文件治理。 好了,假如能纯熟地使用以上三个ASP内建的基本对象,就可以对DW MX的服务器行为进行修改,达到我们的目的。还有其它的一些对象这里就不讲了,因为DW MX的服务器行为能为我们生成这些代码,不必你从头到尾把ASP学个底朝天相同可以编出不一般的程序来。 返回类别: 教程 上一教程: ASP开发网页时需要牢记的注重事项列表 下一教程: ASP中通过OLEDB访问ORACLE的代码 您可以阅读与"实例学习DREAMWEAVER MX ASP编程基础2"相关的教程: · 实例学习DREAMWEAVER MX ASP编程基础1 · 菜鸟学习ASP教程之编程基础 · 实例演练ASP+XML编程(3) · 实例演练ASP+XML编程(1) · 实例演练ASP+XML编程(4) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |