2016-04-06 5 views
-1

Ich versuche gerade den oop Ansatz eines einfachen PHP Loginsystems kennenzulernen, das mit einer Datenbank verbunden ist.PHP OOP Login-System - Memberfunktion getUsername() gibt NULL zurück

Ich habe die a-Klasse namens User und initialisiere sie mit $user = new User(); in meiner init.php, die am Anfang meiner index.php erforderlich ist.

<?php 

    class User { 

    private $username; 
    private $password; 
    private $salt = '1Xi432z'; 
    private $db; 

    public function __construct() { 

     $this->db = new Database(); 
    } 

    public function setUsername($username) { 

     $this->username = $username; 
    } 

    public function setPassword($password) { 

    $this->password = md5($password . $this->salt); 
    } 

    public function authenticateUser() { 

     $stmt = $this->db->prepare('SELECT * FROM user WHERE username = ? AND pwd = ?'); 
     $stmt->bindParam(1, $this->username); 
     $stmt->bindParam(2, $this->password); 
     $stmt->execute(); 

     return $stmt->rowCount() == 1; 
    } 

    public function getUsername() { 

     return $this->username; 
    } 
    } 

In meinem login.php Skript habe ich den Benutzernamen und das Passwort von $ user von

$user->setUsername($_POST['username']) Aufruf und $user->setPassword($_POST['password'])

dann nenne ich das $user->authenicateUser() Memberfunktion zu überprüfen, ob der Benutzer in der Lage ist, Anmeldung.

Nachdem der Benutzer erfolgreich angemeldet ist, versuche ich, den Benutzernamen mit <?php echo $user->getUsername() ?> zu bekommen, aber es gibt nichts zurück.

Beim Versuch, es zu debuggen, habe ich gelernt, dass die Member-Funktion ordnungsgemäß aufgerufen wird, aber es denkt, dass meine private Variable $ Benutzername leer/NULL ist.

scheint es wie mein Objekt $ Benutzer ist außerhalb des Geltungsbereichs ?? Weil, wenn ich meinen Benutzer mit $user = new User(); initialisiere und seinen Benutzernamen in ihnen selbe Datei setze, wo ich versuche, den Benutzernamen zu wiederholen, funktioniert es vollkommen gut. Das kann ich natürlich nicht machen, da das Objekt beim Login bereits initialisiert sein muss.

Ich versuche, dieses Problem für ein paar Tage jetzt herauszufinden. So würde jede Art von Hilfe schön (:

EDIt:

als meine login.php angefordert:

<?php 

    if (isset($_POST['login'])) { 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $user->setUsername($username); 
    $user->setPassword($password); 

    if($user->authenticateUser()) { 

     $session->set('currentUser', $username); 

     header('Location: index.php'); 
    } 
    else { 

    $_POST['wrongPassword'] = true; 
    } 

    } 

Bemerkung am Rande: dieses Skript nicht sicher überhaupt in Sicherheitsaspekten sein könnte Aber es ist. Ich wurde nicht gebeten, es objektorientiert zu tun, aber ich versuche es auf diese Weise

+0

Es sollte getUsername(); ?> –

+0

Sie haben einen Tippfehler: '$ username-> getUsername();'! = '$ User-> getUsername();'. Und entferne md5() so bald wie möglich! – st2erw2od

+0

Versuchen Sie, den Benutzernamen von $ user object nach der Aktualisierung wiederzugeben? Bitte posten Sie Ihren Login-Code. –

Antwort

0

Von meinem Verständnis ausgehend versuchen Sie, Benutzerinformationen nach erfolgreicher Anmeldung auf der nächsten Seite anzuzeigen. Also hier ist, was Sie tun müssen: Speichern Sie den Benutzer s E-Mail-Adresse in der Sitzungsvariablen.

if($user->authenticateUser()) { 
    $_SESSION["username"]=$username; 
    header('Location: index.php'); 
} 

Jetzt auf der index.php Seite müssen Sie $ Benutzerobjekt erstellen und den Benutzernamen aus der Sitzung setzen. $user->setUsername($_SESSION["username"]); Vergessen Sie nicht, die Sitzung durch session_start() zu starten;

Es ist ein guter Ansatz, den Primärschlüssel der Benutzertabelle in der Sitzung zu speichern und die Benutzerdetails aus der Datenbank abzurufen. Für Ihre Aufgabe ist es in Ordnung, da es nur zwei Felder gibt.

+0

in Ordnung, danke! – jcal