2017-04-08 6 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

)は、ExecuteScalarを(実行する前に、接続を開くのを忘れていました。デバッガを使って調べるべきです。 – siddstuff

+0

エラーはありませんが、ページは何も起こらずにリロードされます。 –

+0

parameratizedクエリと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

あなたはエラーとは何

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."); 
} 
関連する問題