2013-03-12 2 views
4

У меня есть два числовых поля для сбора данных от пользователей. Нужно проверить его с помощью класса проверки подлинности формы codeigniter.Codeigniter: проверка двух полей

Условия:

  1. Первое поле может быть равно нулю
  2. Второе поле не может быть нулевым
  3. Первое поле не должно быть равно второму полю
  4. Второе поле должно быть больше, чем первое поле

В настоящее время я использую

$ this-> form_validation-> set_rules ('first_field', 'First Field', 'trim | required_ is_natural');

$ this-> form_validation-> set_rules ('second_field', 'Second Field', 'trim | required_ is_natural_no_zero');

Но, как подтвердить наличие 3-го и 4-го условий, упомянутых выше?

Заранее спасибо.

ответ

16

Благодаря dm03514. Я получил его работу с помощью функции обратного вызова ниже.

$this->form_validation->set_rules('first_field', 'First Field', 'trim|required|is_natural'); 
$this->form_validation->set_rules('second_field', 'Second Field', 'trim|required|is_natural_no_zero|callback_check_equal_less['.$this->input->post('first_field').']'); 

и функция обратного вызова:

function check_equal_less($second_field,$first_field) 
    { 
    if ($second_field <= $first_field) 
     { 
     $this->form_validation->set_message('check_equal_less', 'The First &amp;/or Second fields have errors.'); 
     return false;  
     } 
     else 
     { 
     return true; 
     } 
    } 

Все, кажется, работает нормально сейчас :)

4

Вы можете написать свою собственную функцию проверки для 3 и 4 с использованием обратных вызовов

http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#callbacks

Пример из док

<?php 

class Form extends CI_Controller { 

    public function index() 
    { 
     $this->load->helper(array('form', 'url')); 

     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); 
     $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('myform'); 
     } 
     else 
     { 
      $this->load->view('formsuccess'); 
     } 
    } 

    public function username_check($str) 
    { 
     if ($str == 'test') 
     { 
      $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"'); 
      return FALSE; 
     } 
     else 
     { 
      return TRUE; 
     } 
    } 

} 
?> 
+1

Но как передать другие значения поля в функции обратного вызова? В документации CI, $ str устанавливается на 'test' в функции обратного вызова; но мне нужно передать первое значение поля функции обратного вызова второго поля. –

0

Если вы используете HMVC и принятое решение не работает, то добавить следующая строка после инициализации в вашем контроллере

$this->form_validation->CI =& $this; 

So это будет

$this->load->library('form_validation'); 
$this->form_validation->CI =& $this; 

в вашем контроллере.

Смежные вопросы