【问题标题】:PHP operator in if statementif 语句中的 PHP 运算符
【发布时间】:2015-12-25 22:41:11
【问题描述】:

以下问题:我有一个 controller.php,它从输入的 URL 中捕获两个 $_GET-Values。

  • $view = $_GET['view']
  • $sitename = $_GET['site']

现在我想检查 $sitename 是“leichtathletik”还是“landingpage”或“galerie”或“anlaesse”或“mitglieder”

如果 $view 是 "visitor" 或 "admin" 或 "member"

如果为假

转发到 404 错误页面

如果为真 运行以下代码

if (
    ($sitename != "landingpage" 
        && $sitename != "leichtathletik" 
        && $sitename != "mitglieder" 
        && $sitename != "anlaesse" 
        && $sitename != "galerie") 
    || ($view != "visitor" 
        && $view != "member" 
        && $view != "admin")
) {
    header("HTTP/1.0 404 Not Found"); //prüft ob der Sitename und der Viewname gültig sind. Wenn nicht -> Error
    exit();

} else {
    //run code
    }
}

使用此代码,我可以插入错误的 $view 或 $sitename 并且它不会转发到 404 页面

原始网址如:www.domain.tld?view=xxx&sitename=xxx

重写后的url是这样的:www.domain.tld/view/sitename.php .哪里错了?

【问题讨论】:

  • 为什么不把它分解成逻辑块,而不是试图把所有东西串成一个巨大的if?这将使您更容易发现问题。
  • 必须查看您的声明。如果它太长太复杂,总有更好、更简单的方法。如果您的关键字要像您介绍的那样被非常具体地评估,请考虑编写一个迭代一系列可能性的函数,甚至是每个关键字的开关。
  • 看看这个问题:*.com/questions/5534268/…
  • 这里没有转发,只是设置了headers。
  • 好的,我会尝试将语句分解为更小的 if-statments

标签: php if-statement operator-keyword


【解决方案1】:

这是一个简单的switch 可以帮助清理的区域。然后我们将其放入一个函数中,使其简洁易懂

function redirect($site, $view) {
    switch($site) {
        case 'landingpage':
        case 'leichtathletik':
        // etc
        case 'galerie':
            return true; break;
        // no default since we don't want it to do something if no matches
    }
    // Now do the same for $view    
    return false; // Should only reach this if you don't match anything
}

【讨论】:

    【解决方案2】:

    感谢你们的投入。

    我用这个语句修复了它:

        if($sitename=="landingpage" || $sitename=="leichtathletik" || $sitename=="galerie" || $sitename=="anlaesse" || $sitename=="mitglieder"){
    
        //code
    
        }else{
           header("HTTP/1.0 404 Not Found");
         header('Location:http://www.xxx.ch/error/error404.html'); 
        }
    
    }else{
         header("HTTP/1.0 404 Not Found");
         header('Location:http://www.xxx.ch/error/error404.html');
    }
    

    }

    【讨论】: