PHP GET问题:如果变量值不在查询字符串中,我该如何设置?

时间:2011-04-01 19:41:24

标签: php get query-string setvalue

我知道如果参数存在,如何从查询字符串中获取值:

$hop = $_GET['hop'];

但我还需要设置一个默认值,如果它不在查询字符串中。我尝试了这个并没有用:

$hop = $_GET['hop'];

if ($hop = " ") {
  $hop = 'hardvalue';
};

请帮我处理查询字符串有且没有“hop”参数的情况,如果它存在但未定义:

example.com/?hop=xyz

&安培;

example.com/

&安培;

example.com/?hop=

PS我不知道我在做什么,所以如果你向我解释,请包括我添加到我的PHP页面的确切代码。

4 个答案:

答案 0 :(得分:2)

使用array_key_exists

if (array_key_exists('hop', $_GET))
{
 // the key hop was passed on the query string.
 // NOTE it still can be empty if it was passed as ?hop=&nextParam=1

} 
else
{
 //the key hop was not passed on the query string.
}

答案 1 :(得分:2)

考虑一下它并决定它应该更健壮一点:

$hop = 'hardvalue';
if (array_key_exists('hop', $_GET)) {
    if (!empty($_GET['hop'])) { $hop = $_GET['hop']; }
}

答案 2 :(得分:1)

实际上,我会用

$hop = !empty($_GET['hop']) ? $_GET['hop'] : 'default';

使用empty()代替isset()会处理您的第三种情况,即参数存在但未定义。

此外,在if ($hop = " ")中,=需要更改为===分配,==测试平等。你拥有它的方式,无论$hop等于什么,if语句总是会运行。

答案 3 :(得分:1)

你已经得到了繁琐的解决方案。使用URL或表单参数时,您通常希望将空字符串或零视为缺少值。然后你可以使用这种替代语法:

$hop = $_GET["hop"]   or   $hop = "hardvalue";

它起作用的原因是=优先于or,并且使用额外的空格更容易阅读。

从PHP 5.3开始,也可以使用:

$hop = $_GET["hop"]  ?:  "hardvalue";

这里的优点是这种语法不会破坏php通知,这对调试很有用。