2012-05-11 92 views
1

它,我使用的是經典ASP,用戶和管理員可以登錄使用相同的形式做了一個簡單的登錄表單經典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 
+1

我真的希望你會檢查SQL注入攻擊你提交的表單變量(如果沒有其他至少代替單引號),如果這是一個公共網站(或確實有惡意的內部用戶)。 – Mirko

回答

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 operators的列表。

編輯還指出,字符串比較是區分大小寫的。我已經改變了比較以將數據庫輸出轉換爲小寫。這也可能是你的問題的一個因素。

還注意到@Mirko評論!

EDIT 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/else語句。一旦你完成了這一點,應該變得更清楚,是什麼導致了你所得到的行爲。一旦你已經隔離並解決了問題,就把重定向放回去。

+0

第二,如果聲明具有JavaScript功能,則驗證無效的用戶名和密碼。如果用戶輸入錯誤的用戶名或密碼,則執行完美。 –

+0

@Mckenzi是「&」是javascript中的邏輯運算符。你在這裏使用VBScript。你厭倦了我的答案嗎? –

+0

是的,但相同的輸出..它仍然重定向到認證頁面 –