我遇到了运行多个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!?!?!!?";
}
答案 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失败,请使用if
,else if
,else if
,else
- 或标志,如果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);
}
}
这样您就不必将其添加到表单并提交,只需添加一个按钮即可运行功能注册。