【问题标题】:Codeigniter Show Individual Custom ErrorCodeigniter 显示单个自定义错误
【发布时间】:2012-08-07 21:15:24
【问题描述】:

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

$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 函数在密码字段上。

所以在我的 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'); ?>

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

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

【问题讨论】:

  • 你在做 callback_check_database 而不是 check_database
  • 正确.. 我需要这样做,因为我使用的是我创建的自定义验证方法。 codeigniter.com/user_guide/libraries/…
  • 您在询问如何处理 form_validation 上的所有错误,同时设置要求字段的规则。简单的逻辑 don't require the fields 将所有内容直接传递给您的回调
  • 好吧,我并不是要显示所有错误,而是要查看是否有办法只显示我的 check_database 错误。我猜这是不可能的,但谢谢。

标签: php codeigniter


【解决方案1】:

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

选项 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";
   } 
?>

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

【讨论】:

  • 谢谢,非常感谢您的帮助。密码字段的 xss_clean 看起来不错,我一定会把它拿出来。
  • 注意:如果您的应用程序已经上线,并且已经在使用 xss_clean - 那么您就无法使用它,否则某些人的密码可能会停止工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
相关资源
最近更新 更多