分享
 
 
 

实例学习Dreamweaver MX ASP编程基础2

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

实例四、结合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()&"&nbsp;&nbsp;这儿输出文本"&"&nbsp;&nbsp;"&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)%>&nbsp;

<%next%>

执行结果如下:

可见,输出是以“2”为步进的。

还可以改:

<%response.Write("字") %>

为:

<%response.write(y)%>&nbsp;

看看执行结果以下:

它把从“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学个底朝天一样可以编出不一般的程序来。

上一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有