Undefinded Password

Patrick21

Mitglied
Hallo Community,
Ich bin noch recht frisch hier und Starte direkt mal mit meinem ersten Problem an dem ich mir derzeit die Zähne ausbeiße.

Ich Programmiere gerade an einem MVC und dort ist auch alles schick alles läuft wie es soll jedoch macht mir eine Funktion Kopf zerbrechen.
Ich wollte gestern PDO einbinden und bekam beim Test eine Notice das der Index "password" in einem Array nicht Vorhanden sei.
Binde ich nun jedoch ein var_dump ein und lass mir das Array wo angeblich der index fehlt ausgeben ist der index jedoch vorhanden auch $_POST gibt alles richtig zurück.

Hier die Codes zu dem Fehler:

Die Loginfunktion:
PHP:
public function login(){

            if(isset($_POST['username']) && isset($_POST['password'])) {
              
                //$response = $this->model->login('*',"username = '".$_POST['username']."'");
                $response[] = $this->model->login( array(":username" => $_POST['username']) );
                $response[] = $response[0]; //Fehlerzeile
              
                      
                print_r($_POST);
                //Ab hier kommt der Fehler
                if($response['password'] == $_POST['password']){
                    echo "Login Erfolgreich";
                } else {
                    echo "Login Fehlgeschlagen";
                }
            }
        }

Das User Model:

PHP:
public function login($data){
            return $this->db->select("SELECT * FROM `users` WHERE `username` = :username", $data);
            //return $this->db->select($fields, 'users', $where);
        }

und der Aufruf in der Index:
PHP:
function login(){

            var username = $('form[name=signin] input[name=username]')[0].value;
            var password = $('form[name=signin] input[name=password]')[0].value;

            $.ajax({
                type: "POST",
                url: "<?php echo URL; ?>User/login",
                data: {username:username, password:password}
            }).done(function(response){
                if(response == 1){
                    location.reload();
                } else {
                    alert(response);
                }
            });
        }

Das Formular fürs Login sieht so aus:
HTML:
<div id="formwrapper">

                <div class="formwrapper">
                    <div class="formtitle">Login</div>
                    <form name="signin" action="" method="POST">
                        <input name="username" type="text" placeholder="username" required/>
                        <input name="password" type="password" placeholder="password" required />
                        <input type="submit" id="login" name="login" value="Login" />

                        <div class="smalltext">
                            <span>Du bist nicht Registriert ? <div class="button" id="registerBtn">Regsirteire dich Hier</div></span>
                            <span>Passwort vergessen ? <a href="">Passwort anfordern</a></span>
                        </div>
                    </form>
                </div>

Ich hoffe ihr könnt mir auf die Sprünge Helfen.
 
Zuletzt bearbeitet von einem Moderator:
Dann gib mal Zeile für Zeile immer das $_POST-Array aus um festzustellen, ab wann der Eintrag (angeblich) nicht mehr da ist. Guck auch, dass du keine Tippfehler hast. Und: Ist das oben 100%ig der Code, der den Fehler produziert? Oder hast du etwas weggelassen oder gar umgebaut, um das Problem zu verdeutlichen?

PHP:
<?php echo URL; ?>
Das z.B. ist kein Valider PHP Code und wird ebenfalls eine Notice erzeugen...
 
Tippfehler habe ich schon geprüft alles 100% richtig.
Umgebaut oder weg gelassen habe ich ebenfalls nichts.

Das POST-Array ist komplett scheint irgendwo bei der IF-Abfrage sein
 
Ich würde eher darauf tippen, dass es eigentlich ein Objekt und kein assoziatives Array ist. Probier mal:
PHP:
$dbData = $this->model->login( array(":username" => $_POST['username']) );
if ($dbData->password == $_POST['password']) {
  // ...
}

Übrigens solltest du auf gar keinen Fall Passwörter im Klartext speichern. Immer hashen, und zwar mit Salts! Schau dir mal password_verify() und Genossen auf php.net an. Standardmäßig wird bcrypt mit einem zufällig generierten Salt genutzt.
 
Ich bekomme von response ein Array zurück daher denke ich weniger das es ein Object ist.

Die genaue Meldung:
Array ( [username] => Test123 [password] => meinpasswort)
Notice: Undefined index: password in C:\xampp\htdocs\mvc\controllers\user.php on line 32
Login Fehlgeschlagen

Line 32 ist die obrige If-Abfrage.

Hier mal die SELECT Funktion der Datenbank:

PHP:
public function select($sql, $array = array(), $fetchMode = PDO::FETCH_ASSOC){
            $sth = $this->prepare($sql);
            foreach($array as $key => $value){
                $sth->bindValue($key, $value);
            }

            $sth->execute();
            return $sth->fetchAll($fetchMode);
        }
 
Ach, jetzt sehe ich den Fehler:
PHP:
$response['password']

Daher kommt der undefined-Index, nicht von dem $_POST. Woher soll dieser Index auch kommen. Er wird nirgendwo befüllt?
 
Also müsste ich den Query anpassen oder wie ?
Ich hole mir alles aus der Datenbank was mit dem User zu tun hat.

PHP:
public function login($data){
            return $this->db->select("SELECT * FROM `users` WHERE `username` = :username", $data);
        }

und damit was da raus kommt fülle ich den response
 
Schreib das mal so und lösche die komische nächste Zeile:
PHP:
$response = $this->model->login( array(":username" => $_POST['username']) );

Dann gib mal $response aus (zB mit var_dump() ) und schau dir an, ob ein Index 'password' existiert ;)
 
der Index existiert ein var_dump hab ich schon ausgelöst.
Hier der Var_dump:
Code:
Array ( [0] => Array ( [id] => 2 [name] => Patrick [username] => Test123 [URL='https://www.tutorials.de/mailto: => p.brockmann@yahoo.de [password] => ******) ) 
Notice: Undefined index: password in C:\xampp\htdocs\mvc\controllers\user.php on line 32
Fehler'] => [email gelöscht]@yahoo.de [password] => ******) ) 
 => ******) ) 
Notice: Undefined index: password in C:\xampp\htdocs\mvc\controllers\user.php on line 32
Fehler']Notice: Undefined index: password in C:\xampp\htdocs\mvc\controllers\user.php on line 32
 => ******) )
Notice: Undefined index: password in C:\xampp\htdocs\mvc\controllers\user.php on line 32
 
Zuletzt bearbeitet von einem Moderator:
Nein, tut er nicht. Es existiert der Index $response[0]['password'].
Diese Zeile ändert da GAR NICHTS dran:
PHP:
$response[] = $response[0];
Entferne dort mal die Klammern ([]), dann könnte es funktionieren. Ansonsten würde ich schauen, dass deine login()-Funktion am besten direkt ein eindimensionales Array zurückgibt - da ja eh nur ein Record zurückkommt ;)
 

Neue Beiträge

Zurück