Veritabanına bağlı basit bir PHP Loginsystem uygulamasının oop yaklaşımını öğrenmeye çalışıyorum.PHP OOP Giriş sistemi - üye işlevi getUsername() işlevi NULL
Kullanıcı adı verilen bir sınıfı aldım ve onu init.php içinde $user = new User();
ile başlatalım, bu benim index.php sayfamın en üstünde gerekli. Benim login.php komut dosyasında
<?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;
}
}
Ben kullanıcı mümkün olup olmadığını kontrol etmek için $user->authenicateUser()
üye işlevi çağırmak
$user->setUsername($_POST['username'])
ve sonra $user->setPassword($_POST['password'])
arayarak kullanıcı adı ve $ kullanıcının şifresini ayarlamak oturum aç.
Kullanıcı başarıyla oturum açtıktan sonra, kullanıcı adını <?php echo $user->getUsername() ?>
ile almaya çalışıyorum ancak hiçbir şey döndürmez.
Hata ayıklamaya çalışırken, üye işlevinin düzgün çağrıldığını öğrendim, ancak özel değişkenimin $ kullanıcı adı boş/NULL olduğunu düşünüyor.
Nesnem gibi görünüyor, $ kullanıcı kapsam dışı mı? Çünkü kullanıcımı $user = new User();
ile başlattığımda ve kullanıcı adını, kullanıcı adını eklemeye çalıştığım yerdeki aynı adla ayarladığımda, mükemmel çalışıyor. Ama tabii ki bunu yapamam, çünkü giriş prosedürü sırasında nesne zaten başlatılmış olmalıdır.
Bu sorunu birkaç gün için çözmeye çalışıyorum. Yani her türlü yardım olacaktır güzel (:
Düzenleme:
benim login.php istendiği gibi:
<?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;
}
}
sidenote: Bu komut tüm güvenlik yönleriyle güvenli olmayabilir ama bu kadar. Ayrıca bazı şeylerin istendiği bir okul ödevi. Nesne yönelimli olması istenmemişti, ama ben bu şekilde denedim.
Php echo $ user-> getUsername(); ?> –
Yazım hatası var: '$ username-> getUsername();'! = '$ User-> getUsername();'. Ve en kısa zamanda md5() çıkarın! – st2erw2od
Kullanıcı adını yenilendikten sonra $ user nesnesinden mi çağırmaya çalışıyorsunuz? Giriş kodunuzu gönderin lütfen. –