0

私のビューには、3つの同様の入力を持つフォームが含まれています:

<input type="text" name="email1" />
<input type="text" name="email2" />
<input type="text" name="email3" />

各テキストボックスが現在のセッションの電子メールを取得しないように制御するコールバックを追加しました。

public function check_session_email($email){
    if($this->session){
        if ($this->session->userdata('email') != $email){
            return TRUE;
        }else{
            $this->form_validation->set_message('check_session_email', 'You can't include your own email address.');
            return FALSE;
        }
    }
}

現在のセッションの電子メールを使用した場合、エラー メッセージが 2 回表示されます (3 回表示されても同じです)。

ここに画像の説明を入力

もちろん、それは論理的に聞こえますが、あまりユーザーフレンドリーではありません。だから私の質問は: ルールのエラー メッセージを 1 つだけ含めるにはどうすればよいですか?

4

2 に答える 2

1

最良のオプションは、フォーム検証ライブラリの外部でこれを検証することです。

コントローラーの方法:

// general validation rules

if( $this->input->post('email1') == $this->session->userdata('email') || $this->input->post('email2') == $this->session->userdata('email') || $this->input->post('email3') == $this->session->userdata('email') )
{
    $data['own_mail_error'] = true;
}

if ($this->form_validation->run() == FALSE || isset($data['own_mail_error']))
{
  $this->load->view('myform', $data);
}
else
{
    $this->load->view('formsuccess');
}

そしてあなたの見解:

<?php echo validation_errors(); ?>
<?php if(isset($own_mail_error)): ?>
<p>You can't include your own email address.</p>
<?php endif; ?>
于 2012-02-25T20:39:20.327 に答える
0
    public function check_session_email($email)
    {
        if($this->session)
        {
            if ($this->session->userdata('email') != $email)
            {
                return TRUE;
            }
        }   
        else
        {
            if($this->form_validation->_field_data['email1']['error']=='' && $this->form_validation->_field_data['email2']['error']=='' && $this->form_validation->_field_data['email3']['error']=='')
            {
                $this->form_validation->set_message('check_session_email', 'You can\'t include your own email address.');
            }
            return FALSE;
        }
    }
于 2012-02-25T20:50:44.220 に答える