![]() |
[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 ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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