必须用codeigniter原生表单验证类实现注册校验:先加载库,再用set_rules()绑定规则(字段名大小写敏感),支持required|valid_email|is_unique[users.email]等链式规则;错误信息可用form_error()、validation_errors()或自定义模板输出;验证失败后通过set_value()保留数据;推荐将规则统一配置在config/form_validation.php中,支持多表单复用;密码确认用matches[]或callback_前缀的自定义回调函数。

要在CodeIgniter中实现用户注册时邮箱不重复、密码长度达标、必填项不为空等基础校验,同时避免手动写if-else嵌套判断和SQL查询去重,必须用框架原生表单验证类完成规则定义与执行流程。
验证规则怎么设才不漏项
先在控制器中加载验证库,这一步不能跳过,否则后续所有set_rules()都会报错:$this->load->library('form_validation');
用set_rules()为每个字段绑定规则,字段名必须和HTML表单中name属性完全一致,大小写敏感。比如表单里写的是<input name="Email">,而规则里写'email'就会失效。
规则链支持多条件叠加,顺序执行:前面的规则失败后,后面的不会继续校验。例如'required|valid_email|is_unique[users.email]',如果为空,valid_email和is_unique都不会触发。
【is_unique规则必须配合数据库驱动启用,且表名字段名需严格匹配数据库实际结构,否则验证永远返回TRUE】
错误信息怎么显示才准确定位
方法一:在对应字段下方用form_error('字段名')单独输出错误,适合需要精确控制提示位置的场景。
方法二:用validation_errors()一次性输出全部错误,内容带默认HTML换行,适合调试阶段快速查看漏了哪些规则。
方法三:自定义错误模板,把validation_errors()包裹进<div class="alert">中,并在配置文件<code>config/form_validation.php里设置$config['error_prefix'] = '<span class="error">'; $config['error_suffix'] = '</span>';,这样能统一前端样式。
验证失败后如何保留已填数据
第一步:在控制器中判断run()返回FALSE后,不要直接redirect(),而是重新加载视图。
第二步:在视图中所有输入框的value属性里调用set_value('字段名'),例如<input name="username" value="<?= set_value('username') ?>">。
第三步:如果字段有中文别名(如'用户名'),且希望错误提示也显示中文,必须在set_rules()第二个参数传入该别名,否则form_error()会显示英文字段名。
注意:set_value()只对POST提交的数据有效,GET请求或AJAX提交需额外处理。
规则配置放哪里更利于维护
推荐把规则写进config/form_validation.php配置文件,用命名数组方式组织:
$config['login'] = [ ['field' => 'email', 'label' => '邮箱', 'rules' => 'required|valid_email'], ['field' => 'password', 'label' => '密码', 'rules' => 'required|min_length[6]'] ];
控制器中只需调用$this->form_validation->run('login'),就能加载整套规则。多个表单(如注册、登录、找回密码)可共用同一配置文件,避免重复代码。
这一步操作起来很简单,直接把文件拖进去就行。
密码确认字段怎么联动校验
方法1:用内置matches[]规则,例如$this->form_validation->set_rules('passconf', '确认密码', 'required|matches[password]');,括号内字段名必须和目标字段name属性完全一致。
方法2:若需区分大小写比对或额外逻辑(如禁止连续数字),需自定义回调函数:$this->form_validation->set_rules('passconf', '确认密码', 'required|callback_check_password_match');,然后在控制器中定义public function check_password_match($str) { return $str === $this->input->post('password') ? TRUE : FALSE; }。
【回调函数名必须以callback_开头,且函数必须返回布尔值,否则验证流程中断】











