【问题标题】:Codeigniter using flashdata and form_validation使用 flashdata 和 form_validation 的 Codeigniter
【发布时间】:2011-09-08 08:24:53
【问题描述】:

我正在尝试使用 codeigniter 学习 PHP,但遇到了一个问题。我正在编写带有表单验证的用户注册表单。 如果用户输入已通过验证,它将检查数据库中是否已存在电子邮件。如果存在,它应该向用户显示错误。 我将此错误存储在 flashdata 会话变量中,并将用户重定向到注册表单。但重定向后,set_values 的形式为空。 我希望它填充用户之前已经填写的值。如果我使用$this->load->view('registration_form').. 字段值会按照我的意愿填充,但不会显示数据库错误,因为它不是新的服务器调用。

form_validation 值 (set_value()) 在重定向时会消失吗?如果是这样,我如何预填充字段值?

【问题讨论】:

    标签: codeigniter validation


    【解决方案1】:

    如果您在发布到自身的表单有效时重定向,那么是的,您将丢失 set_value(),因为 $_POST 数组中现在没有任何内容 - 这就是您重定向的原因,因此用户不会重新提交表单刷新时。

    您应该做的是在同一个控制器的回调函数中创建自己的验证规则。看这里http://codeigniter.com/user_guide/libraries/form_validation.html#callbacks

    您需要做的是将电子邮件传递给回调中的模型,该模型将根据您的数据库检查电子邮件,如果它已经存在则返回 false。这样,如果电子邮件已经存在,您的表单将无效并且不会重定向。

    【讨论】:

    • 是的。这就是我最终所做的。
    【解决方案2】:

    几分钟前,我刚刚向旧的 CI 安装添加了一个表单,但遇到了这个问题。有趣的是你应该提到它。

    由于set_value() 和相关函数只是读取$_POST 数据,刷新后它们不会保持值。您有几个选择:

    1. 在表单有效之前不要重定向。
    2. $_POST数组赋值给一个flashdata(会话)变量,并在重定向后手动将其复制到$_POST数组中
    3. 编写您自己的函数组以使用 flashdata 或会话数据或其他方法处理此问题,不要使用 set_value() 函数。

    为了最快的修复,使用#1。我不喜欢手动设置$_POST 值,所以我并不赞同#2,但它应该可以工作。从长远来看 - 使用#3。我发现 CI 表单处理经常缺乏,我个人的表单交互代码库随着时间的推移而增长了很多。

    【讨论】:

    • 如果我执行 #1,flashdata 将不包含错误消息,对吗?然后在数据库检查之后,我可能需要将错误存储在一个变量中并显示它。顺便说一句,在发布问题后,我在 form_validation 中阅读了一些关于回调函数的内容。例如:$this->form_validation->set_rules('email','Email Address', 'required|valid_email|callback_username_check');你用过吗?如果是这样,这样做是个好主意吗?
    • @DamcheyLhendup:如果您已经将错误分配给 flashdata,它不会受到影响(但它不会自动为您执行此操作)。回调函数确实适用于检查用户是否存在 - 我会推荐它。如果不了解您的设置方式,很难给您具体的建议,但总的来说,解决方案 #1 是我会做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多