2016-04-06 20 views
-1

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.

+0

getUsername(); ?> –

+0

Yazım hatası var: '$ username-> getUsername();'! = '$ User-> getUsername();'. Ve en kısa zamanda md5() çıkarın! – st2erw2od

+0

Kullanıcı adını yenilendikten sonra $ user nesnesinden mi çağırmaya çalışıyorsunuz? Giriş kodunuzu gönderin lütfen. –

cevap

0

Anlayışımdan, bir sonraki sayfada başarılı giriş yaptıktan sonra Kullanıcı bilgilerini görüntülemeye çalışıyorsunuz. İşte burada yapmanız gereken şey. Kullanıcıyı kaydet oturum değişkenindeki e-posta adresi.

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

Şimdi index.php sayfasında $ kullanıcı nesnesi oluşturmanız ve oturumda kullanıcı adını ayarlamanız gerekiyor. $user->setUsername($_SESSION["username"]); Seansı session_start();

Oturum sırasında Kullanıcı tablosunun birincil anahtarını kaydetmek ve Kullanıcı ayrıntılarını veritabanından almak iyi bir yaklaşımdır. Göreviniz için sadece iki alan olduğu gibi iyidir.

+0

tamam! teşekkür ederim! – jcal