2

ログインフォームがあり、ユーザー名とパスワードのフィールドがあるとしましょう。両方のフィールドに入力する必要があり、フォームを送信すると、2 つの異なる行が表示されます。

ユーザー名フィールドは必須です。パスワード欄は必須です。

私がやりたいのは、ユーザー名フィールドのエラーのみを表示することです。ユーザー名フィールドにエラーがない場合は、パスワード フィールドのエラーが表示されます。

これはどのように行われますか?

また、フィールドに関するエラーのみを表示する方法があることを覚えていますが、そのスニペットは何でしたか?

4

1 に答える 1

1

両方の入力をチェックし、必要なメッセージを条件付きで設定する、1 つの入力だけに関連付けられたカスタム コールバック関数を使用することをお勧めします。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class YourController extends CI_Controller {

    public function save() 
    {
        //.... Your controller method called on submit

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

        // Build validation rules array
        $validation_rules = array(
                                array(
                                    'field' => 'username',
                                    'label' => 'Username',
                                    'rules' => 'trim|xss_clean|callback_required_inputs'
                                    ),
                                array(
                                    'field' => 'password',
                                    'label' => 'Password',
                                    'rules' => 'trim|xss_clean'
                                    )
                                );
        $this->form_validation->set_rules($validation_rules);
        $valid = $this->form_validation->run();

        // Handle $valid success (true) or failure (false)
        if($valid)
        {
            //
        }
        else
        {
            //
        }
    }


    public function required_inputs()
    {
        if( ! $this->input->post('username'))
        {
            $this->form_validation->set_message('required_inputs', 'The Username field is required');
            return FALSE;
        }
        else if ($this->input->post('username') AND ! $this->input->post('password'))
        {
            $this->form_validation->set_message('required_inputs', 'The Password field is required');
            return FALSE;
        }

        return TRUE;
    }
}
于 2013-01-24T22:41:29.447 に答える