Как я могу сделать так, чтобы только авторизованный пользователь мог видеть свою оценку?

Это таблица информации о студентах, откуда поступает информация о студентах. //Это код входа для пользователя, и он получает информацию о входе пользователя из таблицы 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 и как мне добиться такого? Кроме того, мои первичные ключи, которые являются идентификаторами, из обеих таблиц автоматически увеличиваются, поэтому я не обязательно могу использовать эти

В этом вопросе недостаточно информации, а теги неверны, пожалуйста, обновите свой вопрос, добавив больше деталей. Не храните простые пароли в базе данных, никогда! Погуглите по теме, хешируйте пароли например. Кроме того, вы должны попытаться лучше организовать свой код и дать переменным осмысленные имена.

Norcino 27.02.2019 20:31

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

BEN K 27.02.2019 20:36

Такие теги, как mysql и mysql-workbench, здесь на самом деле не нужны, но помимо тегов код, которым вы поделились, кажется, уже делает то, что вы говорите, в операторе else вы уже заполняете таблицу, этот код не дает желаемых эффектов?

Norcino 27.02.2019 20:43

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

BEN K 27.02.2019 20:46

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

Norcino 28.02.2019 14:36

@ Мануэль, как я могу выразить это на языке кода, я все еще новичок.

BEN K 01.03.2019 18:59

Чтобы иметь возможность ответить, вам нужно добавить некоторые дополнительные детали, такие как структура данных.

Norcino 02.03.2019 17:52

@Norcino, что вы подразумеваете под структурой данных? Я изучаю это сам, если бы вы могли помочь, я был бы очень признателен.

BEN K 05.03.2019 19:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
59
1

Ответы 1

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

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

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

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

Я просто вставил в таблицу studentinfo

BEN K 01.03.2019 18:58

Другие вопросы по теме