Как избежать проверки формы принудительными проверками необязательных полей в CodeIgniter - PullRequest
2 голосов
/ 26 июня 2011

У меня есть поле электронной почты, которое не требуется при проверке формы. Это должно быть в состоянии оставить пустым. Однако, когда я использую параметр «valid_email» в set_rules проверки формы, он все равно выдает сообщение об ошибке, что электронная почта недействительна, когда она не должна проверять это, если поле не заполнено.

Ответы [ 2 ]

4 голосов
/ 26 июня 2011

Справочник правил

Проверка ссылки по этому вопросу говорит нам следующее относительно правила valid email:

Возвращает FALSE, если элемент формы не содержит действительный адрес электронной почты.

Это будет справедливо для пустого поля, а также для поля с неверными значениями.

Обрезка

В примерах, предоставленных CodeIgniter, я замечаю, что электронные письма обычно не только требуются и должны быть действительными, но и урезаны. Это может привести к другому результату.

$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

В процессе проверки учитывается следующее:

// If the field is blank, but NOT required, no further tests are necessary
if ( ! in_array('required', $rules) AND is_null($postdata))

Это может быть случай, когда содержимое вашего поля электронной почты не совсем null , и поэтому вызывает флаги с требованием valid_email.

Возможные связанные ошибки

За три месяца до даты этого ответа на эту тему обсуждалась битбакет. Обсуждение можно посмотреть на https://bitbucket.org/ellislab/codeigniter-reactor/issue/117/input-fields-are-automatically-required.

Утверждается, что использование синтаксиса массива (см. Ниже) в разметке приводит к аналогичным ошибкам, даже если не установлено правило required:

<input name="user[email]" />

Дополнительное обсуждение и исправления доступны здесь, http://codeigniter.com/forums/viewthread/159243. Один из предлагаемых исправлений, который, по-видимому, решает проблему, состоит в замене вызова is_null() на empty() в вышеупомянутом коде:

Итак, следующее:

if ( ! in_array('required', $rules) AND is_null($postdata))

становится:

if ( ! in_array('required', $rules) AND empty($postdata))
0 голосов
/ 10 декабря 2012

Вы просто должны понимать, что '' НЕ является действительным адресом электронной почты.Если вы не хотите проверять некоторые постданные и не заботитесь о том, чтобы они были пустыми, вам не следует устанавливать для них правило, например:

if($this->input->post('item'))
{
    $this->form_validation->set_rules('item', 'Item number', 'trim|alpha_numeric|max_length[30]');
}

В этом случае, если ничего не отправленодля 'item' правило не добавляется, поэтому остальные данные перейдут на этап проверки и т. д. как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...