Как я могу сделать так, чтобы только вошедший в систему пользователь видел свою оценку? - PullRequest
0 голосов
/ 27 февраля 2019

Это таблица информации о студенте, откуда информация о студенте взята из // Это код пользователя для входа в систему, и он получает информацию о входе пользователя в систему из таблицы studentinfo.

private void btnlogin_Click(object sender, EventArgs e)
{
        i = 0;
        con.Open();
        MySqlCommand cmd = con.CreateCommand();

        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "select * from stdinfotable WHERE Username='" + textuser.Text + "' and Password= '" + textpass.Text + "'";
        cmd.ExecuteNonQuery();

        DataTable dt = new DataTable();
        MySqlDataAdapter dta = new MySqlDataAdapter(cmd);
        dta.Fill(dt);

        i = Convert.ToInt32(dt.Rows.Count.ToString());

        if(i==0)
        {
            MessageBox.Show("Error");
        }
        else
        {
            this.Hide();
            StudentPage f = new StudentPage();
            f.Show();
            MySqlDataAdapter data = new MySqlDataAdapter("ViewAllGrades", con);
            data.SelectCommand.CommandType = CommandType.StoredProcedure;
            DataTable dtTable = new DataTable();

            data.Fill(dtTable);
            dtTable.Select("Last_Name");

            f.stdGrade.DataSource = dtTable;
            f.stdGrade.Columns[0].Visible = false;
        }

        con.Close();
}

Это хранимая процедура ViewlAllGrades, в которой информация о классе возвращается из

 CREATE DEFINER=`root`@`localhost` PROCEDURE `ViewAllGrades`()
 BEGIN
    SELECT * 
  FROM  Grades;

  END

Я пытаюсь сделать так, чтобы только зарегистрированый пользователь мог просматривать свою оценкувместо просмотра каждой пользовательской оценки.Поэтому мне интересно, должен ли я попытаться сделать это в хранимой процедуре или в Visual Studio, и как бы мне этого добиться?Кроме того, мои первичные ключи, которые являются идентификаторами из обеих таблиц, автоматически увеличиваются, поэтому я не могу использовать их

1 Ответ

0 голосов
/ 27 февраля 2019

Прямо сейчас ваша хранимая процедура выбирает все оценки.Первое, что нужно сделать, - это параметризовать запрос, приняв пользователя в качестве ввода и используя предложение WHERE, чтобы найти только оценки для этого учащегося.Не видя ваших таблиц, я не могу точно сказать, как это будет выглядеть, но в качестве примера: SELECT * FROM Grades WHERE StudentId = @StudentId;

Второе, что вам нужно выяснить, - это как получитьидентификатор студента текущего пользователя, а затем передать его в хранимую процедуру.Опять же, не видя ваших таблиц, я с трудом догадываюсь.Похоже, у вас уже есть имя пользователя текущего пользователя.Можете ли вы выполнить запрос, чтобы найти studentId по имени пользователя?Если это так, то сначала вам нужно запустить эту процедуру с именем пользователя в качестве параметра для получения studentId.

Третья проблема связана с вашим первым запросом.Поскольку он не был параметризован, он подвержен атакам SQL-инъекций.Это создает серьезную угрозу безопасности.Если кто-то злонамеренно вводит имя пользователя или пароль, он может избежать SQL, который вы намеревались запустить, и отбросить все ваши таблицы.

Надеюсь, это поможет!

...