Codeigniter - обязательное поле для проверки формы 2 с несоответствующим значением

0

Я пытаюсь сделать проверку для 2 полей, которые должны иметь другое значение. Я знаю только, как устанавливать правила для проверки соответствия.

$this->form_validation->set_rules('book1','Book1','required|matches[book2]');
$this->form_validation->set_rules('book2','Book2','required|matches[book1]');

если я буду вводить book1= novel, а book2= novel, код выше вернет TRUE.

Как я могу проверить 2 поля, где значение каждого поля не соответствует друг другу? Поэтому, если я буду вводить book1= novel и book2= comic, он вернет TRUE.

Теги:
codeigniter
validation

3 ответа

7
Лучший ответ

Вы должны использовать метод callback_ для выборочной проверки, библиотека проверки формы CI не предоставляет правило проверки типа notMatch, см. Ниже пример кода.

$this->form_validation->set_rules('book1','Book1','required');
$this->form_validation->set_rules('book2','Book2','required|callback__notMatch[book1]');

И метод размещения в классе контроллера

function _notMatch($book2Value, $book1FieldName){
   if($book2Value != $this->input->post($book1FieldName){
       $this->form_validation->set_message('_notMatch', 'book1 and book2 values are not matching');
       return false;
   }
   return true;
}
  • 1
    Просто для дальнейшего чтения: документация CodeIgniter для обратных вызовов в форме проверки .
  • 0
    Благодарю. Я следую вашему коду и изменяю его, пока не найду то, что хочу. Только замени != Становись == и установи мое сообщение об ошибке, чтобы you can't choose the same book again .
2

В кодеигниторе 3 вы можете использовать правило set [], чтобы обеспечить соответствие значений полей.

$this->form_validation->set_rules('book1', 'Book 1', 'required|differs[book2]');
$this->form_validation->set_rules('book2', 'Book 2', 'required|differs[book1]');

Это означает, что вам не нужно создавать ненужный обратный вызов. Однако для более старых версий вы будете.

См. Документацию для получения дополнительной информации: Документация Codeigniter 3

0

Вы можете использовать differs так:

 $this->form_validation->set_rules('password', 'current password', 'max_length[25]|min_length[5]|required');
 $this->form_validation->set_rules('new_password', 'new password', 'max_length[25]|min_length[5]|required|differs[password]');
 $this->form_validation->set_rules('confirm_password', 'confirm password', 'required|max_length[25]|min_length[5]|matches[new_password]');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню