Я тестирую в основном сайт в 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' => 'Укажите год рождения',
);
Опера перестала глючить.
Ответ
К вам на сервер от клиента (в данном случае браузер) могут прийти какие угодно данные. Валидация данных всегда должна быть на сервере помимо 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'];
}
Комментариев нет:
Отправить комментарий