代码之家  ›  专栏  ›  技术社区  ›  Cameron

查询变量是否存在,并设置为特定值?

php
  •  2
  • Cameron  · 技术社区  · 14 年前

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

    e、 g如果url是 domain.com?konami=true

    if (condition) {
        //something
    } else {
        //show404
    }
    
    10 回复  |  直到 11 年前
        1
  •  8
  •   Halcyon    11 年前

    OPs的问题有点不清楚。如果你认为他想检查 konami $_GET 参数的值为 "true" 做:

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

    目前(卡梅伦)接受的答案的问题是,它缺乏 isset 检查(这是不可原谅的,客观上是错误的)。最高票数的答案(由Jan Hancic提供)的问题是它缺少 === "true" 检查(这是有争议的,这取决于你如何解释这个问题)。

    请注意 && 是一个懒惰的并且,意思是如果第一部分是错误的,第二部分将永远不会被计算,这阻止了 "Undefined index" 警告。所以陈述的顺序很重要。

    还要注意 $a === true $a === "true" . 第一个比较布尔值,而第二个比较字符串。

    如果你做弱比较 $a == true 你在检查真相。

    许多价值观都是真实的,就像绳子 “真的” ,号码 1 ,和字符串 "foo" 。 错误值的示例有:空字符串 "" ,号码 0 null .

    "true" == true;   // true
    "foo" == true;    // true
    1 == true;        // true
    "" == true;       // false
    0 == true;        // false
    null == true;     // false
    
    "true" === true;  // false
    "true" === false; // false
    
        2
  •  4
  •   Tomas    11 年前

    关于应该测试什么值有点混乱。你想测试一下 konami 存在的参数 true 在布尔意义上,即你想测试 科纳米 存在的参数 真的 ,或者是否要测试其字符串值是否等于 "true" ? 或者你想测试 科纳米 参数 任何 总体价值?

    我想这里需要的是测试 科纳米 对于给定的字符串值, “真的” 在这种情况下,同时设置。在这种情况下, 这就足够了:

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

    这就够了,因为如果 $_GET['konami'] 未设置,它不能等于任何字符串值,除非 "" . 使用 === 不是必要的,因为你知道 $获得['konami'] 是字符串。

    注意,我关闭了 E_NOTICE 有人可能不喜欢-但这些类型的“通知”在许多编程语言中通常都很好,如果禁用它们,您不会错过任何东西。如果不这样做,则必须使代码变得非常复杂,如下所示:

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

    你真的想用这个把你的代码复杂化吗,或者更确切地说,让它简单化,忽略像 Undefinex index ? 这取决于你。

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

    • @Jan Hancic回答:它测试 真的 ,不是 “真的” .
    • @卡梅隆回答:可能会被简化,他没有提到禁用的必要性 通知 .
    • @弗里茨·范·坎彭的回答是:太复杂了,不符合我的口味,不必要的测试 === true
        3
  •  3
  •   aksu    11 年前

    嗯这个?

    if (isset($_GET['konami']) === true) {
        // something
    } else {
        //show 404
    }
    
        4
  •  1
  •   Floris    13 年前

    容易的:

    if(isset($_GET['konami']) && $_GET['konami'] != 'false') {
         //something
    } else {
         // 404
    }
    
        5
  •  1
  •   manta    11 年前

    又快又简单。

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

    裁判:

    filter flags

    filter_input

        6
  •  1
  •   Ajitha Ms    11 年前

    你可以试试这个代码。在这段代码中,如果条件$konami包含值而$konami包含“true”,则逐个检查两个条件。

    $konami = $_GET['konami'];
    if( ($konami) && ($konami == "true")){
    /*enter you true statement code */
    }else {
    /* enter your false statement code */
    } 
    
        7
  •  0
  •   lorem monkey    13 年前

    你可以这样做:

    $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参数的值。

        8
  •  0
  •   r3wt    11 年前
    if(!$variable) { 
    
         //the variable is null
         die("error, $variable is null"); 
    }else{
    
         //the variable is set, your code here.
        $db->query("....");
    }
    
        9
  •  -1
  •   Cameron    14 年前

    这最有效:

    $konami = $_GET['konami'];
    
    if($konami == "true")
    {
        echo 'Hello World!';
    }
    else
    {
        header('HTTP/1.0 404 Not Found');
    }
    
        10
  •  -1
  •   prinsen    11 年前

    最简单和最短的方法:

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