注册 登录
编程论坛 ASP技术论坛

为什么只能登陆一个用户!

中国男孩 发布于 2007-10-29 16:16, 849 次点击

我的一个注册程序,不知道错在哪里?
我注册了好多用户,但是登陆时,却只能登陆一个用户,而且是第一个注册的那个用户:
代码如下:
<!--#Include file="linkdata.asp"-->
<!--#Include file="hnzjzz_md5.asp"-->
<%
if request("action")="login" then Call login()
if request("action")="quit" then Call quit()
Sub login()
name=md5(Replace(Trim(Request.form("user_name")),"","'"))
pass=md5(Replace(Trim(Request.form("user_pass")),"","'"))

Set rs= Server.CreateObject("ADODB.Recordset")
sql="select id,user_name,user_pass from users"
rs.open sql,conn,1,1
if name<>rs("user_name") then
Response.Write "<script language=javascript>alert('用户不正确!');self.location=(""login.asp"");</script>"
elseif pass<>rs("user_pass") then
Response.Write "<script language=javascript>alert('密码不正确!');self.location=(""login.asp"");</script>"
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
End Sub

Sub quit()
Session("user_name")=""
Response.Write "<script language=javascript>alert('退出成功!');self.location=(""login.asp"");</script>"
End Sub
%>

9 回复
#2
永夜的极光2007-10-29 16:38
sql="select id,user_name,user_pass from users where user_name=" & name
rs.open sql,conn,1,1
if rs.eof and rs.bof then
Response.Write "<script language=javascript>alert('用户不正确!');self.location=(""login.asp"");</script>"
elseif pass<>rs("user_pass") then
Response.Write "<script language=javascript>alert('密码不正确!');self.location=(""login.asp"");</script>"
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
rs.close
set rs=nothing

#3
中国男孩2007-10-29 16:52
可,还是不行啊
#4
永夜的极光2007-10-29 17:04
说说现象撒,光一句“不行”我怎么帮你。。

顺便说说,用户名就没必要用md5加密了吧,这样多麻烦
#5
tianyu1232007-10-29 18:29
以下是引用中国男孩在2007-10-29 16:16:14的发言:

我的一个注册程序,不知道错在哪里?
我注册了好多用户,但是登陆时,却只能登陆一个用户,而且是第一个注册的那个用户:
代码如下:
<!--#Include file="linkdata.asp"-->
<!--#Include file="hnzjzz_md5.asp"-->
<%
if request("action")="login" then Call login()
if request("action")="quit" then Call quit()
Sub login()
name=md5(Replace(Trim(Request.form("user_name")),"","'"))
pass=md5(Replace(Trim(Request.form("user_pass")),"","'"))

Set rs= Server.CreateObject("ADODB.Recordset")
sql="select id,user_name,user_pass from users"
rs.open sql,conn,1,1
if name<>rs("user_name") then
Response.Write "<script language=javascript>alert('用户不正确!');self.location=(""login.asp"");</script>"
elseif pass<>rs("user_pass") then
Response.Write "<script language=javascript>alert('密码不正确!');self.location=(""login.asp"");</script>"
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
End Sub

Sub quit()
Session("user_name")=""
Response.Write "<script language=javascript>alert('退出成功!');self.location=(""login.asp"");</script>"
End Sub
%>

像你这样的写法,也可以实现登陆的验证!但你没有写循环,指针没有移动,始终在第一条记录!所以只能登陆一个

用户,并且是第一个注册的用户,即第一个记录!

像你这样的写法效率也是低的!因为它要读取数据库中的所有数据!

建议使用这样的写法:

<!--#Include file="linkdata.asp"-->
<!--#Include file="hnzjzz_md5.asp"-->
<%
if request("action")="login" then Call login()
if request("action")="quit" then Call quit()
Sub login()
name=md5(Replace(Trim(Request.form("user_name")),"","'"))
pass=md5(Replace(Trim(Request.form("user_pass")),"","'"))

Set rs= Server.CreateObject("ADODB.Recordset")
sql="select id,user_name,user_pass from users where user_name='"& name &"'"
rs.open sql,conn,1,1
if not(rs.bof and rs.eof) then
if pass<>rs("user_pass") then
Response.Write "<script language=javascript>alert('密码不正确!');self.location=(""login.asp"");</script>"
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
else
Response.Write "<script language=javascript>alert('用户不正确!');self.location=(""login.asp"");</script>"
end if
End Sub

Sub quit()
Session("user_name")=""
Response.Write "<script language=javascript>alert('退出成功!');self.location=(""login.asp"");</script>"
End Sub
%>



#6
中国男孩2007-11-01 17:44
回复:(tianyu123)以下是引用中国男孩在2007-10-29 ...

呵呵,谢谢大侠,我按照你的方法,去做,可以了,
但是,我不懂,那程序的意思,你能帮我翻译一下吗?
小弟,谢了

#7
天涯听雨2007-11-01 19:43
用户名也要加密?连自己在后台也不知道注册哪些用户名
#8
qhscqb2007-11-02 09:34
回复:(中国男孩)回复:(tianyu123)以下是引用中国...
'关键是下面这一句,它是SQL的条件查询语句
'select 字段 from 表 where 条件
sql="select id,user_name,user_pass from users where user_name='"& name &"'"
'上面的语句表示从users表中查询用户名(usr_name)是否为用户名变量name
'执行查询
rs.open sql,conn,1,1
'如果数据库中存在此用户
if not(rs.bof and rs.eof) then
'则判断密码是否正确
if pass<>rs("user_pass") then
'不正确
Response.Write "<script language=javascript>alert('密码不正确!');self.location=(""login.asp"");</script>"
'正确
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
'数据库中不存在此用户
else
Response.Write "<script language=javascript>alert('用户不正确!');self.location=(""login.asp"");</script>"
end if
#9
huoqilin2007-11-02 11:57
Set rs= Server.CreateObject("ADODB.Recordset")
sql="select id,user_name,user_pass from users where user_name='"&name&"' and user_pass='"&pass&"'"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
Response.Write "<script language=javascript>alert('用户名或者密码不正确!');self.location=(""login.asp"");</script>"
else
Response.Write "<script language=javascript>alert('登陆成功!');self.location=(""Myzone.asp"");</script>"
Session("user_name")=rs("user_name")
end if
#10
中国男孩2007-11-02 20:24

呵呵,谢谢,我懂了

1