在codeigniter中编辑表单的唯一验证

时间:2014-11-17 10:04:30

标签: php forms validation codeigniter-2

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

3 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:2)

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

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]');

答案 2 :(得分:0)

此解决方案使您可以清除列名称(如columnID) 在application \ libraries \ 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;
    }
}

将此添加到system \ language \ english \ 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.']'