0

我正在创建依赖于 url 中的查询的页面(例如 europe.php?country=france)。我知道使用 htaccess 将论文重写为 europe.php/france 以进行 SEO 等会很有用,但是如果在没有查询字符串的情况下访问该页面怎么办?

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

那么:如何检查未检索到的 var 以便设置默认值?或者:我是不是走错了路?

4

5 回答 5

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'];
}

您可以将其压缩为一行并$country使用三元运算符将结果保存到变量中,如下所示:

$country = (isset( $_GET['country']) && !empty( $_GET['country'])) ? $_GET['country'] : 'default';

$_GET最后,您可以通过调用count()来检查您是否绝对没有参数$_GET

if( count( $_GET) == 0) {
    die( "No parameters - Invalid input!");
}
于 2012-07-10T13:03:59.750 回答
1

尝试使用这样的东西:

$var = ( isset($_GET['var']) ? $_GET['var'] : 'default value' )
于 2012-07-10T13:05:12.883 回答
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";
}
于 2012-07-10T13:05:54.647 回答
0

尝试这样做

if(isset($_GET['your_variable'])) { 
    $variable = $_GET['your_variable']; 
} else { 
    $variable = "not set"; 
}

如果它在您的 URL 中设置,它将设置变量 - 或者如果它未在 URL 中设置,它可以将您的变量设置为其他值

于 2012-07-10T13:04:55.623 回答
0

在页面开头运行检查以查看是否设置了 var 是可以的。如果它是空的,你可以使用类似的重定向:

header("HTTP/1.0 404 Not Found"); 
header('Location:YOUR PAGE NOT FOUND PAGE');
    exit();

附带说明一下,如果您使用来自 $_GET 的数据,则需要确保对这些数据进行验证和清理,以防止各种安全入侵,例如 XSS,如果您使用数据库,MYSQL 注入。在页面开头运行测试以检查它是否为空可能只是开始 - 您还可以确保数据是您所期望的(例如,检查它是字母数字)。之后,使用 $_GET 数据,任何人都可以用他们喜欢的任何内容填充 URL 栏,并可能损坏您的网站。

希望这有帮助!

于 2012-07-10T13:08:03.440 回答