0

私のコードによると、「あなたのパスワードは正常に変更されました!、おめでとうございます!」更新が機能していないにもかかわらず、メッセージが表示されます。更新が行われなかった場合にエラー メッセージを表示するにはどうすればよいですか (更新ステートメントにもエラーがあるようです..)。実際、ここで if ステートメントを使用する方法を想像できませんでした..

    protected void Button1_Click(object sender, EventArgs e)
    {
        MySqlConnection connection = new MySqlConnection("server=localhost; database=e-learningsystem; uid=root; password=123;port=3307;");
        connection.Open();
         try
         {

             MySqlCommand cmd1 = new MySqlCommand("UPDATE student Set Password= '" + TextBox3.Text + "' WHERE UserName='" + TextBox1.Text + "' AND Password='"+TextBox2.Text+"'", connection);
             cmd1.ExecuteNonQuery();
             Response.Write(@"<script language='javascript'>alert('Your Password Has Been Changed successfully!, Congratulations!')</script>");
             connection.Close();
            }
         catch (Exception ex)
           {
             Response.Write(@"<script language='javascript'>alert(ex.Message)</script>");
            }
    }
4

2 に答える 2

3

cmd1.ExecuteNonQuery()影響を受けた行数を返します。したがって、クエリが任意のレコードを更新すると、0 行を超える行 (この場合、その特定のユーザーの 1 行) が返されます。

if(cmd1.ExecuteNonQuery()>0)
{
   // successfull 
}
else
{ 
  // failure
}

クエリでこのような値を渡さないでください。SqlParameterを使用してクエリでパラメータを渡し、SQL インジェクションを回避してみてください。

于 2013-06-09T06:29:16.387 に答える
0

Sachin's Answerは、メッセージ ボックスのポップアップの問題の解決策を提供します。

しかし、なぜ独自の認証メカニズムを実装するのでしょうか? asp.net メンバーシップ プロバイダーを使用しない理由はありますか?

それには正当な理由があると仮定してください。ただし、カスタム認証を実装している場合は、このSample Membership Provider Implementationを確認してください

たとえば ChangePassword メソッド:

public override bool ChangePassword(string username, string oldPwd, string newPwd)
{
    // validate the user first, you are not doing any validation 
    // logged in user can change any other users password in your approach 
    if (!ValidateUser(username, oldPwd))
    return false;

    //new password validation and giving proper message if failed 
    // skip this code from given link

    // use parameterized query as below 
    OdbcConnection conn = new OdbcConnection(connectionString);
    OdbcCommand cmd = new OdbcCommand("UPDATE Users "  +
          " SET Password = ?, LastPasswordChangedDate = ? " +
          " WHERE Username = ? AND ApplicationName = ?", conn);

    cmd.Parameters.Add("@Password", OdbcType.VarChar, 255).Value = EncodePassword(newPwd);
    cmd.Parameters.Add("@LastPasswordChangedDate", OdbcType.DateTime).Value = DateTime.Now;
    cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
    cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;


    int rowsAffected = 0;

    try
    {
        conn.Open();
            // this is how you can check whether row updated or not 
        rowsAffected = cmd.ExecuteNonQuery();
    }
    catch (OdbcException e)
    {
        // you need to have proper error handling as well 
        if (WriteExceptionsToEventLog)
        {
          WriteToEventLog(e, "ChangePassword");

          throw new ProviderException(exceptionMessage);
        }
        else
        {
          throw e;
        }
    }
    finally
    {
        conn.Close();
    }

    if (rowsAffected > 0)
    {
        return true;
    }

    return false;
}
于 2013-06-09T06:58:56.590 に答える