我有這個 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 時,它會檢測到“用戶名未識別”。我該如何解決這個問題?
uj5u.com熱心網友回復:
您的登錄邏輯是錯誤的,因為您在所有陳述句中都使用了 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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441385.html
上一篇:如何使用php將URL中的所有url引數附加到頁面上的所有鏈接中
下一篇:在SQL中將日期列印為字串
