时才在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]”,系统会显示错误消息
- 电子邮件不存在
- 无效的确认码
我想要的只是
- 电子邮件不存在
不显示“无效的确认码”,因为如果电子邮件甚至不存在,我认为我们不需要告诉任何有关确认码的信息。任何线索?
感谢您的帮助。
哇!它的工作! (删除“必需的”技巧)。你能解释给我吗?那之后我会尽快接受你的回答。无论如何,技巧的提示。 – wildanr 2010-02-01 12:53:02
好吧,这是一种解决方法,但是如果您需要验证像100个字段那么该怎么办。然后,所有人都用“if”来做这些事情? – Natrium 2010-02-01 13:09:35
@wildanr,'required'使该字段必须有值,如果没有,则引发错误。从现在开始,第二个领域不再是'需要'的,你必须自己处理。这就是为什么我建议你用简单的“if”来做到这一点,你只有2个领域需要照顾,并且还需要特殊的处理。 @Natrium,我写'在这种情况下'。另外,如果有100个字段,那么你必须做错,因为作为用户,我不想填写100字段的形式。我所制造的单场最大场数从未超过20场。如果您需要100个字段,请尝试将其分成多个步骤。 – 2010-02-02 00:35:27