密码和验证是真的,尽管其中一个没有设置。

Password and verification is true altough one of them is not set.

我有一些功能可以检查是否需要密码,并将其与验证进行比较这是我的功能:

public function required($field= array())
    {
        foreach($field as $value) {
            if (isset($this->_input[$value])) {
                if (empty(Security::clean($this->_input[$value]))) {
                    $messages = "is Required.";
                    error::inputError($value, $messages);
                }
            } else{
                $messages = "Not Found.";
                error::inputError($field, $messages);

            }
        }
    }

    public function password($field, $confirmasion){
        if (isset($this->_input[$field] , $this->_input[$confirmasion])){
            if ($this->_input[$field] != $this->_input[$confirmasion])
            {
                $messages = "is different with $confirmasion.";
                error::inputError($field, $messages);
                error::inputError($confirmasion, $messages);

            }
        }
    }

在我的class $this->_input 指的是$_POST。然后我有一个 class 来设置这样的错误:

public static function inputError($field, $messages)
    {
        if (is_array($field)) {
            foreach ($field as $key){
                $newName = General::changeName($key);
                $messagesError = "$newName $messages";
                if (isset(self::$_errors[$key])){
                    return;
                }else{
                    self::$_errors[$key] = $messagesError;
                }
            }
        }else{
            $newName = General::changeName($field);
            $messagesError = "$newName $messages";
            if (isset(self::$_errors[$field])){
                return;
            }else{
                self::$_errors[$field] = $messagesError;
            }
        }

    }

我期待当我提交表单并且我的密码和验证字段为空时它只显示 "password is required" 或 "verification is required" 而没有显示错误 "password is different from verification”. but when i'm only fill my password fields it showing “verification is required“ and the second error "密码与验证不同” 因为我的验证还是空的。是我的逻辑有问题还是怎么的?

isset($this->_input['fieldname'])

此代码将 return 为真。因此,将验证字段留空仍会将其与密码进行比较 field.here 的解决方案:

(!empty($this->_input[$field]) && !empty($this->_input[$confirmasion]))