仅在特定条件满足时才在CodeIgniter表单验证类中显示错误

时间:2010-02-01 12:20:35

标签: codeigniter validation

首先,我要为我糟糕的英语道歉。

假设我在控制器中有这样的功能:

function confirm()
    {
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');

        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|exist[member.email]');
        $this->form_validation->set_rules('secretKey','Secret Key', 'required|callback_secret_check');

        $this->form_validation->set_message('exist',"Email don't exist");
        $this->form_validation->set_message('secret_check','Invalid confirmation code');

        if ($this->form_validation->run() == FALSE)
          {
            // if error, show form and the error msg
            $this->view->full_render('user_confirm') ;
          } else {
            // if all ok
            echo "success" ;
          }
    }

简而言之,此功能用于使用确认码验证新用户电子邮件。就像我们在任何需要注册的网站中找到的那样。我做了这个功能以防一些用户喜欢直接使用确认表格提交他的确认码而不是使用确认网址(我们将确认网址和确认码发送到他的电子邮箱)

仅仅为了您的信息,规则“存在”是我自己的规则,通过扩展表单类来检查提交的电子邮件是否确实存在。对于“callback_secret_check”规则,我创建回调函数(不是通过扩展表单验证类,如第一个规则)来检查用户提交的确认代码是否是有效的。

现在,假设我有用户电子邮件“example@example.com”,确认码为“12345”。如果他提交代码为“22323”的“example@example.com”,系统将显示错误消息:

  • 无效的确认码

这种情况没问题。

但是,如果有人使用任何确认码提交“this.is.not.exist@example.com”,系统将显示错误消息

  • 电子邮件不存在
  • 无效的确认码

我想要的只是

  • 电子邮件不存在

没有显示“无效的确认码”,因为如果电子邮件甚至不存在,我认为我们不需要告知任何有关确认码的信息。任何线索?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在这种情况下,请勿将无效确认代码设置为required。如果字段仅为2,则可以在简单的if中进行检查。并非所有情况都需要form_validation