2017-04-08 34 views
-1

我是ASP.net的新手,目前無法創建簡單的登錄表單。建立到我的數據庫的連接後,我希望函數檢查數據庫中是否存在用戶名和密碼的組合。由於我還沒有創建「成員區域」頁面,所以如果數據有效並且在相反的情況下返回「登錄失敗」,它應該什麼也不做。出於某種原因,它不起作用。如果有人能幫我追蹤這個問題,我會很高興。在ASP.net中登錄表單不起作用

protected void Login_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new 
SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 
    string query = "SELECT * FROM users WHERE username='" + UserName.Text + 
"' AND password='" + Password.Text + "' "; 
    SqlCommand cmd = new SqlCommand(query, con); 
    string output = cmd.ExecuteScalar().ToString(); 

    if (output == "1") 
    { 
     //Creating a session for the user 
     Session["user"] = UserName.Text; 
     Response.Redirect(""); 
    } 
    else 
     Response.Write("Login failed."); 

} 
+0

什麼錯誤。你應該使用調試器來查明。 – siddstuff

+0

沒有錯誤,但頁面只是重新加載而沒有其他任何事情發生。 –

+0

你應該研究參數化查詢和sql注入。你的代碼現在是脆弱的。 – VDWWD

回答

1

您在查詢SELECT * FROM和你正在使用ExecuteScalar方法來檢查是否返回任何東西。

您應該使用SELECT COUNT(*) FROM來獲取表中給定用戶名和密碼的行數。

另一件不合適的代碼是生成查詢。使用參數化查詢是最推薦的方法。

protected void Login_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 

    string query = "SELECT COUNT(*) FROM users WHERE [email protected] AND [email protected]"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.Parameters.Add(new SqlParameter("@userName", UserName.Text)); 
    cmd.Parameters.Add(new SqlParameter("@password", Password.Text)); 
    con.Open(); 
    string output = cmd.ExecuteScalar().ToString(); 

    if (output == "1") 
    { 
     //Creating a session for the user 
     Session["user"] = UserName.Text; 
     Response.Redirect(""); 
    } 
    else 
    { 
     Response.Write("Login failed."); 
    } 

這應該可以解決您的問題。

0

你忘了開執行的ExecuteScalar之前的連接()

protected void Login_Click(object sender, EventArgs e) 
{ 
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 

string query = "SELECT COUNT(*) FROM users WHERE [email protected] AND [email protected]"; 
SqlCommand cmd = new SqlCommand(query, con); 
cmd.Parameters.Add(new SqlParameter("@userName", UserName.Text)); 
cmd.Parameters.Add(new SqlParameter("@password", Password.Text)); 

//Add Below line and test your code. 
con.Open(); 

string output = cmd.ExecuteScalar().ToString(); 

if (output == "1") 
{ 
    //Creating a session for the user 
    Session["user"] = UserName.Text; 
    Response.Redirect(""); 
} 
else 
{ 
    Response.Write("Login failed."); 
}