在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