如何在代码点火器中编写用于编辑字段的唯一检查的代码。 使用代码点火器表单验证。
您必须编写一个用于验证的回调函数。这是一个可能的解决方案:
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.']'