2014-04-25 78 views
-2

所以,我试图让非常基本登录使用PHP: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"我不知道为什么我似乎无法弄清楚。有人可以解释发生了什么,并告诉我如何解决它?

在此先感谢。

回答

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

尝试下面的代码:

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

如果你的问题是,你是不是打破了别人后循环已经通过认证,所以根它仍然会检查循环中的其他人,并会在每次迭代时回显登录状态。你想要的是缓存登录的用户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"; 
    } 
?>