-2

ユーザーがログインできる Web サイトがあります。クライアントは、特定のユーザーがログインした回数を記録する方法を望んでいます。テーブルに「カウンター」行があります。ユーザーがログインしたときにカウンターを更新するようにアプリ (C# ASP.NET に組み込まれている) をプログラムするにはどうすればよいですか? このコードは正しいですか:

cmd.ExecuteNonQuery = "ブローカーセンターからカウンターを更新"

私は最近 (今月の 10 日のように) 卒業したばかりなので、これは初めてで、データベースについては何も知りません。仕事で学んでいるだけです。他のパラメーターや接続文字列などが必要な場合はお知らせください。これはボタンクリックイベントにあり、ユーザー名とパスワードを確認するための接続文字列が既に存在するため、別の接続文字列は必要ないと思いますが、よくわかりません。前もって感謝します!

さらに言えば、これがイベント全体です(ログインは正常に機能しますが、更新だけが私の質問です):

string connectionString =         
    ConfigurationManager.ConnectionStrings["moverschoiceConnectionString"].ConnectionString;    
OdbcConnection conn = new OdbcConnection(connectionString);   
conn.Open();   OdbcCommand cmd = new OdbcCommand();   
cmd.Connection = conn;   
cmd.CommandText = "select Email, Password from brokercenter where Email = '" + txtLoginEmail.Text + "'";   
OdbcDataReader reader = cmd.ExecuteReader();   

while(reader.Read())   
{     
    if (reader["Password"].ToString() == txtLoginPassword.Text)     
    {         
        reader.Close();
        if (cbRememberMe.Checked == true)
        {
            Response.Cookies["username"].Value = txtLoginEmail.Text;
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(1);
            Response.Cookies["password"].Value = txtLoginPassword.Text;
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(1);
        }
        else
        {
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(-1);
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(-1);
        }

            Response.Redirect("BrokerResources.aspx");     
        }     
        else     
        {         
            lblLoginError.Text = "Invalid Password";     
        }   
    }   
    lblLoginError.Text = "Invalid Email or Password";    
    reader.Close();

    cmd.ExecuteNonQuery = "UPDATE counter FROM brokercenter";
}
4

2 に答える 2

3

UPDATEまず、MySQLのリファレンスマニュアルでの使用について読む必要があります。

まさにあなたがやりたいことの例さえあります。
リンクからの引用:

式で更新するテーブルの列にアクセスする場合、UPDATEは列の現在の値を使用します。たとえば、次のステートメントは、col1を現在の値より1つ多く設定します。

UPDATE t1 SET col1 = col1 + 1;

基本的に必要なのはこれだけです。必要なWHEREのは、ユーザー名または電子メールの句とフィルターを追加することだけです。

さらに、このため、SQLインジェクションについて読む必要があります。

where Email = '" + txtLoginEmail.Text + "'"; 

このような文字列を連結してパラメータを渡すと、リンクで説明されている問題が発生する可能性があります。
これをより良くする方法の例があります。

于 2012-02-23T21:01:08.790 に答える
-1
cmd.ExecuteNonQuery = String.Format("UPDATE brokercenter SET counter = {0} WHERE Email = {1}", myCounter++, txtLoginEmail.Text);

ここで、「myCounter」はローカルカウンター変数です(データベースからも読み取る必要があります)。これは今意味がありますか?

于 2012-02-23T20:59:42.253 に答える