看上去很美
论坛上有位MM发贴问了一个问题,真是惭愧,我一眼看上去就发现了一个比较明显的错误,估计可能是她的笔误.我刚回完贴不久,她用消息跟我联系了!错误依旧
原贴:
http://topic.csdn.net/u/20080609/13/ab9951e1-6195-4513-a619-b0e304af7c5a.html
先瞒着MM,没有征得人家的同意,转载人家的代码:)
<% set rst=server.createobject("ADODB.recordset") rst.open "select * from users where u_user='"& request.form("f_user") & "'",conn,1,1 if rst.recordcount>0 then response.write "用户名:"&request("f_user")&"已存在,请击后退按钮返回上一页!" response.end rst.close set rst=nothing conn.close set conn=nothing else rst.open "users",conn,1,3 rst.addnew rst("u_user")=request("f_user") rst("u_code")=request("f_code") rst.update rst.close set rst=nothing conn.clsoe set conn=nothing end if %>
我们一起来分析一下!
1.先用传过来的用户名查询是否存在!如果存在就提示,反之就注册.看上去很美
2.既然存在两个业务我们就一个一个看.
set rst=server.createobject("ADODB.recordset") rst.open "select * from users where u_user='"& request.form("f_user") & "'",conn,1,1 ' if rst.recordcount>0 then response.write "用户名:"&request("f_user")&"已存在,请击后退按钮返回上一页!" response.end rst.close set rst=nothing conn.close set conn=nothing
现在假设它只执行一个业务,所以if哪行我注释掉了,没有问题我们就继续看一下业务
<% set rst=server.createobject("ADODB.recordset") rst.open "select * from users where u_user='"& request.form("f_user") & "'",conn,1,1 'if rst.recordcount>0 then if 1 <> 1 then response.write "用户名:"&request("f_user")&"已存在,请击后退按钮返回上一页!" response.end rst.close set rst=nothing conn.close set conn=nothing else rst.open "users",conn,1,3 rst.addnew rst("u_user")=request("f_user") rst("u_code")=request("f_code") rst.update rst.close set rst=nothing conn.clsoe set conn=nothing end if %>
注释掉原来的if判断,我们用一个类似java的断言来短路代码,让执行流程跳到else块上执行.如果你看着还不是很清晰的话可以像上面哪样把它(if哪段代码)删掉,像这样:
<% set rst=server.createobject("ADODB.recordset") rst.open "select * from users where u_user='"& request.form("f_user") & "'",conn,1,1 '此处是删除的部分占位 rst.open "users",conn,1,3 rst.addnew rst("u_user")=request("f_user") rst("u_code")=request("f_code") rst.update rst.close set rst=nothing conn.clsoe set conn=nothing end if %>
现在,只要稍微写过点asp的人都能发现一个错误了:
rst.open "select * from users where u_user='"& request.form("f_user") & "'",conn,1,1
rst.open "users",conn,1,3
这两行执行完后(或执行不完时),会发生什么呢?