1

我目前正在用 PHP 创建一个简单的登录脚本,成功登录必须满足许多条件。据我所知,有两种方法可以格式化所需的 if 语句。

第一种方法是使用嵌套的 if 语句:

if ($condition1 == true) {
    if ($condition2 == true) {
        if ($condition3 == true) {
            //Successful login
        } else {

        }
    } else {

    }
}

第二种方法是使用程序 if 语句:

if ($condition1 != true) {
    die("error");
}
if ($condition2 != true) {
    die("error");
}
if ($condition3 != true) {
    die("error");
}

//successful login

处理许多条件的两种方法中哪一种被认为更合乎逻辑?还有其他我没有在这里列出的更好、更合乎逻辑的方法吗?

4

3 回答 3

3

在这种情况下,这并不重要,除非您想向用户展示您遇到的所有错误。

例如,您可以这样做:

if($condition1 != true) {
    if($condition2 != true) {
        if($condition3 != true) {
            // Success! Login now...
        } else {
            die(error3);
        }
    } else {
        die(error2);
    }
} else {
    die(error1);
}

在这种情况下,用户将被迫修复出现的错误。这可能需要更多时间,但更容易理解。

if ($condition1 != true) {
    $error = 'Error 1';
}
if ($condition2 != true) {
    $error .= 'Error 2';
}
if ($condition3 != true) {
    $error .= 'Error 3';
}

if($error != '') {
    die($error);
} else {
    // Success! Login now...
}

在这种情况下,用户将同时看到所有错误,并且他或她将能够在再次提交表单之前修复所有错误,但更多的信息总是更难理解。

更新:

约翰说对了。

在下面的某个地方,在登录表单和输入附近,您可以编写这样的 php 代码:

<?php if($error != '') { ?><p style="color:red;"><?php echo $error; ?></p><?php } ?>

显然,您需要使用我上面显示的代码来防止服务器在发现错误时尝试登录。

希望这可以帮助...

于 2013-07-20T15:22:12.703 回答
1

我会做这样的事情:

if(!(condition1)){
    $ok = false;
}
if(!(condition2)){
    $ok = false;
}
if(!(condition3)){
    $ok = false;
}

if($ok){
    //if they got here, they must have passed all the tests!
}

可以缩短为:

if( !(condition3) || !(condition2) || !(condition3)  ){
    echo "Success!";
}

从您的评论中:

如果满足“$condition3”,但不满足“$condition4”怎么办?

你可以使用这样的东西:

if( (condition1) && !(condition4) ) {
echo "Hurray! Condition 1 was satisified but condition 4 failed :(";
}
于 2013-07-20T15:26:20.030 回答
0

这对我来说更合乎逻辑。因为它在一个语句中代表“登录决策逻辑”,如果逻辑会变得更加混乱,它仍然是最易读的

if (($condition1 == true) 
    && ($condition2 == true)
    && ($condition3 == true)
    && ($condition4 == true)
    && ($condition5 == true)
于 2013-07-20T15:19:15.783 回答