在codeigniter中使用mysql错误进行表单验证

时间:2012-05-31 08:49:43

标签: mysql codeigniter callback validation duplicates

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

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

2 个答案:

答案 0 :(得分: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;

    }

}

然后您可以在->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!");

答案 1 :(得分:0)

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