2010-02-01 89 views
2

时才在CodeIgniter表单验证类中显示错误首先,我会为我的坏英语道歉。只有在某些条件符合

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

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" ; 
      } 
    } 

总之,该功能是用来使用确认码来验证新用户的电子邮件。就像我们在任何需要注册的网站中找到的一样。我做了这个功能,以防某些用户喜欢直接使用确认表单提交他的确认代码,而不是使用确认URL(我们发送确认URL和确认代码到他的电子邮件)

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

现在,假设我有带确认代码“12345”的用户电子邮件“[email protected]”。如果他提交“[email protected]”与代码“22323”,那么系统会显示错误消息:

  • 无效的确认码

这种情况下没有问题。

但是,如果有人提交任何确认码“[email protected]”,系统会显示错误消息

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

我想要的只是

  • 电子邮件不存在

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

感谢您的帮助。

回答

2

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

+0

哇!它的工作! (删除“必需的”技巧)。你能解释给我吗?那之后我会尽快接受你的回答。无论如何,技巧的提示。 – wildanr 2010-02-01 12:53:02

+0

好吧,这是一种解决方法,但是如果您需要验证像100个字段那么该怎么办。然后,所有人都用“if”来做这些事情? – Natrium 2010-02-01 13:09:35

+0

@wildanr,'required'使该字段必须有值,如果没有,则引发错误。从现在开始,第二个领域不再是'需要'的,你必须自己处理。这就是为什么我建议你用简单的“if”来做到这一点,你只有2个领域需要照顾,并且还需要特殊的处理。 @Natrium,我写'在这种情况下'。另外,如果有100个字段,那么你必须做错,因为作为用户,我不想填写100字段的形式。我所制造的单场最大场数从未超过20场。如果您需要100个字段,请尝试将其分成多个步骤。 – 2010-02-02 00:35:27