如何在codeigniter中编写用于编辑字段的唯一检查的代码。使用codeigniter表单验证。
答案 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.']'