检查$ _POST-value是否为空

Wor*_*ole 28 php string if-statement

if(isset($_POST['submit'])) {
    if(!isset($_POST['userName'])) {
        $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}
Run Code Online (Sandbox Code Playgroud)

我不能让它$username成为"匿名者"?它要么是空白,要么是值 $_POST['userName'].

Mic*_*ski 42

如果表单已成功提交,$_POST['userName']则应始终设置,但它可能包含空字符串,这与未设置完全不同.而是检查它是否是empty()

if (isset($_POST['submit'])) {
    if (empty($_POST['userName'])) {
        $username = 'Anonymous';
    } else { 
        $username = $_POST['userName'];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1有关完整性,请参阅http://php.net/empty什么被视为"空". (4认同)

And*_*ndy 41

isset()如果变量已初始化,则返回true.如果您的表单字段的name值设置为userName,则在提交该表单时,该值将始终为"set",尽管其中可能没有任何数据.

相反,trim()字符串并测试其长度

if("" == trim($_POST['userName'])){
    $username = 'Anonymous';
}      
Run Code Online (Sandbox Code Playgroud)

  • 在上面的例子中,@ edwardtorvalds变量没有被使用,只能进行比较.如果它正在改变上下文(即输出到HTML/JSON,在数据存储区查询中使用等),那么它应该被视为不可信并适当地处理上下文. (4认同)

Gaj*_*jus 10

要检查房产是否存在,无论价值如何,请使用:

if (array_key_exists('userName', $_POST)) {}
Run Code Online (Sandbox Code Playgroud)

要检查属性是否已设置(属性是否存在且值不是nullfalse),请使用:

if (isset($_POST['userName'])) {}
Run Code Online (Sandbox Code Playgroud)

要检查属性是否已设置且不为空(不是空字符串,0(整数),0.0(浮点),'0'(字符串)null,false[](空数组)),请使用:

if (!empty($_POST['userName'])) {}
Run Code Online (Sandbox Code Playgroud)


Ant*_*dge 6

问题:检查 $_POST 值是否为

翻译:检查数组键/索引是否具有与其关联的值。

答:取决于您对安全的重视程度。取决于允许作为有效输入的内容。

1. Some people say use empty().
Run Code Online (Sandbox Code Playgroud)

来自 PHP 手册:

“[Empty] 确定一个变量是否被认为是空的。如果一个变量不存在或者它的值等于 FALSE,那么它被认为是空的。”

因此,以下内容被认为是空的。

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
Run Code Online (Sandbox Code Playgroud)

如果这些值都不适用于您的输入控件,则empty()可以使用。这里的问题是它empty()可能太广泛而无法一致使用(同样的方式,出于同样的原因,在不同的输入控件提交给$_POST$_GET)。一个很好的用途empty()是检查整个数组是否为空(没有元素)。

2. Some people say use isset().
Run Code Online (Sandbox Code Playgroud)

isset()(语言构造)不能对整个数组进行操作,如isset($myArray). 它只能对变量数组元素进行操作(通过索引/键):isset($var)isset($_POST['username'])。在isset()语言结构做了两两件事。首先,它检查变量或数组索引/键是否具有与其关联的值。其次,它会检查以确保该值不等于 PHP NULL 值。

简而言之,使用 可以最好地完成最准确的检查isset(),因为某些输入控件在未选中或未选中时甚至不会使用 $_POST 进行注册。我从来不知道提交 PHP NULL 值的表单。我的都没有,所以我isset()用来检查一个$_POST键是否没有与之关联的值(并且不是 NULL)。isset()是一种更严格的测试空虚的(在你的问题的意义上)比empty()

3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
Run Code Online (Sandbox Code Playgroud)

您可以在 if 语句中测试任何计算结果为truefalse的内容。空数组的计算结果为 false,未设置的变量也是如此。包含 PHP NULL 值的变量也计算为 false。不幸的是,在这种情况下,就像 with 一样empty(),还有更多的东西也会被评估为 false:1. 空字符串 ''、零 (0)、zero.zero (0.0)、字符串零 '0'、布尔值 false 和某些空的 XML对象。

--Doyle,从 PHP 5.3 开始

总之,使用isset()并考虑将其与其他测试结合使用。例子:

由于超全局扭曲,可能无法正常工作,但毫无疑问适用于其他阵列。

if (is_array($_POST) && !empty($_POST)) {
    // Now test for your successful controls in $_POST with isset()
} 
Run Code Online (Sandbox Code Playgroud)

因此,为什么要在您确定$_POST表示一个数组并在其中存储任何值之前查找与键关联的值(许多人没有考虑到这一点)?请记住,人们可以在不使用 Web 浏览器的情况下向您的表单发送数据。您可能有一天会到达$_POST只有允许的密钥的测试点,但该对话将在另一天进行。

有用的参考:

PHP 手册:类型测试比较表