PHP:检查键值是否为空

3
我写了一个小函数来检查表单的必填字段是否为空。该函数接受两个参数,第一个是包含所有来自 $_POST 超全局变量的值的数组。第二个是必填字段数组,我会填充它。
看一下代码:
public $errors = array();

public function validate_fields($fields_array, $required_fields) 
{
    foreach ($required_fields as $key => $value)
    {
        if (array_key_exists($key, $fields_array)) 
        {
            # If key exists in $fields_array
            # check that the key value inside $fields_array is set & isn't empty
            # if it's empty, populate with an error
            if(empty($fields_array[$key][$value]))
            {
                $this->errors[] = "{$key} is empty but in fields_array";
            }
        }
        else 
        {
            # Key does not exists in $fields_array
            # Did someone temper with my html ?
            $this->errors[] = "{$key} is not in fields_array";
        }
    }
    return (empty($this->errors)) ? true : false;
}     

我遇到的问题似乎与“if(empty($fields_array[$key][$value]))”语句有关。我的目标是根据$required_fields键检查$fields_array键值是否为空。我确定我使用的语句不正确。如果您发现任何可以更好地编写的内容,请告诉我,因为我是php的新手。感谢帮助。

3个回答

5
我认为你想做的是:

我认为您想要做的是:

if(empty($fields_array[$key])) {
    //this means value does not exist or is FALSE
}

如果您还想检查空字符串或仅包含空格的情况,那么就需要比仅仅检测空值更多的东西。例如:

if(empty($fields_array[$key]) || !trim($fields_array[$key]))         {
    //this means key exists but value is null or empty string or whitespace only
}

嗨 Richard,谢谢!我不知道空值会在空格上返回false。再次感谢。顺便说一下,这就是我如何填充必填字段数组的方式:$required_fields = array("email" => "", "email_confirm" => "");是否有更快的方法设置只有键而没有定义键+空值的数组? - elad.chen
$required_fields = array_fill_keys(array("email", "email_confirm","..."), ""); $required_fields = array_fill_keys(array("email", "email_confirm","..."), ""); - kufudo
谢谢,这样就清晰明了多了。 - elad.chen

4

请注意,上述答案仅适用于PHP 5.4及以上版本的索引数组。如果您有一个关联数组,您必须使用isset而不是empty:

if(isset($fields_array[$key]) && trim($fields_array[$key]) != '')

请参阅http://nl3.php.net/manual/en/function.empty.php,例子#2。

2

您不需要将值作为索引选择,只需使用键。其中 $fields_array[$key] = $value;。

if(empty($fields_array[$key]) && trim($fields_array[$key]) != '')

我看到你添加了比Richard更多的条件,使用empty和!trim难道不能覆盖我想要避免的所有情况吗?(任何空字符串或空格) - elad.chen
只需小心使用empty()函数,它将0或"0"等内容视为“空”,在某些情况下可能不是您想要的。请参阅http://php.net/manual/en/function.empty.php中的注释以获取更多详细信息。最好明确检查您想要的条件。 - kufudo
我想不出任何理由,希望用户在表单中输入0,“0”或甚至“-0”。尽管在注册期间我有2个性别单选按钮,但我将它们分配给数据库中的1和2。如果我的逻辑有误,请纠正我 :) - elad.chen
1
我会将它们分配为男性/女性或m/f。即使在没有任何上下文的情况下查看数据库,它也很容易阅读。 - shapeshifter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接