![]() |
[PHP] Vergleich von Zahlen funktioniert, Buchstaben nicht
Hallo,
ich habe in einem PHP Script folgendes stehen:
Code:
Die Kontrolle ob das Passwort funktioniert geschieht vorher über die Eingabe in ein Formular, welches die Daten über POST weitergibt.
<?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"); } ?> 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? |
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
Hi!
Was ist denn ein php typischer Fehler? Ciao Frederic |
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 |
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: |
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
Zitat:
|
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:
Normaler Weise könnte man da ja z.B. den Namen des zu löschenden Eintags angeben,
"DELETE FROM tabelle WHERE name = '$name';"
Code:
aber mit 'ner kleinen Veränderung wird der gesamte Tabelleninhalt gelöscht.
$name = "tomas"
Code:
Raus kommt hier z.B.:
$name = "irgendwas' OR 1"
Code:
Da, wegen der "1", die OR-Verknüpfung immer wahr ist, entschpricht es im Endeffekt diesem, was ja alles löscht.
"DELETE FROM tabelle WHERE name = 'irgendwas' OR 1;"
Code:
Auf solche Weise kann man ganz schnell 'ne Abfrage ändern und somit viel anstellen -.-''
"DELETE FROM tabelle WHERE 1;"
|
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.
|
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:
Dann sollte alles klappen.
$Query = "SELECT * FROM Table WHERE Feld='Wert'"
Grüße, Mario |
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
ich würds ja so machen:
Code:
und dann:
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='".$_POST["User"]."'"
Code:
if ($_POST["Passwort2"] == $row["Passwort"]) {...}
|
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:
PS:
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='" . addslashes($_POST["User"]) . "'"
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 ![]() |
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
Hallo,
himitus hat ja schon drauf hingewiesen... sinnvoll ist der Code also nur der Art:
Code:
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.
"SELECT `Passwort`,`ID` FROM `Tabelle` WHERE `UserID`='".mysql_escape($_POST["User"])."'"
|
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:
|
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
Alles zusammengefasst:
Code:
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.
<?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"); ?> 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 :) |
Re: [PHP] Vergleich von Zahlen funktioniert, Buchstaben nich
Hi!
Zitat:
![]() 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