问题描述
关于 stackoverflow 的第一个问题(新用户)对我来说太赤裸裸了。
我有一个网站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',条件的那部分将通过并且您的代码将重定向。反之亦然。