Я использую одну и ту же страницу входа как для обычных пользователей, так и для администраторов, но после входа в систему система должна перевести обоих пользователей на разные страницы.
общий пользователь и администратор используют одну и ту же таблицу для регистрации. регистрационная таблица имеет поле user_type, которое создает разницу между общим пользователем и пользователем admin. оба пользователя используют один и тот же экран входа в систему. но после успешного входа в систему страница входа должна направлять как пользователя, так и администратора на разные страницы. если тип пользователя равен 1, то это admin и если тип пользователя 2, то это обычный пользователь. я использую приведенный ниже код на странице входа в систему, но он кажется неправильным. пожалуйста, дайте мне знать, какая коррекция требуется.
когда я нажимаю кнопку входа в систему, система показывает ниже ошибку.
Неправильный синтаксис рядом с ','
Что я уже пробовал:
SqlConnection con = новый SqlConnection();
против.Параметр ConnectionString = "Источник Данных=.\\именем sqlexpress;начальный каталог=college_education;идентификатор пользователя=СА;пароль=система;";
против.Открыть();
строки Q = "выбрать * из user_details где пользователь='" + текстовое поле textbox1.Текст + "', пароль='" + поле textbox2.Текст + "',user_type='"+textbox3 и.Текст+"'";
SqlCommand com = new SqlCommand(q, con);
SqlDataReader sdr = com.Метода executereader();
если (СДР.Читать())
{
Сеанс["пользователь"] = СДР["имя_пользователя"];
Session ["password"] = sdr ["password"];
Session ["user type"] = sdr ["user_type=1"];
Ответ.Перенаправление ("adminfilerecord. aspx");
Jon McKee
Я не вижу никаких очевидных проблем с первого взгляда. Какая строка вызывает эту ошибку? Вы сделали какую-нибудь отладку? Каковы были результаты? То есть очевидные проблемы, выходящие за рамки конкатенации SQL-запроса.
TextBox1.Text = "user123'; drop table user_details; --";
Member 12950401
ошибка отображается на нижней строке.
SqlDataReader sdr = com.Метода executereader();
Jon McKee
Помимо использования while
вместо if
(если это явно не то, что вы хотите) и то, что я упомянул выше, я честно не вижу проблемы с этим кодом. Я не вижу никаких проблем с вашим цитированием. Вы поставили точку останова в строке, которая выдает ошибку, и изучили, как выглядит SQL-запрос и связанные с ним объекты?
OriginalGriff
*кашель*
выберите * от user_details где имя_пользователя='Моеимя',='пароль Мойпароль', user_type='тип'
Допустимый SQL?
SQL-инъекция?
Текстовые пароли, хранящиеся в clear?
Jon McKee
Я уже упоминал SQL-инъекцию в своем первом ответе =P "user123'; drop table user_details; -- " =D Raw password storage я не упомянул, хотя. Также хороший момент о самом SQL, я совершенно упустил, что это была запятая, а не "и": thumbsup: я слишком привык к LINQ =(