在编码点火器中编辑表单的唯一验证


Unique validation on edit a form, in codeigniter

如何在代码点火器中编写用于编辑字段的唯一检查的代码。 使用代码点火器表单验证。

您必须编写一个用于验证的回调函数。这是一个可能的解决方案:

class MY_Form_validation extends CI_Form_validation
{
    function edit_unique($value, $params)
    {
        $this->set_message('edit_unique', "This %s is already in use!");
        list($table, $field, $current_id) = explode(".", $params);
        $result = $this->CI->db->where($field, $value)->get($table)->row();
        return ($result && $result->id != $current_id) ? FALSE : TRUE;
    }
}

例:

$this->form_validation->set_rules('username', 'Username', 'required|edit_unique[users.username.4]');

使用 CodeIgniter 的表单验证规则:

$this->form_validation->set_rules('username', 'Username', 'required|is_unique[users.username]');

哪里

username:字段名称

Username:字段的标签。

required : 必填项

is_unique:检查唯一性。

users:数据库表名

username:数据库字段名称。

参考:

https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

此解决方案允许您清除列名称,如列 ID在应用程序''库中创建自定义验证类MY_Form_validation.php

class MY_Form_validation extends CI_Form_validation
{
    public function __construct($rules = array())
    {
        $this->CI =& get_instance();
        parent::__construct($rules);
    }
    public function edit_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.].%[^.].%[^.]', $table, $field, $columnIdName, $id);
        return isset($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str, $columnIdName .'!=' => $id))->num_rows() === 0)
            : FALSE;
    }
}

将此添加到系统''语言''英语''form_validation_lang.php

$lang['form_validation_edit_unique']= 'The supplied value is already taken.';

在控制器中使用

$id = $this->uri->segment(3);
'rules' => 'trim|required|max_length[50]|edit_unique[mytable.mycolumn.columnID.'.$id.']'