If、elseif 和 else 语句返回不正确的结果

If, elseif and else statements returning incorrect results

我在 PHP 中创建这个失败捕获时遇到了一些问题。我希望在用户输入错误的 URL 时显示 require 'error.php';,returns $echo_error_404 = 1。 我使用正常的 PHP 路由,这意味着我的 URL 被拆分成 /example1/example2/example3/.

我有此页面 projects,当我进入该页面时,它与 $routes[1] 相同。文件 projects.php 不存在。理解正确 projects 应该属于第二个 elseif 语句。然后在使用 file_exists() 时给出 $error_echo_404 = 1 。然而...出于某种奇怪的原因,它一直持续到 $echo_content = '<div id="content-wrap">'.$php_doc_html."</div>"; PS:我也知道我的很多代码格式不正确,但是,我这样做是为了解决我的问题。

检查需要哪些文件的代码,以及运行错误检查:

// FIND WEBSITE CONTENT
$echo_content = "";

if(empty($routes[1])){
    require 'frontpage.php';
    if($echo_error_404 == 0){
        $echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
    }
}
elseif((!empty($routes[1])) && ($routes[1] == "page")){
    require 'frontpage.php';
    if($echo_error_404 == 0){
        $echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
    }
}
elseif((!empty($routes[1])) && ($routes[1] != "page")){
    $php_doc = $routes[1];
    $file_exist = $php_doc.".php";
    if(file_exists($file_exist)){
        require $php_doc.".php";
        if($echo_error_404 == 0){
            $echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
        }
        if(empty($echo_content)){
            $echo_error_404 = 1;
        }
    }
    else{
        $echo_error_404 = 1;
    }
}
else{
    $echo_error_404 = 1;

这就是我 运行 正确的版本 if $echo_error_404 = 1:

if($echo_error_404 == 1){

    require 'error.php';

    $error_index_head = <<< EOF
    HTML TAG OPENING, TITLE, HEAD AND BODY OPENING ETC.
EOF;

    echo $error_index_head;
    echo $header_html;
    echo '<div id="content-wrap">'.$error_page_html.'</div>';
    echo $echo_index_after;
    echo $footer_html;
}
else{
    echo $echo_index_head;
    echo $header_html;
    echo $echo_content;
    echo $echo_index_after;
    echo $footer_html;
}

这是我在浏览器中得到的 return,清楚地表明 $echo_error_404 没有被赋值 1:

var_dump() 结果:

elseif((!empty($routes[1])) && ($routes[1] != "page")){
    $php_doc = $routes[1];
    var_dump($php_doc);

    $php_doc_html = "";
    var_dump($php_doc_html);

    // THE CODE INBETWEEN

else{
    $echo_error_404 = 1;
}

var_dump($php_doc_html);
var_dump($echo_error_404);

Return 显示项目在 $routes[1] 并且 $echo_error_404= 1:

string(8) "projects"
string(0) ""
string(0) ""
int(1)

使用 switch() 可能更简洁一些。如果我们首先检查 $routes[1] 是否为空,我们应该不需要在以后的条件下再次执行。对我来说,您然后在您的 elseif 中再次检查它是没有意义的。如果它是空的,它将满足第一个 if 而不会继续到语句的下一部分。

// Assume no content
$echo_content = "";

// Check for content
if(empty($routes[1])){
    require 'frontpage.php';
    if($echo_error_404 == 0){
        $echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
    }
} else {
    switch($routes[1]){
        case "page":
            require 'frontpage.php';
            if($echo_error_404 == 0){
                $echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
            }
            break;
        default:
            $file_exist = "{$routes[1]}.php";
            if(file_exists($file_exist)){
                require $file_exist;
                if($echo_error_404 == 0){
                    $echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
                }
            } else {
                $echo_error_404 = 1;
            }
    }
}
if(empty($echo_content) || $echo_content == ""){
    $echo_error_404 = 1;
}