#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']; }
Комментариев нет:
Отправить комментарий