如果value设置为0,则PHP empty($ val)函数返回true

时间:2010-01-07 18:35:16

标签: php validation

我有以下PHP代码:

$required_fields = array ('menu_name','visible','position');
foreach($required_fields as $fieldname)
{
    if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
    {
        $errors [] = $fieldname;
    }
}

menu_namevisibleposition是通过post方法接收的变量。

visible的值为零时,它会在错误数组中创建一个条目。

当0被视为“非空”时,检测变量是否为空的最佳方法是什么?

4 个答案:

答案 0 :(得分:8)

来自PHP的manual

  如果var有a,则

empty()返回FALSE   非空和非零值。

做这样的事情:

if ( !IsSet ( $_POST['field'] ) || Trim ( $_POST['field'] ) == '' )

这将确保该字段已设置且不包含空字符串

实质上:导致问题的是empty()而不是IsSet()

答案 1 :(得分:1)

由于用户数据很草率,我使用自定义函数将空格作为非数据处理。听起来这将完全符合您的要求。此函数将“0”视为有效(也称为非空)数据。

function isNullOrEmpty( $arg )
{
    if ( !is_array( $arg ) )
    {
        $arg = array( $arg );
    }

    foreach ( $arg as $key => $value )
    {
        $value = trim($value);
        if( $value == "" || $value == null )
        {
            return true;
        }
    }
    return false;
}

请注意它也支持数组,但要求数组中的每个值都包含数据,这可能很有用,因为你可以这样做:

$required = array( $_POST['name'],  $_POST['age'], $_POST['weight'] );
if ( isNullOrEmpty($required) )
{
  // required data is missing
}

PS:请记住,如果未设置该值,此函数将触发PHP警告,并且没有简单的方法,但您不应该在生产中启用警告。

答案 2 :(得分:0)

如果您想确保存在数组键,可以使用array_key_exists()代替空()

检查将成为is_array()和array_key_exists()的串联,当然是偏执狂

答案 3 :(得分:-1)

你不能只用以下内容添加另一行:

if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
{
    if ($fieldname != 'visible' || $_POST[$fieldname] != 0)
    { 
        $errors [] = $fieldname;
    }
}