Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Login mit verschiedenen FORMS (https://www.delphipraxis.net/198964-login-mit-verschiedenen-forms.html)

Amenovis 14. Dez 2018 19:51

Datenbank: sqlite • Version: 3 • Zugriff über: Zeos

Login mit verschiedenen FORMS
 
Also ich habe mal ein simple Login Form die auch wunderbar funktioniert

Dazu habe ich eine Tabelle mit 3 Spalten

USER....PASSWORD....SECTION

das loginscript sieht bis jetzt so aus:

Delphi-Quellcode:
begin
  QUery1.SQL.Clear;
  Query1.SQL.Text:='Select * From USER where user='''+Edit1.Text+''' and password='''+Edit2.Text+'''';
  Query1.Open;
  if not Query1.Eof then begin
      Form1.Hide;
      Form2.Showmodal;
  end else
     ShowMessage('Wrong User or Password!')
  end;
Nun hätte ich gern die Möglichkeit den dritten Wert zu nutzen um dem Programm zu sagen welches Fenster er öffnen soll.... Also verschachtelte IF Funktion....

Delphi-Quellcode:
begin
  QUery1.SQL.Clear;
  Query1.SQL.Text:='Select * From USER where user='''+Edit1.Text+''' and password='''+Edit2.Text+'''';
  Query1.Open;
  if not Query1.Eof then begin
      IF QUERY1 SECTION = 1 THEN BEGIN
      Form2.Showmodal;
      end;
      IF QUERY1 SECTION = 2 THEN BEGIN
      Form3.Showmodal;
      end;
  end else
     ShowMessage('Wrong User or Password!')
  end;
WIe stelle ich das an den Wert der SECTION auszulesen und die FORM zu zuweisen ?

LG Timo

scrat1979 14. Dez 2018 20:56

AW: Login mit verschiedenen FORMS
 
Delphi-Quellcode:
Query1.FieldByName(„SECTION“).AsInteger

Amenovis 14. Dez 2018 20:59

AW: Login mit verschiedenen FORMS
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  QUery1.SQL.Clear;
  Query1.SQL.Text:='Select * From USER where user='''+Edit1.Text+''' and password='''+Edit2.Text+'''';
  Query1.Open;
  if not Query1.Eof then begin
      if Query1.FieldByName('SECTION').AsString = '1' then begin
      Form1.Hide;
      Form2.Showmodal;
      end;
      if Query1.FieldByName('SECTION').AsString = '2' then begin
      Form1.Hide;
      Form3.Showmodal;
      end;
  end else
     ShowMessage('Wrong User or Password!')
  end;

Klappt DANKEEEEEEEEEEEEEEEEEEE hatte es so ähnlich da war sicher wieder der Riesen Baum der den Wald verdeckt !!


lg

Timo

scrat1979 14. Dez 2018 21:07

AW: Login mit verschiedenen FORMS
 
Zitat:

Zitat von Amenovis (Beitrag 1420904)
„SECTION“ <--- mit 'section' hatte ich es versucht wie bekomme ich den die „“ hin und was bewirken diese ?

und ich versuch es gleich danke dafür!

lg

Timo

So wie Du es gemacht hast ist es richtig, ich bekomme die einfache Anführungszeichen mit dem Handy leider gerade nicht hin, da sie automatisch umgewandelt werden :)

Delphi-Quellcode:
FieldByName('SECTION').AsInteger
Jetzt ging es... der Code ist jedenfalls korrekt.

Amenovis 14. Dez 2018 21:11

AW: Login mit verschiedenen FORMS
 
ja gesehen da war bei mir sicher wieder ein mini Fehler drin ... das sind die schlimmsten die finde ich nie

lg

Timo

scrat1979 14. Dez 2018 21:15

AW: Login mit verschiedenen FORMS
 
Super!

Und der übliche Komentar :) Sieh‘ Dir mal SQL-Parameter und deren Vorteile an.

Amenovis 14. Dez 2018 21:17

AW: Login mit verschiedenen FORMS
 
ja da gibt es einige die ich jetzt schon liebe sum() zb muss mir mal unbedingt eine liste mit allem besorgen was da so gängig ist mit ultra einfach beispielen für innerlich plonde wie mich :P :P :P

skoschke 16. Dez 2018 08:49

AW: Login mit verschiedenen FORMS
 
Man kann auch doppelte Anführungszeichen verwenden:

'Select * From USER where user= " '+Edit1.Text+' " and password= " '+Edit2.Text+' " ';

Ciao
Stefan

Schokohase 16. Dez 2018 08:56

AW: Login mit verschiedenen FORMS
 
Man kann auch die Anführungszeichen komplett entsorgen und mit Parametern arbeiten.
Delphi-Quellcode:
QUery1.SQL.Clear;
Query1.SQL.Text:='Select * From USER where user=:user and password=:pass';
Query1.ParamByName('user').AsString := Edit1.Text;
Query1.ParamByName('pass').AsString := Edit2.Text;
Query1.Open;
... allerdings ist es sehr fahrlässig die Kennwörter im Klartext in der Datenbank zu speichern. Dort sollten sich nur Bei Google suchenSalted Hashs befinden.

haentschman 16. Dez 2018 09:59

AW: Login mit verschiedenen FORMS
 
Zitat:

Man kann auch die Anführungszeichen komplett entsorgen
...nicht KANN sondern MUSS. :warn:
siehe: https://de.wikipedia.org/wiki/SQL-Injection

PS:
Delphi-Quellcode:
QUery1.SQL.Clear;
vor
Delphi-Quellcode:
Query.SQL.Text
ist nicht nötig weil SQL.Text das sowieso macht.

p80286 16. Dez 2018 11:13

AW: Login mit verschiedenen FORMS
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.SQL.Text:='Select * From USER where user=:user and password=:pass';
  Query1.ParamByName('user').AsString := Edit1.Text;
  Query1.ParamByName('pass').AsString := Edit2.Text;
  Query1.Open
  if not Query1.Eof then
  begin
    case Query1.FieldByName('SECTION').AsString of
       '1' : begin
               self.Hide;
               Form2.Showmodal;
             end;
       '2' : begin
               self.Hide;
               Form3.Showmodal;
             end;
       else
         ShowMessage('Database error: unknown or missing section');
    end;{case------------------------------------------------------} 
  end else
     ShowMessage('Wrong User or Password!');
  Query1.Next;
  if not(Query1.EOF) then
    ShowMessage('Database error: more than one record found');
  Query1.Close;       {-- die Query sauber hinterlassen }
end;
Noch ein paar Kleinigkeiten hinzu gefügt.

Gruß
K-H

scrat1979 16. Dez 2018 14:42

AW: Login mit verschiedenen FORMS
 
Zitat:

Zitat von p80286 (Beitrag 1420970)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.SQL.Text:='Select * From USER where user=:user and password=:pass';
  Query1.ParamByName('user').AsString := Edit1.Text;
  Query1.ParamByName('pass').AsString := Edit2.Text;
  Query1.Open
  if not Query1.Eof then
  begin
    case Query1.FieldByName('SECTION').AsString of
       '1' : begin
               self.Hide;
               Form2.Showmodal;
             end;
       '2' : begin
               self.Hide;
               Form3.Showmodal;
             end;
       else
         ShowMessage('Database error: unknown or missing section');
    end;{case------------------------------------------------------} 
  end else
     ShowMessage('Wrong User or Password!');
  Query1.Next;
  if not(Query1.EOF) then
    ShowMessage('Database error: more than one record found');
  Query1.Close;       {-- die Query sauber hinterlassen }
end;
Noch ein paar Kleinigkeiten hinzu gefügt.

Gruß
K-H

Sicher, dass CASE bei Strings funktioniert?! Ohne es jetzt zu testen denke ich vor kurzem gelesen zu haben, dass es nicht geht.

p80286 16. Dez 2018 19:25

AW: Login mit verschiedenen FORMS
 
Du hast Recht! String geht nicht. Bei Char bin ich mir nicht sicher.

Wenn Section nur numerische Werte enthält, würde ich das sowieso über Integer lösen.

Gruß
K-H

scrat1979 16. Dez 2018 21:05

AW: Login mit verschiedenen FORMS
 
Zitat:

Zitat von p80286 (Beitrag 1420986)
Du hast Recht! String geht nicht. Bei Char bin ich mir nicht sicher.

Wenn Section nur numerische Werte enthält, würde ich das sowieso über Integer lösen.

Gruß
K-H

Jupp, würde es auch über ein Integer lösen :)

DeddyH 16. Dez 2018 21:23

AW: Login mit verschiedenen FORMS
 
Case funktioniert in Delphi nur mit ordinalen Typen (Char gehört auch dazu). Also entweder etwas wie Char oder Integer benutzen oder auf Funktionen wie AnsiIndexText ausweichen, wenn es Strings sein müssen, man aber Case verwenden möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz