似乎edit_unique
函数(即here - Validating Uniqueness In CodeIgniter When Updating A Record}会杀死set_value
函数。
一切正常,就像这样......
echo form_input('username', set_value('username',$user->username));
但是在使用edit_unique
验证时,提交表单后该值为空。后变量是可以的,验证也没有错误 - 但是没有设置值。
知道如何解决这个问题吗?
答案 0 :(得分:6)
好的 - 我自己找到了。如果是真的,则没有返回值。也许任何人都面临同样的问题......使用这个功能,它可以工作:
function edit_unique($value, $params) {
$CI =& get_instance();
$CI->load->database();
$CI->form_validation->set_message('edit_unique', "Sorry, that %s is already being used.");
list($table, $field, $current_id) = explode(".", $params);
$query = $CI->db->select()->from($table)->where($field, $value)->limit(1)->get();
if ($query->row() && $query->row()->id != $current_id)
{
return FALSE;
} else {
return TRUE;
}
}
答案 1 :(得分:0)
Petra 的回答很有效,如果由于某种原因它对您不起作用,请检查您的主键是否为“id”,如果不是,则需要进行一些更改。
改变
list($table, $field, $current_id) = explode(".", $params);
if ($query->row() && $query->row()->id != $current_id)
到
list($table, $field, $current_id, $key) = explode(".", $params);
if ($query->row() && $query->row()->$key != $current_id)
然后添加如下规则:
$this->form_validation->set_rules(
'form_field',
'Form Label',
'required|trim|edit_unique[table.column.' . $edit . '.unique]'
);
其中 unique
是您的唯一键/主键,而 $edit
是它的值。