3

そのため、ユーザーがコントロールパネルにログインしたときの「ランク」を保存しようとしています。このコントロールパネルには、指定されたランクに応じてさまざまなオプションが表示されます。ユーザー名を保存して表示するのと同じ方法を使用しました。ユーザー名は各ページの上部に表示され、問題なく機能します。ランク値で機能しない理由を一生理解することはできませんが、セッションで保存されていないことはわかっています。これが機能していないビットです。

$username = ($_POST['username']);
$password = hash('sha512', $_POST['password']);

$dbhost = 'mysql:host=██████████████████████;dbname=███████████';
$dbuser = '███████████';
$dbpassword = '████████████████';

try {
$db = new PDO($dbhost, $dbuser, $dbpassword);
$statement = $db->prepare("select password from users where email = :name");
$statement->execute(array(':name' => $username));
$result = $statement->fetch();
$pass = $result[password];
$rank = $result[rank];}

catch(PDOException $e) {echo $e->getMessage();}

if ($password == $pass) {

session_start();
$_SESSION['username'] = $username;
$_SESSION['rank'] = $rank;
header('Location: http://█████████.ca/manage.php');

}
else{
include'../../includes/head.inc';
echo '<h1>Incorrect username or password.</h1>';
include'../../includes/footer.inc';
}

また、私はPDO全体に慣れていないため、パスワードを認証する方法がかなり大雑把です。

4

1 に答える 1

3

ランクが保存されないわけではありません。明らかに、クエリからランクを取得していません。パスワードを要求するだけです。ユーザー名は他の場所から取得されます。

$db = new PDO($dbhost, $dbuser, $dbpassword);
$statement = $db->prepare("select password from users where email = :name");

// Should be select password, rank

$statement->execute(array(':name' => $username));
$result = $statement->fetch();
$pass = $result[password];
$rank = $result[rank];}
于 2012-06-28T15:11:05.443 に答える