is_unique用于代码表单验证

2022-08-30 18:12:56

我正在尝试弄清楚在以下情况下如何使用Codeigniter表单验证库中的规则。is_unique

我正在尝试提交编辑用户表单并拥有以下规则:

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|is_unique[users.user_name]');

如果表单中的其他值正在更改,但此值保持不变,该怎么办?表单将看到此值已存在,因此,如果未更改此值,我将如何保护它免受编辑。


答案 1

以代码为例,验证规则的工作原理是在数据库表中查找调用的字段。如果存在具有相同值的字段,则验证为 false。is_uniqueuser_nameusers

若要确保它仅在用户提交新值时运行,您可以根据从数据库中提取以填充表单的值检查已发布的值。如果它们相同,请不要验证is_unique;$this->input->post('user_name')

if($this->input->post('user_name') != $original_value) {
   $is_unique =  '|is_unique[users.user_name]'
} else {
   $is_unique =  ''
}

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique);

答案 2

我认为,还有一种更好的方法来绕过它,仍然使用CodeIgniters的验证库......使用edit_unique传递一个额外的参数,该参数是您正在编辑的行的ID。见下文..我使用它,对我来说工作得很好。希望它有帮助

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|edit_unique[users.user_name.'.$id.']');

推荐