Многопользовательский вход с отслеживанием попыток входа - PullRequest
0 голосов
/ 12 июля 2020

Я учусь на c# и нуждаюсь в вашей помощи. Заранее спасибо. Я работаю над этой многопользовательской формой единого входа. Я подключился к локальной базе данных SQL со следующими столбцами: UserID, Password, UserType

Моя проблема в том, что приведенный ниже код работает нормально, если эти три значения верны. Если я, например, введу неправильный пароль, ничего не произойдет.

Это должно быть проблема с частью «Else» моего кода, но я пробовал так много изменений, что даже не помню, когда был близко к тому, чтобы заставить его работать. Пожалуйста помоги. Чтобы переформулировать мои ожидания от проекта: 1. Когда я выбираю Admin или Student из combobox (cmbusertype) и указываю Неверные ИД пользователя и пароль, я должен получить сообщение об ошибке с неверными учетными данными и количество оставшихся попыток. После 3 попыток кнопка входа должна быть отображается серым цветом, и мне предлагается сбросить пароль.

public partial class Loginsystem : Form
{
    public Loginsystem()
    {
        InitializeComponent();
    }
    int attempts =1;
    private void btnlogin_Click(object sender, EventArgs e)
    {
        if (cmbusertype.SelectedItem == null)
        {
            MessageBox.Show("Please select User Type to continue...");
            cmbusertype.Focus();
            return;
        }
        if (txtuserid.Text == "")
        {
            MessageBox.Show("Please enter your UserID...");
            txtuserid.Focus();
            return;
        }
        if (txtpassword.Text == "")
        {
            MessageBox.Show("Please enter your password...");
            txtpassword.Focus();
            return;
        }

        try
        {
            SqlConnection con = new SqlConnection(@"Data Source = (LocalDB)\MSSQLlocaldb; Initial Catalog = AdminAuthentication; Integrated Security = True"); ;
            SqlCommand cmd = new SqlCommand("select * from SimplifyLogin where userID='" + txtuserid.Text + "' and password='" + txtpassword.Text + "'", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            string cmbItemValue = cmbusertype.SelectedItem.ToString();
            if (dt.Rows.Count >0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {

                    if (dt.Rows[i]["UserType"].ToString() == cmbItemValue) //you can use 2 instead of usertype in that index because usertype column is in 2 index
                    {
                        if (cmbusertype.SelectedIndex == 0)
                        {
                            MessageBox.Show("You are logged in as " + dt.Rows[i][2]);
                            MessageBox.Show("Displaying Admin Dashboard");
                            this.Hide();
                        }

                        else
                        {
                            MessageBox.Show("Welcome Student! Displaying Exam Options");
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Invalid username and/or Password.Please try again. \nAttempts: " + attempts + "out of of 3");
                        txtpassword.Clear();
                        attempts++;
                    }

                    if (attempts == 4)
                    {
                        MessageBox.Show("You have reached maximum login attempts. Click 'Forgot Password' below to reset it.");
                        btnlogin.Enabled = false;

                    }
                }
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

}

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Сегодня утром я понял:

Вот внесенные мной изменения:

Избавился от одного из вложенных ifs

if ((dt.Rows [i ] ["UserType"]. ToString () == cmbItemValue) && (cmbusertype.SelectedIndex == 0))

скорректировано} как необходимо.

0 голосов
/ 12 июля 2020

Я могу настроить этот код, потому что вы не должны использовать его для l oop, потому что количество строк, возвращаемых из базы данных, будет равно единице, поэтому ...

public partial class Loginsystem : Form {
public Loginsystem() {
    InitializeComponent();
}
private int attempts = 1;
private void btnlogin_Click(object sender, EventArgs e) {
    if (cmbusertype.SelectedItem == null) {
        MessageBox.Show("Please select User Type to continue...");
        cmbusertype.Focus();
        return;
    }
    if (txtuserid.Text == "") {
        MessageBox.Show("Please enter your UserID...");
        txtuserid.Focus();
        return;
    }
    if (txtpassword.Text == "") {
        MessageBox.Show("Please enter your password...");
        txtpassword.Focus();
        return;
    }
    try {
      SqlConnection con = new 
      SqlConnection(@"Data Source = (LocalDB)\MSSQLlocaldb; Initial Catalog = AdminAuthentication; Integrated Security = True"); ;
      SqlCommand cmd = new SqlCommand("select * from SimplifyLogin where userID='" + txtuserid.Text + "' and password='" + txtpassword.Text + "'", con);
      SqlDataAdapter sda = new SqlDataAdapter(cmd);
      DataTable dt = new DataTable();
      sda.Fill(dt);
      string cmbItemValue = cmbusertype.SelectedItem.ToString();
      if (dt.Rows.Count > 0) {

        if(dt.Rows[0]["UserType"].ToString() == cmbItemValue) {

          if (cmbusertype.SelectedIndex == 0 ) {
            MessageBox.Show("You are logged in as " + dt.Rows[0][2] + Environment.NewLine + "Displaying Admin Dashboard"); 
            this.Hide();
          } else {
            MessageBox.Show("Welcome Student! Displaying Exam Options");
            this.Hide();
          }
       } else {
            MessageBox.Show("Invalid username and/or Password.Please try again. \nAttempts: " + attempts + "out of of 3");
            txtpassword.Clear();
            attempts++;
            if (attempts == 4) {
              MessageBox.Show("You have reached maximum login attempts. Click 'Forgot Password' below to reset it.");
              btnlogin.Enabled = false;
            }
      }
    } catch (Exception ex) {
         MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...