Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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

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

eJay (статус: Посетитель), 27 июля 2010, 16:55 [#6]:

Вадим К. + тебе! Спасибо.
eJay

eJay (статус: Посетитель), 27 июля 2010, 17:30 [#7]:

Рано радовался. При любых раскладах пасс и логин неверные )))
eJay

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

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

eJay (статус: Посетитель), 27 июля 2010, 18:15 [#11]:

Держи еще + ))

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.03 сек.