2016-04-04 1 views
1

Hey Leute, ich habe eine Frage und ich halte mich immer noch ziemlich neu in der Codierung, also vergib mir, wenn ich dumm komme.Undefinierter Indexfehler beim Versuch, Werte zu echo, verwende ich Funktionen außerhalb der Klasse

Ich studiere ab sofort in der Schule und wir haben ein Projekt, um einen kompletten Stapel Craigslist zu erstellen. Jeder, der das Problem hat, beschäftigt sich mit PHP. Ich habe eine Kontoseite mit Textbereichen erstellt. Ich möchte die Informationen des Benutzers auf ihnen wiedergeben, damit der Benutzer sehen kann, was er anbringt und aktualisiert, wie er mag. Da meine navbar auf jeder Seite enthalten ist, habe ich den Code:

if(isset($_SESSION['logged_in_user'])){ 
     var_dump($_SESSION['logged_in_user']); 
     $user = $_SESSION['logged_in_user']; 
     var_dump($user); 
} 

meinetwegen Seite dachte ich, ich es als <?= $attributes['first_name']?> innerhalb der Platzhalter aus echo kann. Aber ich erhalte:

Undefined index: first_name

Auch wenn ich var_dump($user) ich eine geschützte $ Attribute Array.

In My Auth Klasse ist, wo ich zum ersten Mal $user als solche definiert: in der Benutzerklasse

public static function attempt($attemptedUsername, $attemptedPassword) { 

$user = User::findByUserName($attemptedUsername); 
    if ($user == null) { 
     return false; 
    } 

    $validPassword = password_verify($attemptedPassword,$user->password); 
    if ($validPassword == true) { 
     $_SESSION['logged_in_user'] = $user;    
    }  
    return false;  
} 

und meine findByUserName Funktion ist. der Code ist:

public static function findByUserName($user_name){ 

     // Get connection to the database 
     self::dbConnect(); 

     $stmt = self::$dbc->prepare('SELECT * FROM users WHERE user_name = :user_name'); 

     $stmt->bindValue(':user_name', $user_name , PDO::PARAM_STR); 

     //execute gets its own line, t or false 
     $stmt->execute(); 

     $result=$stmt->fetch(PDO::FETCH_ASSOC); 

     // @TODO: Create select statement using prepared statements 

     // @TODO: Store the result in a variable named $result 

     // The following code will set the attributes on the calling object based on the result variable's contents 
     $instance = null; 
     if ($result) { 
      $instance = new static($result); 
     } 
     return $instance; 
    } 
+0

mehr Code bitte ?? –

+0

Wenn das Array geschützt ist, bedeutet dies, dass es außerhalb der Klasse/Methode, auf die es ursprünglich deklariert wurde, nicht zugreifbar ist. Wird dieser Wert innerhalb der Klasse/Methode, für die er deklariert wurde, ausgegeben? Außerdem aktivieren Sie oben im Skript die Fehlermeldung mit 'error_reporting (-1);' –

+0

@SantoshRamKunjir Ich habe meine Frage aktualisiert, damit Sie mehr von meinem Code sehen können. Ich wiederhole den Wert außerhalb der Klasse. – bezotic

Antwort

0

Ihr Problem scheint nicht in der Lage, den Zugriff auf die Variable $user außerhalb der statischen Methode, um attempt() dies, indem er erklärt die Variable global zu Beginn des Verfahrens attempt() wie folgt festgelegt werden kann:

public static function attempt($attemptedUsername, $attemptedPassword) { 

global $user; 
$user = User::findByUserName($attemptedUsername); 
    if ($user == null) { 
     return false; 
    } 

    $validPassword = password_verify($attemptedPassword,$user->password); 
    if ($validPassword == true) { 
     $_SESSION['logged_in_user'] = $user; 

    } 

    return false; 


} 

Weitere Informationen hierzu finden here dazu in der PHP-Dokumentation.