PHP-基本登录检查?

PHP-基本登录检查?,php,html,login,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

因此,我尝试使用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";
        }
    }
?>
我不能发布照片,但它打印的是登录后的照片,因为BillyLogin就这样失败了。当我以Bob的身份登录时,它说以BobLogin的身份登录失败了,我不知道为什么,尽管我似乎无法理解。有人能解释一下发生了什么事,告诉我怎么解决吗

提前感谢。

请尝试以下代码:

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

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

相反,您要做的是遍历整个数组以查看是否有匹配项,如果没有匹配项,则只在循环后输出“Login failed”

$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";
}
这更简洁,也更容易循环:

$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';
}

如果您的问题是在某人经过身份验证后您没有脱离循环,那么它仍然会检查循环中的其他所有人,并在每次迭代中回显登录状态,那么这就是问题的根源。您需要的是缓存登录的用户id,如果有人登录,则设置用户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";
    }
?>
<?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";
    }
?>