[英]Else statement runs even if the “if” statements are true in PHP
我在運行多個if語句時遇到問題。 即使“ if”語句為true,else語句由於某些奇怪的原因仍會運行后綴。 有什么可能的原因嗎?
$userlength = strlen($username);
$emailength = strlen($email);
$passlength = strlen($password);
// VERIFICATION
if ($userlength < 10 || $userlength > 20) {
Echo "Username Error";
}
if ($emailength < 7 || $emailength > 30) {
Echo "Email Error";
}
if ($passlength < 5 || $passlength > 32) {
Echo "Password Error";
}
if ($password != $repassword) {
Echo "Passwords Do Not Match";
}
else {
Echo "This still runs!?!?!!?";
}
問題是您的最終else
只為最后的戲劇if
; else if
這樣,請嘗試使用else if
:
// VERIFICATION
if ($userlength < 10 || $userlength > 20) {
echo "Username Error";
}
else if ($emailength < 7 || $emailength > 30) {
echo "Email Error";
}
else if ($passlength < 5 || $passlength > 32) {
echo "Password Error";
}
else if ($password != $repassword) {
echo "Passwords Do Not Match";
}
else {
echo "This still runs!?!?!!?";
}
但是您的邏輯尚不清楚。 因此,也許您需要像這樣使它更強大。 這個想法是$invalid
設置為FALSE
,任何錯誤都將$invalid
設置為TRUE
。 因此,如果在檢查結束時$invalid
確實為TRUE
,則說明您應該停止正在做的事情並循環返回:
// VERIFICATION
$invalid = FALSE;
if ($userlength < 10 || $userlength > 20) {
$invalid = TRUE;
echo "Username Error";
}
if ($emailength < 7 || $emailength > 30) {
$invalid = TRUE;
echo "Email Error";
}
if ($passlength < 5 || $passlength > 32) {
$invalid = TRUE;
echo "Password Error";
}
if ($password != $repassword) {
$invalid = TRUE;
echo "Passwords Do Not Match";
}
if ($invalid) {
echo "There were errors.";
die();
}
echo "If you get to here, everything checks out. Move on!";
或者是使用$errors
數組處理此問題的更好方法。 這個想法是,對於每個錯誤,都會在$errors
數組中設置一個值。 那么如果檢查后$errors
數組為空? 您知道輸入有效。 如果有$errors
則說明存在問題,您可以通過foreach
循環回顯數組的內容:
// VERIFICATION
$errors = array();
if ($userlength < 10 || $userlength > 20) {
$errors[] = "Username Error";
}
if ($emailength < 7 || $emailength > 30) {
$errors[] = "Email Error";
}
if ($passlength < 5 || $passlength > 32) {
$errors[] = "Password Error";
}
if ($password != $repassword) {
$errors[] = "Passwords Do Not Match";
}
if (!empty($errors)) {
$was_word = count($errors) > 1 ? "were" : "was";
$error_word = count($errors) > 1 ? "errors" : "error";
echo "There " . $was_word . count($errors) . " " . $error_word . "<br />";
foreach ($errors as $error) {
echo $error . "<br />";
}
die();
}
echo "If you get to here, everything checks out. Move on!";
else
僅與最后一個if
相關,因此它將每次執行, if
失敗,則與前面的3個ifs無關。
每當ifs之一失敗時,使用if
, else if
, else if
, else
或標志,如果應執行else
。 (即,如果您想同時顯示所有錯誤-如果沒有,請繼續顯示)
您的else僅屬於最后一個if分支,每當密碼不相等時就會執行。 如果您希望出現多個錯誤消息,可以進行修復(否則, 如果使用s,則使用else ):
// VERIFICATION
$success = true;
if ($userlength < 10 || $userlength > 20) {
Echo "Username Error";
$success = false;
}
if ($emailength < 7 || $emailength > 30) {
Echo "Email Error";
$success = false;
}
if ($passlength < 5 || $passlength > 32) {
Echo "Password Error";
$success = false;
}
if ($password != $repassword) {
Echo "Passwords Do Not Match";
$success = false;
}
if ($success) {
Echo "This still runs!?!?!!?";
}
我知道已經回答了這個問題,但是我發現了它,並認為我會分享我的觀點(我是怎么做的)。
如果您不想使用ajax,則可以停止閱讀,因為此解決方案將使用ajax。
$username = $_POST["u"];
$email = $_POST["e"];
$password = $_POST["p"];
$repassword = $_POST["vp"];
$userlength = strlen($username);
$emailength = strlen($email);
$passlength = strlen($password);
// VERIFICATION
if ($userlength < 10 || $userlength > 20) {
Echo "Username_error";
exit();
} elseif ($emailength < 7 || $emailength > 30) {
Echo "Email_error";
exit();
} elseif ($passlength < 5 || $passlength > 32) {
Echo "Passworderror";
exit();
} elseif ($password != $repassword) {
Echo "Password_match_error";
exit();
}
echo "signup_success";
然后,您想運行一個ajax腳本,該腳本檢查正在回顯的內容並直接告訴您出了什么問題。
function signup(){
var u = $("#username").value;
var e = $("#email").value;
var p = $("#password").value;
var vp = $("#verificationpassword").value;
var errors = $("$errormessages");
if(u == "" || e == "" || p == "" || vp == "" ){
errors.innerHTML = "Fill out all of the form data";
} else {
var ajax = ajaxObj("POST", "signup.php");
ajax.onreadystatechange = function() {
if(ajaxReturn(ajax) == true) {
if(ajax.responseText != "signup_success"){
errors.innerHTML = ajax.responseText;
} else {
window.scrollTo(0,0);
$("#signupform").innerHTML = "OK "+u+", check your email inbox and junk mail box at <u>"+e+"</u> in a moment to complete the sign up process by activating your account. You will not be able to do anything on the site until you successfully activate your account.";
}
}
}
ajax.send("u="+u+"&e="+e+"&p="+p+"&vp="+vp);
}
}
這樣,您不必將其添加到表單中並提交,只需添加一個按鈕即可運行onclick函數注冊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.