我正在创建依赖于url中的查询的页面(例如europe.php?country = france)。我知道将这些论文重新编写为带有htaccess的europe.php / france用于搜索引擎优化等会很有用,但是如果在没有查询字符串的情况下访问该页面该怎么办?
我使用php来$ _GET查询,所以如果我在没有查询的情况下访问页面,我会得到'var =;'即,它是空的(并检索错误)。我正在尝试使用if语句来检查$ _GET是否只检索,但我不确定这是否正确。
那么:我如何检查未检索的var,以便设置默认值? 或者:我是否采取了错误的方式?
答案 0 :(得分:1)
如果您知道$_GET
的索引,请使用isset()
:
$country = 'default';
if( isset( $_GET['country'])) {
$country = $_GET['country'];
}
这只会测试是否传递了country
参数,但它可能已设置为空字符串。如果这是无效输入,您可以使用empty()
:
$country = 'default';
if( isset( $_GET['country']) && !empty( $_GET['country'])) {
$country = $_GET['country'];
}
您可以将其压缩为一行,并使用ternary operator将结果保存到变量$country
,如下所示:
$country = (isset( $_GET['country']) && !empty( $_GET['country'])) ? $_GET['country'] : 'default';
最后,您可以通过致电$_GET
上的count()
来检查您是否完全没有$_GET
参数:
if( count( $_GET) == 0) {
die( "No parameters - Invalid input!");
}
答案 1 :(得分:1)
尝试使用类似的东西:
$var = ( isset($_GET['var']) ? $_GET['var'] : 'default value' )
答案 2 :(得分:1)
因为isset()确实测试了“NOT NULL”,所以你应该使用empty()来测试是否给出了一个空字符串:
if (empty($_GET['country'])) {
$_GET['country'] = "default";
}
即,除非您希望0
成为有效输入,否则在这种情况下,您必须检查isset并确保该字符串至少包含一个字符:
if (!isset($_GET['country']) || !strlen($_GET['country'])) {
$_GET['country'] = "default";
}
可以优化成
if (!isset($_GET['country']) || !isset($_GET['country'][0])) {
$_GET['country'] = "default";
}
答案 3 :(得分:0)
尝试这样做
if(isset($_GET['your_variable'])) {
$variable = $_GET['your_variable'];
} else {
$variable = "not set";
}
如果在URL中设置了变量,那么它将设置变量 - 如果变量未在URL中设置,它可以将变量设置为其他值
答案 4 :(得分:0)
在页面开头运行检查以查看是否设置了var是可以的。如果它为空,您可以使用以下内容重定向:
header("HTTP/1.0 404 Not Found");
header('Location:YOUR PAGE NOT FOUND PAGE');
exit();
另外,如果您使用的是来自$ _GET的数据,则需要确保此数据已经过验证。清理以防止各种安全入侵,例如XSS,如果使用数据库,则使用MYSQL注入。在页面开始时运行测试以检查它是否为空只是开始 - 您还可以确保数据是您期望的(例如,检查它是否为字母数字)。之后,使用$ _GET数据,任何人都可以用他们喜欢的任何内容填充URL栏,并可能损坏您的网站。
希望这有帮助!