Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MYSQL Login Script (https://www.delphipraxis.net/145235-mysql-login-script.html)

1carter1 27. Dez 2009 11:46

Datenbank: Mysql • Version: 5.x • Zugriff über: C-Api

MYSQL Login Script
 
Hi,

Ich versuche ein Loginscript zu realisieren, es gibt 2 input felder, eins heißt username das andere Password und dann noch einen Login button, nun hab ich in der datenbank die spalten username und password, diese möchte ich mit der eingabe vergleichen und wenns ne übereinstimmung gibt will ich erstmal nur ne showmessage anzeigen lassen, dass die daten korrekt sind, ich komm leider nicht wirklich weiter, hier ist mal mein ansatz:

Delphi-Quellcode:
 Con := mysql_init(nil);
  if Assigned(Con) then
    try
      if Assigned(mysql_real_connect(Con, host, user, pass, db, 3306, nil, 0)) then
      begin
        query := 'SELECT username,password FROM user WHERE username = '+username.Text+ 'AND password = '+password.text;
        mysql_real_query(Con,PChar(query), Length(query));
         if Assigned(Res) then
         begin
        Res := mysql_store_result(Con);
          if (mysql_num_rows(Res) =1) then showmessage('Daten Korrekt');
          if (mysql_num_rows(Res) <>1) then showmessage('Daten Falsch');
        end;
      end
    finally
      mysql_close(Con);
    end;

fkerber 27. Dez 2009 11:49

Re: MYSQL Login Script
 
Hi!

Klappt dein Code gar nicht (Fehlermeldungen?) oder bekommst du nur nicht, was du haben willst?
Vllt. ist password ein Problem, weil es ein Schlüsselwort ist?

Grüße, Frederic

1carter1 27. Dez 2009 12:02

Re: MYSQL Login Script
 
das wäre ne idee, ich teste es mal eben aus und edite dann

//Edit nein geht auch nicht, wenn ich den namen änder, delphi spuckt ne exception aus, in der aber nicht wirklich was steht, sondern einfach nur adress violation libmysql.dll usw

Sharky 27. Dez 2009 12:05

Re: MYSQL Login Script
 
Hai 1carter1,

einen Fehler sehe ich schon einmal:

Delphi-Quellcode:
  query := 'SELECT username,password FROM user WHERE username = '+username.Text+ 'AND password = '+password.text;
Hier wird AND password direkt an den username gehängt. Ich mache solche Konstruktionen immer über die Delphi-Referenz durchsuchenFormat Funktion. Das ist leichter zu lesen finde ich.
Delphi-Quellcode:
 query := Format('SELECT username,password FROM user WHERE username = %s AND password = %s',[username.Text, password.text]);
Wenn Du den String der SQL-Anweisung jetzt noch als const deklarierst ist der eigentliche Sourcecode noch einfach zu lesen.
Delphi-Quellcode:
const
  UserQuery : string = 'SELECT username,password FROM user WHERE username = %s AND password = %s'
begin
.
.
  query := FORMAT(UserQuery[username.Text, password.text]);
.
.

Phoenix 27. Dez 2009 12:18

Re: MYSQL Login Script
 
Siehe dazu auch: http://xkcd.com/327/

Wir lernen daraus: NIEMALS einen SQL-String selber zusammenbauen. Für so etwas gibt es Parameter.
Bei Deinem Code muss man als Benutzernamen nur
Code:
nix'; DROP TABLE user; --
eingeben und Deine Datenbank ist am allerwertesten.

Matze 27. Dez 2009 12:43

Re: MYSQL Login Script
 
Zitat:

Zitat von Phoenix
Wir lernen daraus: NIEMALS einen SQL-String selber zusammenbauen. Für so etwas gibt es Parameter.

Wenn man die Werte davor überprüft, dann kann man sie auch getrost manuell zusammen setzen (escapen etc.). Das hier im vorliegenden Fall jedoch nicht so.
Aber du hast Recht, mit Parametern ist es schöner.

Sharky 27. Dez 2009 12:48

Re: MYSQL Login Script
 
Ist die Verwendung von Parametern bei seiner LIB denn möglich?

anse 27. Dez 2009 23:47

Re: MYSQL Login Script
 
Zitat:

Zitat von Phoenix
... nur
Code:
nix'; DROP TABLE user; --
eingeben und Deine Datenbank ist am allerwertesten.

Das stimmt nicht, auch wenn es gelegentlich so dargestellt wird - so ein SQL quittiert mysql_real_query() mit einem SQL Fehler, denn man kann nicht so einfach ein SQL Batch als Query abschicken. Wichtig ist einzig das korrekte Escapen von Benutzer-Eingaben.

RWarnecke 28. Dez 2009 00:28

Re: MYSQL Login Script
 
@1carter1:
Hast Du die Datei libmysql.dll in Deinem Windows/System32 oder in Deinem Programmverzeichnis liegen ?

1carter1 28. Dez 2009 11:00

Re: MYSQL Login Script
 
es ist total irrelevant wo die datei liegt, entweder im sys32 oder im programmordner, habs auch schon lange hinbekommen, der query muss so aussehen:

query := 'SELECT username,password FROM user WHERE username = "'+username.Text+ '" AND password = "'+password.text+'"';


mfg carTer


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Seite 1 von 2  1 2      

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