PHP - 测试 $_GET 值是否为以下之一

PHP - Test if $_GET value is one of the following

关于 Whosebug 的第一个问题(新用户)就这么简单。

我有一个网站 www.website.com/?view=overview .

我想测试VIEW是否存在,如果不存在则重定向到另一个页面 (这是用 empty($_GET['view') 完成的并且有效

如果该测试通过,我现在想要获取该视图是 5 个值之一,如果是,那么我允许用户继续,否则我将重定向到另一个页面。

我已经尝试使用变量和数组,使用 in_array,我最多只能正确识别单个值。当我尝试测试多个时,它总是重定向。这是我测试两个值(概述和设置)的示例,但再次测试的总数应该是 5。

if (empty($_GET['view'])) {
            header("Location: www.website.com/?view=overview");
    } else {
        if (($_GET['view'] != "overview") || ($_GET['view'] != "settings")) {
            header("Location: www.website.com/?view=overview");
        } 
    }
} 

我到处找,卡住了!

您可以使用 in_array(needle, haystack) 具有有效值列表:

$valid_views = ['overview', 'settings'];
if (!in_array($_GET['view'], $valid_views){
   header("Location: www.website.com/?view=overview");
} else {
   // view is ok, continue
   header("Location: www.website.com/?view=".$_GET['view']);
} 

您正在使用 || (OR) 当你应该使用 && (AND)

if (empty($_GET['view'])) {
            header("Location: www.website.com/?view=overview");
    } else {
        if (($_GET['view'] != "overview") && ($_GET['view'] != "settings")) {
            header("Location: www.website.com/?view=overview");
        } 
    }
} 

如果 $_GET['view'] 等于 'settings' 那么它不等于 'overview',那部分条件将通过并且您的代码将重定向。反之亦然。