首页 游戏教程 正文

codeigniter表单验证怎么做?5个实例教你防错处理

今天折腾了一下午CodeIgniter的表单验证,简直跟打地鼠似的,问题一个接一个冒头。刚开始傻乎乎地以为框架自带验证肯定很省心,结果啪啪打脸。

第一步:搭架子出洋相

打开电脑新建个Controller,名字就叫Form_test。然后在view文件夹里随便建了个form_*,写上用户名、邮箱、密码那几个常见的输入框。信心满满地在控制器里写了个空空的验证规则数组,一运行——好家伙,表单倒是能提交,可不管填啥都当没看见,直接放行!气得我拍大腿,这验证了个寂寞!

codeigniter表单验证怎么做?5个实例教你防错处理

第二步:翻文档拼乐高

赶紧翻官方文档查表单验证类。照着例子在Controller里加载了表单验证库,然后吭哧吭哧在set_rules()里填规则:

$this->form_validation->set_rules('username', '用户名', 'required');

$this->form_validation->set_rules('email', '邮箱', 'requiredvalid_email');

codeigniter表单验证怎么做?5个实例教你防错处理

$this->form_validation->set_rules('password', '密码', 'requiredmin_length[6]');

心想这回总该行了?结果提交空表单——界面直接全白!原来忘了写验证失败的处理逻辑,框架直接懵了。

codeigniter表单验证怎么做?5个实例教你防错处理

第三步:加逻辑修bug

赶紧包个if判断,在控制器里塞进去:

if ($this->form_validation->run() == FALSE) {

// 重新加载表单页显示错误

$this->load->view('form_view');

} else {

// 验证通过的处理

echo '提交成功!';

接着在视图文件里每个输入框下面加了段php代码:

<?php echo form_error('username'); ?>

这下再试——错误信息终于能冒出来了!但新问题又来了:错误提示全是英文"Username field is required",看着真别扭。

第四步:中文化处理

跑到系统language文件夹,找到english目录里的form_validation_*,直接复制改名成form_validation_*扔进新建的chinese_simplified目录。把里头的提示语全改成"用户名不能为空"、"邮箱格式错误"这种中文。在*里把语言改成chinese_simplified——整个世界终于清净了!

实战遇见的五个坑:

坑1:必填项漏了
  • 错误表现:用户啥也不填就提交,后台居然收得到空数据
  • 处理:给每个字段都加上'required'
坑2:乱填邮箱
  • 错误表现:用户瞎写个123@456居然能过
  • 处理:用'valid_email'规则拦截,自动检查@符号和域名格式
坑3:密码太弱
  • 错误表现:用户设个"123"当密码
  • 处理:'min_length[6]'限制长度,'regex_match[/^(?=.[a-z])(?=.[A-Z])(?=.\d).+$/]'加大小写数字要求(这条规则调试了半小时才写对)
坑4:两次密码不一致
  • 错误表现:注册时密码和确认密码明明写的不一样也能提交
  • 处理:在确认密码字段加'matches[password]',匹配失败就报错
坑5:手机号验证
  • 错误表现:11位手机号里混进字母
  • 处理:自己写回调函数:'callback_mobile_check',在Controller里补充:
    function mobile_check($str) {

    if (!preg_match("/^1[3-9]\d{9}$/",$str)) {

    $this->form_validation->set_message('mobile_check', '手机号不对劲');

    return FALSE;

    } else {

    return TRUE;

搞完这些天都黑了。结论就是:表单验证像给用户挖坑——得在每道关口布好网子,漏掉哪环都可能摔个大马趴。特别是自定义规则写正则的时候,头皮挠得发麻,但弄好后真的省心!

相关推荐