簡単な「アクセス」レベル チェックを追加しようとしましたが、データベースから値を取得できません。常に Null を取得します。User とほぼ同じクエリですが、Pass チェックを行います。
とにかく、これが私のコードです。もう少しうまくやれるかもしれません!
*コメントに応じて更新
public function userLogin() {
$success = false;
try {
$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare($sql);
$stmt->bindValue(":username", $this->username, PDO::PARAM_STR);
$stmt->bindValue(":password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR);
// $stmt->bindValue("access", $this->access, PDO::PARAM_INT);
$stmt->execute();
$valid = $stmt->fetchColumn();
if ($valid) {
$success = true;
session_start();
$_SESSION['username'] = $this->username;
}
$con = null;
return $success;
} catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
}
public function auth() {
$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT access FROM users WHERE access = :1 OR access = :2";
$stmt = $con->prepare($sql);
$stmt->bindValue(":access", $this->access, PDO::PARAM_INT);
$stmt->execute();
$access = $stmt->fetchColumn();
if ($access == 1) {
session_start();
$_SESSION['isAdmin'] = $this->access;
} if ($access == 2) {
session_start();
$_SESSION['isUser'] = $this->access;
}
}
「headerauth.php」という別のファイルがあります。これは、動作する Welcome $_SESSION['username'] を含む小さな DIV ブロックであり、テスト/開発上の理由から、最後に Var_Dump があり、次の結果が得られます。
配列 'ユーザー名' => 文字列 'テスト' (長さ = 4)
userLogin 関数と同じブロックに Auth があるとき、値は以前は
ヌル;