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

PHP读取可能已设置或未设置的'get'变量

  •  8
  • thecoshman  · 技术社区  · 15 年前

    如果您尝试读取'get'变量的值,那么如果URL中没有设置该变量,会发生什么情况。示例:请求页面 test.php $_GET['message'] '' ?

    这是否意味着,如果我总是希望输入一个值,而不愿意接受“”的值,那么我可以这样做

    $foo = $_GET['bar'];
    if($foo == ''){
      // Handle my 'error'
    }
    else
    {
      // $foo should now have a value that I can work with
    }
    

    isset($_GET['bar']) 但我不只是想知道它是否被设置,我不关心它是否被设置,我只关心它的值是否不仅仅是一个空字符串。

    4 回复  |  直到 10 年前
        1
  •  7
  •   elias    15 年前

    如果您不关心是否实际设置了该值,可以使用以下方法:

    if (empty($_GET['bar']))
        // value is null, false, 0, '0' or an empty string (including whitespace).
    
        2
  •  6
  •   Yacoby    15 年前

    如果尝试访问一个不存在的数组项,结果将是 null .

    $foo = $_GET['bar']; //$foo is now null
    

    comparison operator == 而不是严格的比较 === ''

    上面代码的缺点是,当您使用不存在的索引访问数组时,它会生成一个通知,这有点混乱。

    因此,在将包含的值赋给变量之前,应该检查该值是否已设置。

    if ( !isset($_GET['bar']) ){
        //handle error or assign default value to $foo
    }else{
        $foo = $_GET['bar'];
    }
    

    如果您想要有一个默认值,并且只有在$\u GET值存在时才替换该默认值,那么您可以使用 conditional operator (向下滚动至“三元运算符”)

    $foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value';
    
        3
  •  1
  •   ArtisticPhoenix    10 年前

    $foo = ( isset( $_GET['bar'] ) ) ? $_GET['bar'] : false;
    
    if(false === $foo){
       die( 'no Foo for your Bar' );
    }
    

    另一方面,您可能永远不会从$\u get获得真正的布尔值

        4
  •  0
  •   Ali Demirci    15 年前

    如果我理解正确的话:

    $foo = $_GET['bar'];
    if ((!isset($foo)) || $foo == '') {
    //GET veriable not set, error
    }
    else {
    // GET veriable set, code here.
    }