[柴原创经验]asp之 地址栏参数传递 和 程序顺序控制

在asp学习中,最初的一个练习项目,web_book ,asp 柴高八斗留言本的login.asp 中,代码是这样的:


处理代码如下:
<%
if request.QueryString("act")="login" then     '管理员登陆
user = Request.Form("username")       '读取从表单传递过来的用户名数据
   pass = Request.Form("password")       '读取从表单传递过来的密码数据
   Set NArs=Server.CreateObject("Adodb.RecordSet")   '建立RecordSet 对象
   '从数据库中查找Admin 列的值为user,pwd 列的值为pass 的记录
    sql="Select * from note_admin where Admin='"&user&"' and pwd='"&pass&"'"
    '执行查询操作,并将结果保存在NArs 中
    NArs.open sql,objconn,1,1
    If not(NArs.bof and NArs.eof) Then                  '存在满足条件的记录,则登录成功
    Session("login") = "ok"        '将Session 变量login 置为ok
      Response.Redirect "admin_main.asp?action=main" '页面转到留言管理界面
    Else              
    Response.Write("<script>alert('管理员用户名称或密码输入有误,请检查后重新输入!');history.bac()     </script>")
    Response.End
    End If
    NArs.Close            '关闭RecordSet 对象
    Set NArs= nothing
End If
%>


前台设计代码如下:
<form action="login.asp?act=login" method=post name=booklogin onsubmit = "return check()">
    用户名:<input type="text" name="username" value="" title="请填写用户名" /> 
     密   码:<input type="password" name="password" value="" title="请填写登陆密码" />
                 <input name="submit" type="submit" class="btn" value="管理登陆" />
</form>

----------------------------------------------------------------------------------------------------------------------
之前很长一段时间,我都忽视了提交按钮 submit 的作用,提交按钮一按,表单就打开 action= 后面 的页面,从单词上面来理解,就是该表单作用于什么页面?这里的 ?act=login 这里的参数也会被带到地址栏去。

所以,在程序处理的页面 第一行:if request.QueryString("act")="login" then    这里,只要地址栏的("act")="login",就可以判断用户是在执行登录,从而开始接收表单传过来的值。然后,查询数据库等等操作。

以下为表单验证
<script language="javascript" type="text/javascript"> 注意:此页面的表单验证放在客户端在。
function check(){       
if(booklogin.username.value==""){  
   alert("用户名不能为空!");   
   booklogin.username.focus();   
   return false;
}
if(booklogin.password.value==""){  
   alert("密码不能为空!");    
   booklogin.password.focus();   
   return false;
}
return true;
}   
</script>


OK!以上没有任何问题。
=================================================================================================================


接下来我们讨论一些其他形式的表单提交!这里最值得讨论的就是:
如果表单提交不在同页面如何弄?表单的页面不带参数如何弄?
那么,第一步,要先建一个程序处理页,如login_ing.asp ,然后,在程序处理页中写代码接收表单传过来的数据。第二步,form 的 action = login_ing.asp  .当然,表单验证也可采用客户端来完成。

试想:如果去掉 action="login.asp?act=login" , 并且,if request.QueryString("act")="login" then 去掉!那么运行之后就会弹出:管理员用户名称或密码输入有误,请检查后重新输入!

为什么会这样?
其实很简单:程序在页面中,在你不做任何判断的时候,它是按照从上到下的顺序来读取执行的,它在你还没有提交表单的时候,就从上到下来执行了!表单都没提交,那里的获取值呢?所以,就弹出那个错误。

上面的程序处理代码:if request.QueryString("act")="login" then 。。。只所以会这样 if 判断一下,就是为了防止自动就程序执行。

正确的顺序就是:
表单 submit 提交后---------》客户端验证---------》提交到 action 的页面 并带了一个参数给地址栏 ---------》程序中做判断,如果从地址栏获取到了参数,就开始后面的执行。


总结:
如果 前台表单代码 跟 程序处理代码 在同一张页面的,必须表单传值,然后,程序判断接值 来做!

如果 前台表单代码 跟 程序处理代码 在同两张页面的,那么前台页面做好 表单控件 和 表单验证 以及 action设置好提交页 和 表单 onsubmit 调用JS验证 然后,再单独做一个 程序处理页。

转载于:https://my.oschina.net/u/583531/blog/842747

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值