if,elseif和else语句返回错误的结果

时间:2015-10-14 22:57:17

标签: php html if-statement routing require

我在PHP中创建此失败捕获时遇到一些问题。我想在用户输入错误的网址时显示require 'error.php';,该网址会返回$echo_error_404 = 1。 我使用普通的PHP路由,这意味着,我的网址被分成/example1/example2/example3/

我有这个页面projects,当我进入该页面时,它与$routes[1]相同。文件projects.php不存在。正确理解projects应该属于第二个elseif声明。然后在使用$error_echo_404 = 1时给予file_exists()。但是......出于一些奇怪的原因,它一直持续到$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;

如果我$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;
}

这是我在浏览器中看到的返回内容,清楚地显示$echo_error_404未分配值1

Image of result

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);

返回表明项目位于$routes[1]$echo_error_404= 1

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

1 个答案:

答案 0 :(得分:2)

使用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;
}