登录系统中的关联数组

Associative array in Login system

我有这个 foreach 循环,其中有 3 个 if else 语句。第一个是它登录成功,第二个是密码错误,第三个是它检测到用户名不存在于数组中。我的问题是当我尝试使用其他用户名时,即使它是正确的,它检测到用户名未确定。

        $users = array(
        array("User" => "Joshua", "Password" => "12345"),
        array("User" => "Xen", "Password" => "x021"),
        array("User" => "Admin", "Password" => "admin"),
        array("User" => "user", "Password" => "user")
    );
    $userName =$_GET['username'];
    foreach ($users as $value) {
        if ($_GET['username'] == $value["User"] and $_GET['password'] == $value["Password"]) {
            echo "Login Succesful";
            break;
        } else if ($_GET['username'] == $value["User"] and $_GET['password'] != $value["Password"]) {
            echo "Wrong Password";
          break;
        } else {
            echo "username not identified";
            break;
        }
    }

如果我尝试使用用户名 Joshua,它会成功登录,但是当我尝试使用 Xen、Admin 和 User 时,它会检测到“用户名未被识别”。我该如何解决这个问题?

您的登录逻辑是错误的,因为您在所有语句中都使用了 break,这就是为什么如果 foreach 的第一次迭代不等于输入,那么整个 foreach 将被终止。一旦登录成功并且密码错误,你应该使用 break

$users = array(
    array("User" => "Joshua", "Password" => "12345"),
    array("User" => "Xen", "Password" => "x021"),
    array("User" => "Admin", "Password" => "admin"),
    array("User" => "user", "Password" => "user")
);
$userName =$_GET['username'];
$msg = "";
foreach ($users as $value) {
    if($userName == $value['User'] && $_GET['password'] == $value['Password']) 
    {
        $msg = "<p>Login successful</p>";

        //if success break the loop
        break;
    }else if ($userName == $value["User"] and $_GET['password'] != $value["Password"]) {
        $msg = "<p>Wrong Password</p>";
        //if wrong password break the loop
        break;
    }
    else
    {
       $msg = "<p>Wrong username or password</p>";
    }
}

echo $msg;