1

它是我使用 Classic ASP 制作的简单登录表单,用户和管理员可以使用相同的表单登录。

在数据库的“用户”表中,我创建了一个名为“状态”的字段,数据类型为 BIT(即“0”或“1”)值被接受。默认情况下,每个新注册用户的值为“0”。

我已经通过了一个查询,如果状态为“0”,则应将特定用户或管理员重定向到 Authentication.asp 页面,他将在其中回答一些问题,然后单击 SUBMIT,数据库中的状态值将设置为“1” . “1”表示用户或管理员已经填写了认证表格,可以重定向到他想要的页面,而不是重定向到Authentication.asp页面。为此,我使用了 If-elseif-else 语句。我重新检查了很多次,我的 if-else 语句似乎没有任何遗漏。但是即使我在数据库的状态列中手动输入“1”作为状态,我总是被重定向到身份验证页面。这是我的代码。

Session("Username")=request.form("user_name")
    if request.Form("sub_but") <> "" then
    sql = "SELECT * FROM Users WHERE UserName='"&request.form("user_name")&"' AND Password='"&request.form("pwd")&"'"
    rs.open sql, con, 1, 2  
    if rs.EOF then
            response.Write("<script language='javascript'>{attention_emp();}</script>")
        else
        if(rs("status")=1 & rs("login_type")="admin") then
                  Response.Redirect ("admin.asp")
        elseif(rs("status")=1 & rs("login_type")="emp") then
                      response.Redirect("leave.asp")
        else
                      response.Redirect("auth.asp") 
        end if  
    end if

    rs.close
    end if 
4

1 回答 1

4

不要使用“&”使用以下内容:

if(rs("status")=1 AND LCase(rs("login_type"))="admin") then
              Response.Redirect ("admin.asp")
    elseif(rs("status")=1 AND LCase(rs("login_type"))="emp") then
                  response.Redirect("leave.asp")
    else
                  response.Redirect("auth.asp") 
    end if  

在 vbScript 中,“&”是字符串连接运算符而不是逻辑运算符。这是vbScript 运算符的列表。

编辑还请注意,字符串比较区分大小写。我已更改比较以将数据库输出转换为小写。这也可能是您的问题的一个因素。

还要注意@Mirko 的评论!!!

编辑 2 从评论中澄清

如果您仍然总是被重定向到身份验证页面,则需要确定实际原因。对条件语句进行硬编码应该有助于将其排除为原因。另一种调试方法是拆分语句而不是重定向。见下文:

if(rs("status")=1 AND LCase(rs("login_type"))="admin") then
    Response.Redirect ("admin.asp")
elseif(rs("status")=1 AND LCase(rs("login_type"))="emp") then
    response.Redirect("leave.asp")
else
    Response.Write "Status: " & rs("status") & "<br />"
    Response.Write "Is Status 1: " & (rs("status")=1)  & "<br />"
    Response.Write "Login Type: " & rs("login_type") & "<br />"
    Response.Write "Is Login Type admin: " & (rs("login_type") = "admin") & "<br />"
    Response.Write "Is Login Type emp: " & (rs("login_type") = "emp") & "<br />"
end if  

这将帮助您确定if 和 if/else 语句中什么是真的,什么是假的。一旦你这样做了,你应该更清楚是什么导致你得到的行为。隔离并解决问题后,放回重定向。

于 2012-05-11T04:14:12.917 回答