4

ユーザーからデータを収集するための 2 つの数値フィールドがあります。codeigniter フォーム検証クラスを使用して検証する必要があります。

条件:

  1. 最初のフィールドはゼロにすることができます
  2. 2 番目のフィールドをゼロにすることはできません
  3. 最初のフィールドは 2 番目のフィールドと同じであってはなりません
  4. 2 番目のフィールドは最初のフィールドより大きくなければなりません

現在私は使用しています

$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 番目の条件を検証するにはどうすればよいでしょうか。

前もって感謝します。

4

3 に答える 3

18

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;       
      }
      return true;
  }

すべてが正常に機能しているようです:)

于 2013-03-14T14:51:43.950 に答える
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;
        }
    }

}
?>
于 2013-03-12T16:53:21.130 に答える