PHP - 基本登录检查?

时间:2014-04-25 00:52:22

标签: php html login

因此,我尝试使用PHP进行非常基本登录:

<?php
    $username = $_POST["username"];
    $password = $_POST["password"];

    $users = array("Billy", "Bob");
    $passes = array("billy123", "pass1234");

    for ($i = 0; $i < count($users); $i++) {
        $user = $i;
        if ($username === $users[$i]) {
            if ($password === $passes[$user]) {
                echo "Logged in as " .$users[$user];
            }
        }
        else if ($username !== $users[$i] && $password !== $passes[$i]) {
            echo "Login failed";
        }
    }
?>

我无法发布图片,但它打印"Logged in as BillyLogin failed"就像那样。当我以Bob身份登录"Logged in as BobLogin failed"时,我不知道为什么我似乎无法弄明白。有人可以解释一下发生了什么并告诉我如何修复它吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

当然会发生这种情况,因为对于 匹配的每个用户名/密码组合,您会回显“登录失败”......

你要做的是,循环遍历整个数组以查看是否存在匹配 - 并且输出“登录失败”循环后如果有没有。

$login_successful = false;
for ($i = 0; $i < count($users); $i++) {
    if ($username === $users[$i] && $password === $passes[$i]) {
        echo "Logged in as " .$users[$i];
        $login_successful = true;
        break; // no need to continue the loop here, so we break out of it
    }
}
if (!$login_successful) {
    echo "Login failed";
}

因为如果出于某种原因你的$users$passes数组在某些时候出于任何原因没有相同数量的条目,这将会破坏,你应该考虑使用更合适的数据结构同样 - 可能是

$login_credentials = array(
  arrays('username' => 'Billy', 'password' => 'billy123'),
  arrays('username' => 'Bob',   'password' => 'pass1234'),
);

这更简洁,也更容易循环:

$login_successful = false;
foreach ($login_credentials as $login_credential) {
    if ($username === $login_credential['username'] && $password === $login_credential["password"]) {
        echo 'Logged in as ' . $username;
        $login_successful = true;
        break; // no need to continue the loop here, so we break out of it
    }
}
if (!$login_successful) {
    echo 'Login failed';
}

答案 1 :(得分:0)

如果您的问题是在某人经过身份验证后您没有突破循环,那么它是root用户,因此它仍然会检查循环中的其他所有人,并在每次迭代时回显登录状态。你想要的是缓存登录的用户ID,如果有人登录,设置用户ID并打破循环。如果在循环之后设置了用户标识,则它们将被登录,否则它们不会登录。

<?php
    $username = $_POST["username"];
    $password = $_POST["password"];

    $users = array("Billy", "Bob");
    $passes = array("billy123", "pass1234");

    $user_id=-1;

    for ($i = 0; $i < count($users); $i++)
    {
        if ($username === $users[$i] && $password === $passes[$i])
        {
            $user_id=$i;
            break;
        }
    }

    if($user_id>=0)
    {
        echo "Logged in as " .$users[$user_id];
    }else
    {
        echo "Login failed";
    }
?>

答案 2 :(得分:-1)

尝试以下代码:

$username = $_POST['user'];
$password = $_POST['pass'];
$user["Bob"]="pass";
if ($username==$user[$username]){
echo "Authenticated";
} else {
echo "bad password";
}