簡體   English   中英

即使“ if”語句在PHP中為true,其他語句也會運行

[英]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之一失敗時,使用ifelse ifelse ifelse或標志,如果應執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM