【问题标题】:form validation with mysql errors in codeigniter在codeigniter中使用mysql错误进行表单验证
【发布时间】:2012-05-31 08:49:42
【问题描述】:

我正在尝试使用 codeigniter 的表单验证库来验证表单。我有一些问题,我需要帮助。 1.假设用户填写表单提交。
2.验证库在db表中查找重复项并为字段设置错误消息。
3. 表单显示消息。
在这种方法中,我看到了一个缺点。假设表中有 5 个字段设置为唯一。因此验证将运行查询以查找唯一字段 5 次。

另一种方法 就是让用户插入,数据库产生错误。在表单验证库中没有调用 callback_find_duplicate 函数。表单已填充。在这种方法中,很难找到哪个字段是重复的,因此为此设置错误消息会很麻烦。最糟糕的情况是该用户输入了重复的名称。填写表格,然后填写电子邮件。然后再继续。
我需要找到一种方法,或者我们可以编写一个查询来查找我所有字段的所有重复项。并为所有字段设置错误消息,而无需调用 callback_find_duplicate 五次。因为我认为调用单个查询将花费更少的执行时间。

【问题讨论】:

  • 我们可以查看您的表单、验证和插入代码吗?

标签: mysql codeigniter callback validation duplicates


【解决方案1】:

尽管 form_validation 很重要,但我发现自己有时更喜欢其他解决方案。

添加这个:

库/My_Form_validation.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {

    /* Custom function to create errors manually
     * */
    function create_error($str_field, $str_message) {

        $str_message = t($str_message, $str_line);

        $this->_field_data[$str_field] = 
        array('error' => $str_message,
              'is_array' => FALSE,
              'postdata' => $this->CI->input->post($str_field),
              'rules' => '',
              'field' => $str_field);

        $this->_error_array[$str_field] =   $str_message;

    }

}

然后你可以在-&gt;run()之前在你的控制器中手动运行它。

尽可能获取查询,并为每种情况设置一个 if,如下所示:

$arr_uniques = array('email', 'name', 'snn'); // whatev
foreach($arr_uniques as $h)
    if ($row->$h == $this->input->post($h))
        $this->form_validation->create_error($h, "{$h} is not unique!");

【讨论】:

  • 好吧,我通过扩展 codeigniter 的验证库并在 form_validation->run() 成功时调用我的函数创建了相同的解决方案;
【解决方案2】:

对数据库的五次调用并不多。第一种方法是我会做的方式,而不是让 CodeIgniter 可以很好地处理的事情变得复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多