Visual Studio 2010を使用して、mysqlデータベースでWebサービスを実行しています。
パスワードをチェックしてパスワード(現在のパスワード)を返す関数を作成しました。webmethodでは、関数を呼び出して、変更前の古いパスワードが等しいことを確認してから、mysqlコマンドを呼び出します。しかし、ユーザー/パスをデータベースから直接ダブルチェックしてコピーアンドペーストしても、Webメソッドの呼び出しは無効になります。誰かが私がどこで間違っていたのか見てください?または私が提供する必要がある他の情報はありますか。手伝ってくれてありがとう!
EDIT1:それは関数do_check_passwordの問題であるはずです。do_check_passwordを含むifループをブロックしてみましたが、正常に変更できます。
関数のコード
private string do_check_password(string username)
{
string connectionString = ConfigurationManager.ConnectionStrings["mysql"].ToString();
MySqlCommand dCmd = new MySqlCommand();
using (MySqlConnection mysqlCon = new MySqlConnection(connectionString))
{
mysqlCon.Open();
dCmd.CommandText = "select password from tbl_login WHERE username = ?username ";
dCmd.CommandType = CommandType.Text;
dCmd.Parameters.Add(new MySqlParameter("?username", username));
dCmd.Connection = mysqlCon;
dCmd.ExecuteNonQuery();
mysqlCon.Close();
MySqlDataAdapter da = new MySqlDataAdapter(dCmd);
DataTable dt = new DataTable();
da.Fill(dt);
string currentPassword = dt.Rows[0].ToString();
return currentPassword;
}
}
[WebMethod]
public string editUserPassword(string username, string oldPassword, string newPassword)
{
try
{
string connectionString = ConfigurationManager.ConnectionStrings["mysql"].ToString();
MySqlCommand dCmd = new MySqlCommand();
using (MySqlConnection mysqlCon = new MySqlConnection(connectionString))
{
if(do_check_password(username) == oldPassword)
{
mysqlCon.Open();
dCmd.CommandText = "UPDATE tbl_login SET password=?password WHERE username=?username";
dCmd.CommandType = CommandType.Text;
dCmd.Parameters.Add(new MySqlParameter("?username", username));
dCmd.Parameters.Add(new MySqlParameter("?password", newPassword));
dCmd.Connection = mysqlCon;
dCmd.ExecuteNonQuery();
mysqlCon.Close();
}
else
{
return string.Format( "invalid password");
}
}
return string.Format("password changed");
}
catch (Exception ex)
{
return string.Format(ex.Message);
}
}