Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Vergleich von Zahlen funktioniert, Buchstaben nicht (https://www.delphipraxis.net/32990-%5Bphp%5D-vergleich-von-zahlen-funktioniert-buchstaben-nicht.html)

Plague 31. Okt 2004 00:07


[PHP] Vergleich von Zahlen funktioniert, Buchstaben nicht
 
Hallo,

ich habe in einem PHP Script folgendes stehen:

Code:
<?php
$connect = mysql_connect("localhost","User","Passwort");
$db = mysql_select_db("Datenbank");
$sql = ("SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`=$User");
$select = mysql_query($sql);
$row = mysql_fetch_array($select);
$ID2 = $row["ID"];
if ($Passwort2 == $row["Passwort"]) {
   header("Location: http://www.addy.de/Test/abcd.php?BID=$ID2");
   } else {
   echo("Passwort falsch");
   }
?>
Die Kontrolle ob das Passwort funktioniert geschieht vorher über die Eingabe in ein Formular, welches die Daten über POST weitergibt.

Wenn der Datenbank-Eintrag (MySQL) nun als User nur zahlen hat, funktioniert der Abgleich und man wird weitergeleitet. Ist der Username aber ein Name oder ähnliches mit Buchstaben, kommt ein PHP typischer Fehler.
Das Datenbankfeld ist als VARCHAR deklariert!

Was kann ich da tun?

fkerber 31. Okt 2004 00:51

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Hi!

Was ist denn ein php typischer Fehler?


Ciao Frederic

Plague 31. Okt 2004 01:49

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Das hier:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/web257/html/Test/abfrage_script.php on line 6

himitsu 31. Okt 2004 02:07

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
na das bedeute einfach, das bei der mySQL-Abfrage (mysql_query) was schiefgegangen ist, da ja keine "gülige" Abfragekennung zurückgegeben wurde. Und mysql_fetch_array will nun mal eine solche unbedingt haben.

Lösung: man mach 'ne Abfrage rein, ob die mySQL-Anfrage überhaupt erfolgreich war.


Und dann kann es nicht schaden, wenn du auch den wert mal in ' oder " einschließt, warum man sowas macht, sollte wohl klar sein.
Code:
$sql = ("SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`=[b][color=red]'[/color][/b]$User[b][color=red]'[/color][/b]");


Ach ja: $User wird doch direkt aus dem Formular ausgelesen?
Also wenn du mir jetzt mal kurz die URL zu deinem Formular gibts, dann schrotte ich dir mal schnell deine Datenbank, oder mach schlimmeres damit :roll:

Plague 31. Okt 2004 02:11

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Zitat:

Ach ja: $User wird doch direkt aus dem Formular ausgelesen?
Also wenn du mir jetzt mal kurz die URL zu deinem Formular gibts, dann schrotte ich dir mal schnell deine Datenbank, oder mach schlimmeres damit
Wie soll ich das verstehen???

himitsu 31. Okt 2004 07:54

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
haben die ', oder " geholfen?



Ich bin jetzt zwar nicht der große Profi, bei den verschachtelten mySQL-Abfragen (müßte mich da erst nochmal informieren), aber es ist so möglich fremden Code einzuschleusen.

Im Prinzip:
Code:
"DELETE FROM tabelle WHERE name = '$name';"
Normaler Weise könnte man da ja z.B. den Namen des zu löschenden Eintags angeben,
Code:
$name = "tomas"
aber mit 'ner kleinen Veränderung wird der gesamte Tabelleninhalt gelöscht.
Code:
$name = "irgendwas' OR 1"
Raus kommt hier z.B.:
Code:
"DELETE FROM tabelle WHERE name = 'irgendwas' OR 1;"
Da, wegen der "1", die OR-Verknüpfung immer wahr ist, entschpricht es im Endeffekt diesem, was ja alles löscht.
Code:
"DELETE FROM tabelle WHERE 1;"
Auf solche Weise kann man ganz schnell 'ne Abfrage ändern und somit viel anstellen -.-''

Chewie 31. Okt 2004 08:52

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Der Fehler hat übrigens mit den einfachen Anführungszeichen zu tun. Wenn das User-Feld einen String-Typ hat, muss auch mit einem String vergleichen werden, und der wird bei MYSQL-SQL von einfachen ANführungszeichen eingeschlossen.

Nuclear-Ping 31. Okt 2004 09:07

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Da geb ich himitsu recht. Wenn du Formular-Übergaben verarbeitest, dann 1.) prüfe auf komische Zeichen wie ', ", ` oder ´ in dem Eingabefeld und 2.) verwende dafür die entsprechenden Super-Globalen Arrays wie $_POST, $_GET oder gleich $_REQUEST. Das ist erstens sicherer (Link zu einer Seite auf php.net mit Warum, Weshalb, Wieso kann ich dir raussuchen) und zweitens auch "register_globals=Off"-Safe. ;)

Wegen deinem Fehler:
Wie die Vorredner schon sagten: Schließe die Inhalte für Feldnamen in Anführungszeichen ein:
Code:
$Query = "SELECT * FROM Table WHERE Feld='Wert'"
Dann sollte alles klappen.

Grüße,
Mario

gekmihesg 31. Okt 2004 10:16

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
ich würds ja so machen:
Code:
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='".$_POST["User"]."'"
und dann:
Code:
if ($_POST["Passwort2"] == $row["Passwort"]) {...}

himitsu 31. Okt 2004 10:47

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
:oops: ganz vergessen, die komplettlösung su posten.

Also ' und dann unterbindet addslashes, dass es zu Problemen, bei "\", "'" und """, kommen kann, da diese geschützt werden.
Code:
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='" . addslashes($_POST["User"]) . "'"
PS:
addslashes sollte man immer verwenden, wenn nicht kontrollierte Strings innerhalb einer Abfrage verwendet werden, denn ein ' kann nicht nur vorkommen, wenn man es böse meint.
Selbst die DP ist dagegen geschützt, denn sonst hätte dieser Uder '][' ein ganz großes Problem.

fiasko 31. Okt 2004 10:48

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Hallo,

himitus hat ja schon drauf hingewiesen... sinnvoll ist der Code also nur der Art:

Code:
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='".mysql_escape($_POST["User"])."'"
Ich würde allerdings im WHERE Teil das Paßwort mit einbziehen wenn es nur um das Überprüfen geht und dann schauen wieviel Ergebniszeilen das Query liefert.

Nuclear-Ping 31. Okt 2004 11:09

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Yo, stimmt, mit mysql_escape hat sich die Gefahr der "mySQL-Injection" mit einem kleinen Befehl erledigt. :thumb:

himitsu 31. Okt 2004 11:14

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Alles zusammengefasst:
Code:
<?php
$connect = mysql_connect("localhost", "User", "Passwort");
$db = mysql_select_db("Datenbank");
$select = mysql_query("SELECT `ID` FROM `Tabelle` WHERE `UserID` = '" . addslashes($_POST["User"]) . "' AND `Passwort` = '" . addslashes($_POST["Passwort2"]) . "'");
$row = mysql_fetch_array($select);
mysql_close($connect);
if ($row)
   header("Location: http://www.addy.de/Test/abcd.php?BID=" . $row["ID"]);
else
   echo("Passwort falsch");
?>
klar könnte man über mysql_num_rows einfach prüfen, ob User/Passwort OK sind, aber er braucht eh noch die ID, also kann er auch gleich das Ergebnis einholen und darüber prüfen.

und dann nochwas:
klar wird die Datenbankverbindung getrennt, wenn das Script beendet wird, aber wir wollen ja ordentlich programmieren und da schließen wir doch auch diese Verbindung ordnungsgemäß (mysql_close), oder?

@fiasko
mysql_escape... kannte ich noch nicht ^^

Aber "mysql_escape" scheint es nicht zu geben.
ich konnte mysql_escape_string und mysql_real_escape_string finden,
allerdings scheint mysql_escape_string ja eh nur's Selbe, wie addslashes zu machen, also werd' ich mir das nicht merken, ein Befehl reicht mir :)

Mamphil 31. Okt 2004 11:39

Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
 
Hi!
Zitat:

Zitat von himitsu
Aber "mysql_escape" scheint es nicht zu geben.

Dann verwende doch mysql_escape_string. :mrgreen:

Mamphil


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.

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