|
Вопрос # 4 460/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Требуется сделать систему входа по логину и паролю в приложение. Имеется СУБД MySQL c таблицей пользователей и паролей. А также форма с двумя кнопками и едитами. Подключение к БД установлено.
procedure TForm1.Button1Click(Sender: TObject);
begin
ext := Edit1.Text;
pas := Edit2.Text;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.
Что дальше не знаю. (((
 |
Вопрос задал: eJay (статус: Посетитель)
Вопрос отправлен: 27 июля 2010, 14:55
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 27 июля 2010, 18:15; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 27 июля 2010, 15:04 [#1]:
Наверно потом нужно выполнить запрос к базе вида
select * from users_table where username = ext and password = pass
(о том, что нужно проверять, что бы пользователь вводил корректные символы, а не пытался сделать SQL injection и о том, что пароли в явном виде лучше не хранить я умолчу, это и так должно быть понятно).
после того, как запрос выполнент, анализируем. Если ни одной записи не найдено - ругаемся и просим ввести пароль снова/выходим с программы. Если найдено- приветствуем пользователя и пускаем.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
eJay (статус: Посетитель), 27 июля 2010, 15:11 [#2]:
Да логика-то ясна. Ступор в том, что не знаю как выдернуть значения login и password
procedure TForm1.Button1Click(Sender: TObject);
begin
ext := Edit1.Text;
pas := Edit2.Text;
ZQuery1.SQL (SELECT * FROM users WHERE username = ext AND password = pass);
if ...
end;
|
|
Тов. Женька (статус: 3-ий класс), 27 июля 2010, 15:34 [#3]:
Конструкции "if... then..." на этапе авторизации лучше не использовать. Потому как это верный путь к относительно простому взлому программы.
А зачем "выдергивать" значения логина и пароля? Достаточно узнать количество возвращенных записей и уже опираться на эти данные.
|
|
eJay (статус: Посетитель), 27 июля 2010, 16:01 [#4]:
Супер ребята. Хоть кто нибудь пример кода?
procedure TForm1.Button1Click(Sender: TObject);
begin
ext := Edit1.Text;
pas := Edit2.Text;
ZConnection1.Connected := true;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('SELECT * FROM users WHERE extension ="Edit1.Text" AND password = "Edit2.Text"');
ZQuery1.Active :=true;
end;
|
|
Вадим К (статус: Академик), 27 июля 2010, 16:45 [#5]:
код выше не рабочий он будет всегда искать Edit1.text имя пользователя )))
наверно где то так лучше
procedure TForm1.Button1Click(Sender: TObject);
begin
ext := Edit1.Text;
pas := Edit2.Text;
ZConnection1.Connected := true;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('SELECT * FROM users WHERE extension ="+ext+" AND password = "+pas+"');
ZQuery1.Active :=true;
if ZQuery1.RecordCount = 0 then begin
ShowMessage('имя-пароль неверный или не существует');
end;
else if ZQuery1.RecordCount = 1 then begin
ShowMessage('Добро пожаловать, ' + ext);
end
else begin
ShowMessage('Ой-ой, кажется программер был не трезв....');
end;
end;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
eJay (статус: Посетитель), 27 июля 2010, 16:55 [#6]:
Вадим К. + тебе! Спасибо.
|
|
eJay (статус: Посетитель), 27 июля 2010, 17:30 [#7]:
Рано радовался. При любых раскладах пасс и логин неверные )))
|
|
eJay (статус: Посетитель), 27 июля 2010, 17:33 [#8]:
procedure TForm1.Button1Click(Sender: TObject);
begin
ZQuery1.SQL.Text := 'SELECT * FROM fop2users WHERE exten ="+Edit1.Text+" AND secret = "+Edit2.Text+"';
ZQuery1.Open;
if ZQuery1.RecordCount < 1 then
begin
ShowMessage('Логин или пароль неверные. Попробуйте еще раз.');
end
else
begin
ShowMessage('Добро пожаловать!');
end;
end;
|
|
eJay (статус: Посетитель), 27 июля 2010, 17:34 [#9]:
два поля exten - там логин и secret - там пароль. Пароль в не зашифрованном виде.
|
|
Вадим К (статус: Академик), 27 июля 2010, 17:56 [#10]:
по ходу составления запроса потерялись кавычки, вот так должно быть правильно.
'SELECT * FROM fop2users WHERE exten = "'+Edit1.Text+'" AND secret = "'+Edit2.Text+'"';
Галочка "подтверждения прочтения" - вселенское зло.
|
|
eJay (статус: Посетитель), 27 июля 2010, 18:15 [#11]:
Держи еще + ))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|