MySQL gibt immer leeres Resultat zurück
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
bedingung
code
datenbank
email
fehler
fehlerhaft code
funktion
gefunden code
login
null
parameter
problem
re
statement
tabelle
test
url
verbindung
zeile
-
Hey Leute,
Ich habe meine ref="/login" title="Login">Loginklasse nun soweit aufgebaut, dass die Daten überprüfen werden und die Session gesetzt wird. Allerdings gibt er IMMER(!) Fail aus, obwohl die Einträge in der Datenbank existieren. Füge ich die Query in PHPMyAdmin ein, bekomme ich ein resultat zurück. Ich hoffe mir kann jemand helfen.
Die Test.php
<html> <head> </head> <body> <?php require_once 'core/class/User.inc.php'; require_once 'core/class/Database.inc.php'; $database = new Database("mysql.lima-city.de", "db_297947_1", "USER297947", ""); $usersystem = new User($database); if($usersystem->login("ab@ab.de", "123") == true) { echo 'Erfolg!'; } else { echo 'Fail!'; } ?> </body> </html>
Und hier die Klassen User und Database.
<?php require 'Database.inc.php'; class User { private $database = NULL; private $result = NULL; public function __construct($database) { $this->database = $database; session_cache_limiter(30); session_start(); } public function login($email, $pw) { if($this->checkLoginData($email, $pw) == true) { $res = $this->database->query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $_SESSION['isLoggedIn'] = true; $_SESSION['Benutzername'] = $row['Name']; $_SESSION['EmailVerify'] = $row['EmailVerify']; return(true); } else { return(false); } } private function checkLoginData($email, $pw) { $res = $this->database->query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'"); while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { if($row['Passwort'] == $pw && $row['Email'] == $email) { echo 'test'; return(true); } return(false); } } } ?>
<?php /* * * Erstellt von CannaDesign * 01.07.2014, 14:53 Uhr * MySQL Klasse zum verbinden und abrufen von Datenbankeinträgen */ class Database { private $connect = Null; private $result = Null; private $counter = Null; /* Datenbank verbindung aufbauen * Diese Function wird automatisch beim einbinden der Klasse ausgeführt. * */ public function __construct($host, $db, $user, $pw) { $this->connect = mysqli_connect($host, $user, $pw, $db) or die("Error: ".mysqli_error($this->connect)); if($this->connect) { mysqli_select_db($db, $this->connect); return $this->connect; } else { var_dump($this->connect); die('<p>Das Herstellen zur Datenbank ist fehlgeschlagen. Bitte kontaktieren Sie den Seiteninhaber.</p>'); } } /* * Datenbankverbindung schliessen (Vorraussetzung es ist eine vorhanden) * */ public function disconnect() { if(is_resource($this->connect)) { mysqli_close($this->connect); } } /* * Query ausführen * */ public function query($query) { $this->result = mysqli_query($this->connect, $query); $this->counter = Null; } public function fetchRow() { return mysqli_fetch_assoc($this->result); } public function fetchArray() { return mysqli_fetch_array($this->result); } /* Zählt die Tabellen aus MySQL */ public function counter() { if($this->counter = NULL && is_resource($this->connect)) { $this->counter = mysqli_num_rows($this->result); } return $this->counter; } } ?>
Beitrag zuletzt geändert: 2.7.2014 16:33:57 von cannadesign -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ganz einfach:
session_start();
gehört stets als erste Ausgabe, das heißt, bevor HTML oder weiteres PHP ausgegeben wird.
Im Beispiel deiner "Test.php" steht aber schon<html> <head> </head> <body>
;) -
Okay, das erste gelöst, allerdings ist die session ja erst einmal nebensache. Hab es trotzdem mal geändert, aber bekomme ich nur ein "Fail!" sprich leeres Resultat.
Beitrag zuletzt geändert: 2.7.2014 16:48:08 von cannadesign -
Wenn ich es richtig sehe, ist in deiner Funktion "public function login ()" folgende Zeile fehlerhaft:
$res = $this->database->query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'");
sie muss heißen:
$res = $this->database->mysql_query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'");
Beitrag zuletzt geändert: 2.7.2014 20:16:20 von michaelkoepke -
michaelkoepke schrieb:
Wenn ich es richtig sehe, ist in deiner Funktion "public function login ()" folgende Zeile fehlerhaft:
$res = $this->database->query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'");
sie muss heißen:
$res = $this->database->mysql_query("SELECT * FROM user WHERE Email = '".$email."' AND Passwort = '".$pw."'");
Leider nicht ganz korrekt :/
Dafür ist ja diese Funktion da (database.inc.php:
public function query($query) { $this->result = mysqli_query($this->connect, $query); $this->counter = Null; return $this->result; }
Vorher war kein return drinnen, habe gedacht das es vielleicht daran liegt, hat aber nichts gebracht. -
Hi canna
Ich habe dein Skript kurz bei mir eingebaut und das Problem gefunden:
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\database.inc.php on line 19 Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\xampp\htdocs\user.inc.php on line 32
Also in Zeile 19 der database.inc.php hast du die Parameter verwechselt:
Also zuerst Verbindung, dann Link:
mysqli_select_db($this->connect,$db);
In Zeile 32 der user.inc.php anschliessend hast du plötzlich mit mysql_fetch... gearbeitet, anstelle mit mysqli_fetch...:
while($row = mysqli_fetch_array($res, MYSQL_ASSOC))
Selbiges Problem übrigens auch in Zeile 17 der Datei.
Du solltest Error_Reporting einschalten, dann werden dir diese Fehler angezeigt.
Generell finde ich die Klasse so aber noch nicht wirklich effizient, da diese zweimal den Benutzer abfragt (warum nicht gleich ein Benutzerobjekt eröffnen?) und zudem wird auch mehrmals das selbe geprüft (SQL-Statement holt nur Datensätze welche Email = Email und Passwort = Passwort ist, anschliessend wird dies in der if-Bedingung nochmals geprüft.
Grundsätzlich sollte man nie im SQL-Statement das Passwort abfragen, so wurde mir dies jedenfalls gesagt.
Ich hoffe das hilft dir soweit einmal weiter.
Beste Grüsse
Meron
Beitrag zuletzt geändert: 3.7.2014 13:23:57 von meron -
meron schrieb:
Hi canna
Ich habe dein Skript kurz bei mir eingebaut und das Problem gefunden:
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\database.inc.php on line 19 Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\xampp\htdocs\user.inc.php on line 32
Also in Zeile 19 der database.inc.php hast du die Parameter verwechselt:
Also zuerst Verbindung, dann Link:
mysqli_select_db($this->connect,$db);
In Zeile 32 der user.inc.php anschliessend hast du plötzlich mit mysql_fetch... gearbeitet, anstelle mit mysqli_fetch...:
while($row = mysqli_fetch_array($res, MYSQL_ASSOC))
Selbiges Problem übrigens auch in Zeile 17 der Datei.
Du solltest Error_Reporting einschalten, dann werden dir diese Fehler angezeigt.
Generell finde ich die Klasse so aber noch nicht wirklich effizient, da diese zweimal den Benutzer abfragt (warum nicht gleich ein Benutzerobjekt eröffnen?) und zudem wird auch mehrmals das selbe geprüft (SQL-Statement holt nur Datensätze welche Email = Email und Passwort = Passwort ist, anschliessend wird dies in der if-Bedingung nochmals geprüft.
Grundsätzlich sollte man nie im SQL-Statement das Passwort abfragen, so wurde mir dies jedenfalls gesagt.
Ich hoffe das hilft dir soweit einmal weiter.
Beste Grüsse
Meron
Erstmal Danke für deine Antwort. Habe die Fehler beseitigt (habe es später erst auf mysqli umgestellt). Das komische ist, ich habe im User CP normalerweise das Error Reporting an. Weiss also nicht woran es liegen kann, da mein xampp Apache auch komischerweise nicht mehr startet.
error_reporting bringt mir absolut gar nichts. Seite bleibt trotzdem weiß.
Bekomme jedoch immer noch ein leeres Resultat zurück. Gibt bestimmt irgendwo noch einen Warning, was ich ja aber leider nicht schauen kann wenn es nicht geht..
Habs erledigt! ;)
Danke dir, habe es auch geändert, dass er nur noch einmal die SQL Abfrage tätigt.
Beitrag zuletzt geändert: 3.7.2014 14:32:47 von cannadesign -
cannadesign schrieb:
bis auf die kleinigkeit:
... Habs erledigt!/* Zählt die Tabellen aus MySQL */ public function counter() { if($this->counter = NULL && is_resource($this->connect)) {
fällt auf? in einem if-statement
? (zuweisung funktioniert ja, nur anders halt.)$this->counter = NULL ...
Beitrag zuletzt geändert: 5.7.2014 3:37:06 von czibere -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage