Я работаю над формой регистрации нового пользователя, которая содержит только 3 поля: имя пользователя, пароль и подтверждение пароля. - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю над формой регистрации пользователя, содержащей только 3 поля Имя пользователя, пароль и подтверждение пароля.Но когда я вставляю данные, если пароль не совпадает, исключение появляется из-за несоответствия формы, но при нажатии OK данные вставляются в БД.что я должен сделать, чтобы он вставлял только соответствующий пароль

private void btn_save_Click(object sender, EventArgs e)
{
    try
    {
         conn.Open();
         OleDbCommand command = new OleDbCommand();
         command.Connection = conn;
         string query = "INSERT INTO Users (username,newpassword)values('" + txt_newusr.Text + "','" + txt_password.Text + "')";
         if (txt_password.Text == "" || txt_cnfpw.Text == "")
         {
             MessageBox.Show("Please enter values");
             return;
         }
         if (txt_password.Text != txt_cnfpw.Text)
         {
             MessageBox.Show("Password confirm password are not matching");
             txt_cnfpw.Focus();
         }
         MessageBox.Show(query);
         command.CommandText = query;
         command.ExecuteNonQuery();
         MessageBox.Show("Record Saved successfully");
         conn.Close();
   }
}

Ответы [ 3 ]

1 голос
/ 26 сентября 2019

Для правильной работы необходимо внести множество исправлений. Подобные исправления:

  • Используйте вместо параметризованных запросов параметрические запросы, чтобы избежать внедрения
  • Вставка процессатолько после проверки на стороне клиента (пустое совпадение пароля проверки и т. д.)
  • Использование для управления соединениями и командами

Я добавил пример ниже, пожалуйста, посмотрите

try
{
    string query = "INSERT INTO Users (username,newpassword)values(@username,@newpassword)";
    bool CanInsertNewUser = true;
    if (txt_newusr.Text=="" || txt_password.Text == "" || txt_cnfpw.Text == "")
    {
        CanInsertNewUser = false;
        MessageBox.Show("Please enter values");
    }
    if (txt_password.Text != txt_cnfpw.Text)
    {
        CanInsertNewUser = false;
        MessageBox.Show("Password confirm password are not matching");
        txt_cnfpw.Focus();
    }
    if (CanInsertNewUser)
    {
        using (OleDbConnection conn = new OleDbConnection("GiveYourConnectionStringHere"))
        {
            using (OleDbCommand command = new OleDbCommand())
            {
                conn.Open();
                command.Connection = conn;
                command.CommandText = query;
                command.Parameters.Add("@username", OleDbType.VarChar).Value = txt_newusr.Text;
                command.Parameters.Add("@newpassword", OleDbType.VarChar).Value = txt_password.Text;
                command.ExecuteNonQuery();
            }
        }
        MessageBox.Show("Success");
    }

}
catch (Exception ex)
{
    MessageBox.Show("OLEDB issues : " + ex.Message.ToString());
}
0 голосов
/ 26 сентября 2019

Как в случае успеха, так и в случае неудачи вы пытаетесь совершить транзакцию.Операторы сохранения должны выполняться только в том случае, если пароль совпадает.Переместите операторы сохранения в блоке успеха следующим образом.

if (txt_password.Text == txt_cnfpw.Text)
{
    MessageBox.Show(query);
    command.CommandText = query;
    command.ExecuteNonQuery();
    MessageBox.Show("Record Saved successfully");
}  
else
{
    MessageBox.Show("Password confirm password are not matching");
    txt_cnfpw.Focus();
}
0 голосов
/ 26 сентября 2019

Вы должны изменить это так

if (txt_password.Text == txt_cnfpw.Text)
{
    MessageBox.Show(query);
    command.CommandText = query;
    command.ExecuteNonQuery();
    MessageBox.Show("Record Saved successfully");
}
...