| 
| 
 | Вопрос # 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]:Держи еще + )) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |