Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Шутки браузеров: криво работает php валидация?

#php #webbrowser #opera


Я тестирую в основном сайт в Google Chrome (посл. версия), и только что заметил,
что Opera (последняя версия) позволяет обойти ОБЯЗАТЕЛЬНОЕ ТРЕБОВАНИЕ заполнить возраст.
Просто игнорирует это поле и даже успешно отправляется форма и тп.

Ссылка на форму

А также наверно какие-то старые браузеры умудряются еще регать людей с НЕВОЗМОЖНЫМ
значением пола, например.

Т.е. Опера в данном случае игнорит и JS, и PHP валидацию. Это вообще законна такая
работа PHP и браузеров?

Использую rules:

$rules[] = array( 'gender', 'required', 'message' => 'Укажите пол' );
$rules[] = array( 'birthYear', 'required', 'message' => 'Укажите год рождения' );
$rules[] = array('gender', 'in', 'range' => array("f", "m", "?"), 'message' => 'Укажите
пол.');


Обновление

Добавил еще правило:

$rules[] = array( 'birthYear',
            'length',
            'min'=>$AGE_START,
            'max'=>$AGE_END,
            'tooShort' => 'Укажите год рождения',
            'tooLong' => 'Укажите год рождения',
        );


Опера перестала глючить.
    


Ответы

Ответ 1



К вам на сервер от клиента (в данном случае браузер) могут прийти какие угодно данные. Валидация данных всегда должна быть на сервере помимо JS. Если у вас регистрация проходит даже без обязательных полей, значит у вас некорректный PHP код с валидацией. UPD Лучше не обращаться к массиву $_POST напрямую. К тому же, в вашем выпадающем списке есть пустое значение. Один браузер его вам посылает, другой нет. Получается при обращении к $_POST['Form']['gender'] у вас в одном случае строка пустая, в другом случае null (не факт, это моё предположение). Проверьте $_POST массив в контроллере в разных браузерах: var_dump($_POST); die(); Вам может помочь либо метод saveAttributes(), либо как минимум проверка на пустое значение: if(isset($_POST['Form']['gender']) && $_POST['Form']['gender'] != '') { $form->gender = $_POST['Form']['gender']; }

Комментариев нет:

Отправить комментарий