2016-04-06 9 views
-1

私は現在、データベースに接続された簡単なPHP Loginsystemのoopアプローチを学んでいます。PHP OOPログインシステム - メンバ関数getUsername()がNULLを返します

IveはUserというクラスを持っていて、init.phpに$user = new User();という名前で初期化しています。これはindex.phpの先頭にrequired_onceです。私のlogin.phpスクリプトで

<?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; 
    } 
    } 

私は、ユーザーがすることが可能であるならば、私はチェックし$user->authenicateUser()メンバ関数を呼び出す

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

を呼び出すことにより、$ユーザーのユーザー名とパスワードを設定ログイン。

ユーザが正常にログインした後、 <?php echo $user->getUsername() ?>でユーザ名を取得しようとしていますが、何も返されません。

デバッグしようとしているうちに、メンバー関数が正しく呼び出されたが、自分のプライベート変数$ usernameが空/ NULLだと思った。

私のオブジェクト$ userは範囲外ですね?ユーザを$user = new User();で初期化し、そのユーザ名を同じファイルに設定すると、ユーザ名をエコーバックしようとすると完全にうまく動作するためです。しかし、ログインプロシージャ中にオブジェクトが既に初期化されている必要があるので、私はそれを行うことはできません。

私はこの問題を数日間把握しようとしています。だから、ヘルプの任意の種類は次のようになり素敵な(:

編集:

私login.phpを要求したとして

<?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; 
    } 

    } 

追記:このスクリプトは、すべてのセキュリティ面で安全ではないかもしれません。しかし、それはです。私はそれをオブジェクト指向にするように頼まれていませんでしたが、この方法で試してみました。

+0

これは<?php echo $ user-> getUsername();にする必要があります。 ?> –

+0

あなたはタイプミスがあります: '$ username-> getUsername();'!= '$ user-> getUsername();'。そして、md5()をできるだけ早く削除してください! – st2erw2od

+0

更新後に$ userオブジェクトからユーザー名をエコーし​​ますか?あなたのログインコードを掲示してください。 –

答えて

0

私の理解から、あなたは次のページにログインした後にユーザー情報を表示しようとしています。だからここにあなたがしなければならないことがあります。セッション変数の電子メールアドレス。

index.phpページで、$ userオブジェクトを作成し、セッションからユーザー名を設定する必要があります。 $user->setUsername($_SESSION["username"]);セッションを開始するのを忘れないでください。session_start();

Userテーブルのプライマリキーをセッションに保存し、データベースからUserの詳細を取得するのは良い方法です。あなたの割り当てのためには、2つのフィールドしかないのでうまくいきます。

+0

大丈夫です!ありがとう! – jcal

関連する問題