Пароль и проверка верны, хотя один из них не установлен.

у меня есть некоторая функция для проверки пароля, и сравните ее с проверкой, вот моя функция:

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);

            }
        }
    }

В моем классе $this->_input ссылается на $_POST. а затем у меня есть класс для установки такой ошибки:

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;
            }
        }

    }

я ожидаю, когда, когда я отправляю форму, а мои поля пароля и подтверждения пусты, отображается «Требуется пароль» или «Требуется подтверждение» только без отображения ошибки «Пароль отличается от подтверждения». но когда я только заполняю свой поля пароля показывают «требуется проверка» и вторая ошибка «пароль отличается от проверки», потому что моя проверка все еще пуста. Что-то не так с моей логикой или что?


person Eko    schedule 23.01.2015    source источник
comment
Я голосую против этого, потому что это ужасная практика безопасности. password_verify и password_hash являются текущими стандартами   -  person geggleto    schedule 23.01.2015
comment
извините, я знаю это, я просто не хешировал его. это просто мой проверочный тест.   -  person Eko    schedule 23.01.2015
comment
@LuckyBurger я собираюсь хешировать после того, как он пройдет мою проверку. почему ты не спрашиваешь, прежде чем проголосовать против?   -  person Eko    schedule 23.01.2015
comment
@LuckyBurger хочет указать, точно где OP использует плохие методы обеспечения безопасности? Я не вижу никакой настойчивости, только проверка   -  person Phil    schedule 23.01.2015
comment
Пустые текстовые поля @Kyo по-прежнему отправляют значение, поэтому isset($this->_input['fieldname']) вернет true. Следовательно, пустое поле verification все равно будет сравнивать его с полем пароля. Вместо этого вы можете попробовать if (!empty($this->_input[$field]) && !empty($this->_input[$confirmasion])) в своей функции password.   -  person Phil    schedule 23.01.2015
comment
так что вы думаете, что я должен использовать пусто, а не isset, чтобы проверить значение?   -  person Eko    schedule 23.01.2015
comment
хорошо, я на мгновение исправлю свой код.   -  person Eko    schedule 23.01.2015
comment
@ Фил, кажется, ты прав, почему бы тебе не написать это в ответ, чтобы я мог выбрать твой ответ.   -  person Eko    schedule 23.01.2015


Ответы (1)


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

этот код вернет true. Следовательно, пустое поле проверки все равно будет сравнивать его с полем пароля. Вот решение:

(!empty($this->_input[$field]) && !empty($this->_input[$confirmasion]))
person Eko    schedule 25.01.2015