kostenloser Webspace werbefrei: lima-city


MySQL gibt immer leeres Resultat zurück

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    cannadesign

    Kostenloser Webspace von cannadesign

    cannadesign hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******e

    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>
    ;)
  4. Autor dieses Themas

    cannadesign

    Kostenloser Webspace von cannadesign

    cannadesign hat kostenlosen Webspace.

    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
  5. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    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
  6. Autor dieses Themas

    cannadesign

    Kostenloser Webspace von cannadesign

    cannadesign hat kostenlosen Webspace.

    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.
  7. 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
  8. Autor dieses Themas

    cannadesign

    Kostenloser Webspace von cannadesign

    cannadesign hat kostenlosen Webspace.

    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
  9. cannadesign schrieb:
    ... Habs erledigt!
    bis auf die kleinigkeit:
    /* Zählt die Tabellen aus MySQL */
         public function counter() {
             if($this->counter = NULL && is_resource($this->connect)) {
    fällt auf? in einem if-statement
    $this->counter = NULL ...
    ? (zuweisung funktioniert ja, nur anders halt.)

    Beitrag zuletzt geändert: 5.7.2014 3:37:06 von czibere
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!