私は現在、データベースに接続された簡単な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;
}
}
追記:このスクリプトは、すべてのセキュリティ面で安全ではないかもしれません。しかし、それはです。私はそれをオブジェクト指向にするように頼まれていませんでしたが、この方法で試してみました。
これは<?php echo $ user-> getUsername();にする必要があります。 ?> –
あなたはタイプミスがあります: '$ username-> getUsername();'!= '$ user-> getUsername();'。そして、md5()をできるだけ早く削除してください! – st2erw2od
更新後に$ userオブジェクトからユーザー名をエコーしますか?あなたのログインコードを掲示してください。 –