查询变量的测试是否存在并且ALSO设置为特定值?

时间:2010-11-18 11:22:15

标签: php

我想检查查询变量是否存在。然后我会基于该查询值做一些事情。如果它存在且是真的,那就做点什么吧。如果它不存在或为假,请执行其他操作,例如显示404页面。

例如,如果网址为domain.com?konami=true

if (condition) {
    //something
} else {
    //show404
}

10 个答案:

答案 0 :(得分:8)

OP的问题有点不清楚。如果您认为他想检查konami是否为$_GET参数并且其值为"true",请执行以下操作:

if (isset($_GET["konami"]) === true && $_GET["konami"] === "true") {
    // something
} else {
    // show 404
}

当前接受的答案(Cameron)的问题在于它缺少isset检查(这是不可原谅的,客观上是错误的)。最高投票答案的问题(Jan Hancic)是缺乏=== "true"检查(这是有争议的,这取决于你如何解释问题)。

请注意&&是一个懒惰的,这意味着如果第一部分为false,则永远不会评估第二部分,这会阻止"Undefined index"警告。因此,陈述的顺序很重要。

另请注意,$a === true$a === "true"不同。第一个比较一个布尔值,而第二个比较一个字符串。

如果您进行弱比较$a == true,则表示您正在检查是否属于真相。

许多值都是真实的,例如字符串"true",数字1和字符串"foo"。 虚假值的示例包括:空字符串"",数字0null

"true" == true;   // true
"foo" == true;    // true
1 == true;        // true
"" == true;       // false
0 == true;        // false
null == true;     // false

"true" === true;  // false
"true" === false; // false

答案 1 :(得分:4)

对于应该测试什么值存在一些混淆。你想在布尔意义上测试konami参数是否为true,即你想测试konami参数是否为 truthy ,还是你呢?想测试它的字符串值是否等于"true"?或者,您是否希望一般为任何值测试konami参数?

我想这里需要的是测试konami给定的字符串值,在这种情况下为"true",并且同时进行设置。在这种情况下,这就足够了:

ini_set('error_reporting', E_ALL & ~E_NOTICE);
...
if ($_GET['konami'] == "true")
    ...

这就足够了,因为如果$_GET['konami']未设置,则除了""之外,它不能等于任何字符串值。由于您知道===是字符串,因此不需要使用$_GET['konami']

请注意,我关闭了某人可能不喜欢的E_NOTICE - 但这些类型的“通知”在许多编程语言中通常都很好,如果禁用它们,您将不会错过任何内容。如果你不这样做,你必须让代码变得如此复杂:

if (isset($_GET['konami']) && $_GET['konami'] == "true")

您是否真的希望将代码复杂化,或者更简单地忽略Undefinex index之类的通知?这取决于你。

你提到的其他答案的问题:

  • @Jan Hancic回答:它测试的是true,而不是"true"
  • @Cameron回答:可能会简化,他没有提到禁用E_NOTICE的必要性。
  • @Frits van Campen的答案:根据我的口味过于复杂,对=== true进行了不必要的测试

答案 2 :(得分:3)

嗯这个?

if (isset($_GET['konami']) === true) {
    // something
} else {
    //show 404
}

答案 3 :(得分:1)

易:

if(isset($_GET['konami']) && $_GET['konami'] != 'false') {
     //something
} else {
     // 404
}

答案 4 :(得分:1)

快速而简单。

$konami = filter_input(INPUT_GET, 'konami', FILTER_VALIDATE_BOOLEAN) or die();

参考:

filter flags

filter_input

答案 5 :(得分:1)

您可以尝试使用此代码。在此代码中,如果$ konami的条件包含值且$ konami包含'true',则检查两个条件为一。

$konami = $_GET['konami'];
if( ($konami) && ($konami == "true")){
/*enter you true statement code */
}else {
/* enter your false statement code */
} 

答案 6 :(得分:0)

你可以这样做:

$konami = false;
if(isset($_GET['konami'])){
    $konami = $_GET['konami'];
}

if($konami == "true"){
    echo 'Hello World!';
}
else{
    header('HTTP/1.0 404 Not Found');
}

在这种情况下,您将始终定义$konami,如果设置,则填充GET参数的值。

答案 7 :(得分:0)

if(!$variable) { 

     //the variable is null
     die("error, $variable is null"); 
}else{

     //the variable is set, your code here.
    $db->query("....");
}

答案 8 :(得分:-1)

这效果最好:

$konami = $_GET['konami'];

if($konami == "true")
{
    echo 'Hello World!';
}
else
{
    header('HTTP/1.0 404 Not Found');
}

答案 9 :(得分:-1)

最简单,最短的方式:

if($konami != null){ echo $konami; } else { header('HTTP/1.0 404 Not Found'); }