4

我正在尝试验证我的登录表单,并且我的用户名和密码字段有规则。

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

所以我的callback_check_database函数位于 Password 字段中。

所以在我的 check_database 函数中,我有:

$this->form_validation->set_message('check_database', 'Invalid username or password');
return false;

所以我正在设置我想要显示的自定义消息。

在我看来,我想单独显示该 check_database 错误。我不想显示任何其他错误。

这是我尝试过的:

// does not work
<?php echo form_error('check_database'); ?>

// this works
<?php echo form_error('password'); ?>

所以因为它是用于密码字段的,它只会在我回显密码错误时显示。但这意味着,由于密码是必填字段,如果我不输入任何内容,它将显示一个错误,指出密码字段是必填的。

有没有办法只显示我设置的自定义错误消息?

4

1 回答 1

3

您可以通过两种不同的方式解决此问题。两者都有优点和缺点。

选项1:

$this->form_validation->set_rules('password', 'Password', 'callback_check_database');

然后在 callback_check_database 中只包含一个检查以确保 $value != "" (它复制了“必需”字段)。

注意:无论如何,您都不应该在密码字段上使用 xss_clean (因为它会改变密码 - 谷歌它,您会看到示例),并且假设您对密码进行哈希处理,获得的收益为零。

选项 2:

在您的视图文件中,只需键入

<?php if (form_error('password'))
   {
        echo "Invalid username or password";
   } 
?>

这意味着您实际上并没有回显错误,您只是检查密码字段是否存在错误,无论它是什么,您只显示上面的文本。

于 2012-08-08T00:52:55.853 回答