因此,我尝试使用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"
时,我不知道为什么我似乎无法弄明白。有人可以解释一下发生了什么并告诉我如何修复它吗?
提前致谢。
答案 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";
}