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
Es sollte Php echo $ user-> getUsername(); ?> –
Sie haben einen Tippfehler: '$ username-> getUsername();'! = '$ User-> getUsername();'. Und entferne md5() so bald wie möglich! – st2erw2od
Versuchen Sie, den Benutzernamen von $ user object nach der Aktualisierung wiederzugeben? Bitte posten Sie Ihren Login-Code. –