Php页面依赖于查询字符串,但如果没有参数怎么办?

时间:2012-07-10 13:02:26

标签: php apache .htaccess get

我正在创建依赖于url中的查询的页面(例如europe.php?country = france)。我知道将这些论文重新编写为带有htaccess的europe.php / france用于搜索引擎优化等会很有用,但是如果在没有查询字符串的情况下访问该页面该怎么办?

我使用php来$ _GET查询,所以如果我在没有查询的情况下访问页面,我会得到'var =;'即,它是空的(并检索错误)。我正在尝试使用if语句来检查$ _GET是否只检索,但我不确定这是否正确。

那么:我如何检查未检索的var,以便设置默认值? 或者:我是否采取了错误的方式?

5 个答案:

答案 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栏,并可能损坏您的网站。

希望这有帮助!