登录系统中的关联数组
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;
我有这个 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;