如何防止在CI中显示双重验证错误?

时间:2012-11-08 08:17:29

标签: php codeigniter validation

我正在为我的表单中的多个字段设置相同的回调函数:

foreach($fields as $class => $i)
{
    ++$i;
    $validation->set_rules('car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
    $validation->set_rules('car_' . $i . '_twor', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
    $validation->set_rules('in_car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
    $validation->set_rules('in_car_' . $i . '_two', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
}

class varle在这种情况下是Car

这是回调函数:

function validate_car_fields($input, $required)
{

    if ($required === "TRUE" && empty($input))
    {
        $this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
        return FALSE;
    }

    return TRUE;
}

它显示出加倍的错误:

* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!

在这种情况下,这是可以理解的行为,但我想每个字段名称只显示一个错误,而不是每个字段显示4个错误。如何做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个

function validate_car_fields($input, $required)
{
    static $validation_failed_once = FALSE;

    if ($required === "TRUE" && empty($input))
    {
        // Return FALSE without setting error message from 2nd validation fail onwards
        if ($validation_failed_once) return FALSE;

        $this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
        // Set error message only for the first validation error
        $validation_failed_once = TRUE;
        return FALSE;
    }

    return TRUE;
}

答案 1 :(得分:1)

考虑使用新功能编辑或创建(Extending Native Librarieslibraries/MY_Form_validation.php

function remove_duplicate_errors() {

    $arr = array();
    foreach(array_keys($this->_error_array) as $h) {
        if (in_array($arr, $this->_error_array[$h]))
            unset($this->_error_array[$h]);
        else $arr[] = $this->_error_array[$h];
    }

}

只需在$this->form_validation->remove_duplicate_errors();之后致电$this->form_validation->run()。这应该删除字符串相同的所有情况。但是请考虑在您的设计上采用另一种方法,因为知道这4种中哪一种不正确可能是有用的。