即使PHP中的“if”语句为真,Else语句也会运行

时间:2014-06-29 01:06:25

标签: php

我遇到了运行多个if语句的问题。即使“if”语句为真,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!?!?!!?";
}

4 个答案:

答案 0 :(得分:5)

问题是你的最终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,那么你知道你应该停止你正在做的事情&amp;循环回来:

// 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,那么您就知道存在问题&amp;你可以通过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!";

答案 1 :(得分:1)

else仅与上一个if相关 - 因此它会被执行,最后if失败 - 独立于前面的3个ifs。

如果其中一个ifs失败,请使用ifelse ifelse ifelse - 或标志,如果else应该执行。 (即如果你想同时显示所有错误 - 如果没有错误就继续)

答案 2 :(得分:1)

您的 else 仅属于最后一个 if 分支,只要密码不相同就会执行。 如果您想要多个错误消息,Possilbe会修复(否则如果 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!?!?!!?";
}

答案 3 :(得分:0)

我知道这已经得到了解答,但我发现了它,并认为我会分享我的意见(我是如何做同样的事情)。

如果您不想使用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);
    }
}

这样您就不必将其添加到表单并提交,只需添加一个按钮即可运行功能注册。