私はphpが初めてです。私はログイン システムを持っています。現在、禁止とユーザー アクティベーション システムを実装しようとしていますが、ログイン スクリプトに問題があります。これが私のスクリプトのコードです:
<?php
$query = "SELECT id, username, password, salt, email, firstname, lastname, active, banned FROM users WHERE username = :username ";
$query_params = array(
':username' => $_POST['username']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$row = $stmt->fetch();
$login_ok = false;
$login_match = false;
$login_active = false;
$login_banned = false;
if($row)
{
$check_password = hash('sha256', $_POST['password'] . $row['salt']);
if($check_password === $row['password'])
{
$login_match = true;
}
if($row['active'] == 1) {
$login_active = true;
}
if($row['banned'] == 1) {
$login_banned = true;
}
if($login_match && $login_active && !$login_banned) {
$login_ok = true;
}
}
if($login_ok)
{
unset($row['salt']);
unset($row['password']);
$_SESSION['user'] = $row;
header("Location: index.php");
die("Redirecting...");
}
else
{
if(!$login_match) { echo "Wrong username/pasword.";}
if(!$login_active) { echo "Account not activated, check your email";}
if($login_banned) { echo "Your account is banned";}
}
?>
私のデータベースには、有効と禁止の 2 つの列があります。0 はアカウントが有効で禁止されていないことを意味し、1 はアカウントが有効でないか禁止されていることを意味します。
ユーザーにさまざまなメッセージを表示するにはどうすればよいですか? ユーザーが間違ったユーザー名またはパスワードを入力すると、最後の else {} から 3 つのメッセージすべてを受け取ることになります。次のようなメッセージをユーザーに表示したい: ユーザー名またはパスワードが間違っている場合は、間違ったユーザー名/パスワードのみを表示します。$login_active $login_banned を無視します。ユーザー名/パスワードに問題はないが、アカウントが有効になっていない場合、アカウントが有効になっていない場合は、メールを確認してください。$login_banned スイッチを無視します。ユーザー名/パスワードは問題ないが、アカウントが禁止されている場合は、アカウントが禁止されていると表示し、$login_active スイッチを無視します。
書きすぎてすみません、ちゃんと説明してください。