PHP: Vergleich von Daten aus Formular mit Daten aus Datenbank schlägt fehl
Hallo Administratoren,
seit etwa 2 Wochen habe ich nun schon ein Problem mit einem PHP Skript.
Und zwar habe ich drei Dateien, die eine schreibt in die Datenbank die anderen beiden sind die Loginseite und das Skript, welches das Loginformular verarbeitet.
Das schreiben in die Datenbank funktioniert dabei wunderbar, aber beim Loginskript kommt es zu einem Fehler, den ich nicht so recht verstehe.
Der Fehler ist als Warnung gekennzeichnet und lautet: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pre_stable\enter.php
Der Aufbau der Datenbank ist:
id,name,rang
Wobei die ID, das Passwort für die Erstanmeldung ist.
Das Skript welches die Daten aus dem Formular mit den Daten in der Datenbank vergleicht ist folgendes:
Danke für eure Hilfe.
seit etwa 2 Wochen habe ich nun schon ein Problem mit einem PHP Skript.
Und zwar habe ich drei Dateien, die eine schreibt in die Datenbank die anderen beiden sind die Loginseite und das Skript, welches das Loginformular verarbeitet.
Das schreiben in die Datenbank funktioniert dabei wunderbar, aber beim Loginskript kommt es zu einem Fehler, den ich nicht so recht verstehe.
Der Fehler ist als Warnung gekennzeichnet und lautet: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pre_stable\enter.php
Der Aufbau der Datenbank ist:
id,name,rang
Wobei die ID, das Passwort für die Erstanmeldung ist.
Das Skript welches die Daten aus dem Formular mit den Daten in der Datenbank vergleicht ist folgendes:
<?php
########Eingabe aus Formular erhalten
$nick = mysql_real_escape_string($_POST["benutzer"]);
$pw = mysql_real_escape_string($_POST["passwort"]);
#####Eingabe mit Daten in Tabelle vergleichen
// Zur Datenbank verbinden
$db = new mysqli('localhost', 'root', '', 'clanmember');
if ($db->connect_errno)
{
echo 'Es konnte keine Datenbankverbindung hergestellt werden!<br />';
echo 'Folgender Fehler ist aufgetreten: (' . $db->connect_errno . ') ' . $db->connect_error;
exit;
}
$sql = "SELECT * FROM clanmember WHERE name = '$nick' AND id = '$pw'";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 1) {
echo "LOGIN";
} else {
echo "FEHLER";
}
?>
Danke für eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221805
Url: https://administrator.de/contentid/221805
Ausgedruckt am: 16.11.2024 um 16:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
ich habe da mal eine Frage an dich - vielleicht löst das auch schon das Problem:
- Du nutzt MySQLi um die Verbindung herzustellen (Zeile 9) - jedoch nutzt du MySQL um die Query auszuführen (Zeile 18 ff). Ist das Absicht?
Schau dir dazu doch mal das hier an:
http://www.selfphp.info/praxisbuch/praxisbuchseite.php?site=263&gro ...
Ggf. wäre auch PDO etwas für dich. Damit kannst du dann auch Parameter an die Query binden und somit die Abfrage gegen SQL-Injection sichern.
Denke auf jeden Fall da dran, die Login-Daten zu verschlüsseln - ordentlich und auch noch zu salzen!
Gruß,
Florian.
ich habe da mal eine Frage an dich - vielleicht löst das auch schon das Problem:
- Du nutzt MySQLi um die Verbindung herzustellen (Zeile 9) - jedoch nutzt du MySQL um die Query auszuführen (Zeile 18 ff). Ist das Absicht?
Schau dir dazu doch mal das hier an:
http://www.selfphp.info/praxisbuch/praxisbuchseite.php?site=263&gro ...
Ggf. wäre auch PDO etwas für dich. Damit kannst du dann auch Parameter an die Query binden und somit die Abfrage gegen SQL-Injection sichern.
Denke auf jeden Fall da dran, die Login-Daten zu verschlüsseln - ordentlich und auch noch zu salzen!
Gruß,
Florian.
Hi,
du hast da einen wichtigen Schritt vergessen !
Nach dem Ausführen des Queries hast du vergessen zu überprüfen ob das auch funktioniert hat !
Überprüfe in Zeile 9 ob der Rückgabewert von mysql_query() dem entspricht was du erwartest !
Was die Funktion wann zurückgibt steht (unglaublicherweise) im Manual PHP-Manual - mysql_query()
Bitte immer die englische Version bevorzugen !!
Wie hier gut zu sehen ist, steht in der englischen Version das diese Funktion veraltet __ist__ und in der Zukunft __entfernt wird__ ! In der deutschen steht nichts davon Oo
Solche "kleinen" aber wichtigen Unterschiede gibt es immer wieder in der deutschen Version. Teilweise sind oder waren die Funktionsbeschreibungen auch unvollständig.
Englisch kann man lernen -> PHP, SQL und so ziemlich jede andere Sprache(und deren Fehlermeldungen !) auch... ...sind in englisch ;)
Schaut man sich das Manual und deine Fehlermeldung an, sieht es sehr danach aus als ob das Query fehlschlägt !
Und somit können auch die folgenden Funktionen die siech darauf beziehen nicht funktionieren.
Das Query schlägt fehl, die Funktion gibt FALSE zurück, in $result steht ebenfalls FALSE und wird an die Funktion mysql_num_rows() übergeben, doch diese "meckert" s.Fehlermeldung
Tip
Schau dir auch die Funktionen print_r() und var_dump() an.
Die hätten die in diesem Fall auch helfen können das Problem zu finden
~Arano
du hast da einen wichtigen Schritt vergessen !
Nach dem Ausführen des Queries hast du vergessen zu überprüfen ob das auch funktioniert hat !
Überprüfe in Zeile 9 ob der Rückgabewert von mysql_query() dem entspricht was du erwartest !
Was die Funktion wann zurückgibt steht (unglaublicherweise) im Manual PHP-Manual - mysql_query()
Bitte immer die englische Version bevorzugen !!
Wie hier gut zu sehen ist, steht in der englischen Version das diese Funktion veraltet __ist__ und in der Zukunft __entfernt wird__ ! In der deutschen steht nichts davon Oo
Solche "kleinen" aber wichtigen Unterschiede gibt es immer wieder in der deutschen Version. Teilweise sind oder waren die Funktionsbeschreibungen auch unvollständig.
Englisch kann man lernen -> PHP, SQL und so ziemlich jede andere Sprache(und deren Fehlermeldungen !) auch... ...sind in englisch ;)
Schaut man sich das Manual und deine Fehlermeldung an, sieht es sehr danach aus als ob das Query fehlschlägt !
Und somit können auch die folgenden Funktionen die siech darauf beziehen nicht funktionieren.
Das Query schlägt fehl, die Funktion gibt FALSE zurück, in $result steht ebenfalls FALSE und wird an die Funktion mysql_num_rows() übergeben, doch diese "meckert" s.Fehlermeldung
Tip
Schau dir auch die Funktionen print_r() und var_dump() an.
Die hätten die in diesem Fall auch helfen können das Problem zu finden
~Arano