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

如何检测何时将“0”作为表单/$_POST值提供?

  •  2
  • dcolumbus  · 技术社区  · 10 年前

    我试图确定是否传递了一个值,但该值可以是 0 ...

    isset 始终返回true,并且 empty 返回false,因为值为 0

    我该怎么解决这个问题?

    5 回复  |  直到 10 年前
        1
  •  1
  •   alex    10 年前

    尝试

    bool array_key_exists ( mixed $key , array $array )
    

    喜欢

    if (array_key_exists("var1", $_POST)) {
        // positive case, var1 was posted
        if ($_POST["var1"] == 0){
            // var1 was posted and 0
        }else{
            // var1 was posted and is not 0
        }
    }
    

    更多详情请参见 docs .

        2
  •  1
  •   SamT    10 年前

    $_POST 数组是所有字符串。使用 === 操作员:

    if ($_POST['key'] === '0') {
       // do things
    }
    
        3
  •  0
  •   Adeel Gill    10 年前

    试试这个

    如果(isset($_POST['name'])&&$_POST['name']!=0)) { / 您的代码 / }

        4
  •  0
  •   cOle2    10 年前

    简单地检查值是否为空:

    if (isset($_POST['key']) && $_POST['key'] !== '')) {
      //'key' is set and not empty
    }
    
        5
  •  -1
  •   user2864740    10 年前

    所有post值都是字符串,因此请考虑:

    isset($a[i]) && strlen($a[i])
    

    如果且仅当 价值( 除了 “空字符串”)。与 empty , which would return FALSE ,这也将检测何时将“0”作为值传递。与建议的解决方案不同,当提供“”时,它将不为真:因此,它真正检测到 已传递值。


    而且 array_key_exists isset $_POST键的工作原理相同,因为没有NULL值;可以说,关键检查是非空字符串。一个值 如果确定存在(根据上述/期望的规则),则可以根据需要进行处理-例如。 if ($a[i] > 0) if ($a[i] == 0) .