CI 整合上传(图片)到表单验证中
2013-12-02 18:54
393 查看
最近在用CI的时候,发现一个问题,虽然CI已经封装好了很多的基础类吗,譬如表单验证类、文件上传类,但是都是一个一个的,并没有进行整合。但是实际应用当中单独试用一个基础类的情况可以说是少之又少,这里就介绍一些我自己研究的东西——将上传这个常用的功能整合进表单验证中。
首先在application\view\中准备一个显示层文件,核心代码如下:
上面是主要的处理代码,切记在表单验证的配置文件的上传文件这里不要再加required这样的参数,因为上传文件类里已经封装好了,再加就画蛇添足了。加了就会出错,楼主亲测。
最后还得补充一点,这里的CI版本是2.1.4,在程序中要用到的函数库在构造函数里要补充全了,或者autoload,反正就是辅助函数库要补充全,另外中文语言包也要准备好。
首先在application\view\中准备一个显示层文件,核心代码如下:
<body> <?php echo validation_errors(); ?> <?php echo form_open_multipart(''); ?> <table width="800" border="0" cellspacing="0" cellpadding="0" class="fl" style="margin-left:20px"> <tr> <td colspan="4"><span class="f_titi fw">完善个人信息</span>(除了标注可选填外均为必填)</td> </tr> <tr> <td width="86" height="51" align="right" valign="middle" class="fz"><font color="red">*</font>昵称:</td> <td height="51" colspan="2" valign="middle"><input name="picName" type="text" id="picName" class="input" value="<?php echo set_value('picName'); ?>" /></td> <td width="440"><div class="remark">昵称是您参与活动的身份标识哦。</div></td> </tr> <tr> <td height="50" align="right" valign="middle" class="fz">地区:</td> <td height="50" colspan="2" valign="middle"> <div> <select class="prov" id="prov" name="prov"> <option value="">请选择</option> <?php foreach ($prov as $item): ?> <option value="<?=$item['code']?>"><?=$item['name']?></option> <?php endforeach; ?> </select> <select class="city" id="city" name="city" disabled="disabled"></select> </div> <input name="arde" type="hidden" id="arde" class="form_input" /> </td> <td><div class="remark r_li">请选择报名地区</div></td> </tr> <tr> <td height="50" align="right" valign="middle" class="fz"><font color="red">*</font>手机号:</td> <td height="50" colspan="2" valign="middle"><input name="telphone" type="text" id="telphone" class="input" style="" value="<?php echo set_value('telphone'); ?>" /></td> <td><div class="remark r_li">请输入正确的手机号</div></td> </tr> <tr> <td height="50" align="right" valign="middle" class="fz"><font color="red">*</font>邮 箱:</td> <td height="50" colspan="2" valign="middle"><input name="email" type="text" id="email" class="input" style="" value="<?php echo set_value('email'); ?>" /></td> <td><div class="remark r_li">请输入正确的邮箱</div></td> </tr> <tr> <td height="50" align="right" valign="middle" class="fz"><font color="red">*</font>全家福照片:</td> <td height="50" colspan="2" valign="middle"><input type="file" name="userfile" size="20" /></td> <td><div class="remark r_li"></div></td> </tr> </table> </form>里面的稍微解释一下,地区那个地方是一个二级联动,js代码就不贴出来了。form_open_multipart这个函数里面要写上你的处理的表单的控制器和方法,其他的也没什么好说了。下面准备控制器application/controller/signp.php代码:
public function index() { $config = array( array( 'field' => 'picName', 'label' => '昵称', 'rules' => 'required|min_length[5]|max_length[12]|is_unique[signup.picName]' ), array( 'field' => 'prov', 'label' => '地区省', 'rules' => 'required' ), array( 'field' => 'city', 'label' => '地区市', 'rules' => 'required' ), array( 'field' => 'telphone', 'label' => '手机号码', 'rules' => 'required|numeric|exact_length[11]' ), array( 'field' => 'email', 'label' => '电子邮箱', 'rules' => 'required|valid_email' ), array( 'field' => 'userfile', 'label' => '全家福照片', 'rules' => 'callback_check_upload_pic' ) ); $this->form_validation->set_rules($config);//设置表单规则 if ($this->form_validation->run() == FALSE) { $data['prov'] = $this->Signup_model->get_category(1); $data['title'] = "My Real Title"; $this->load->view('signupview',$data); }else{ $imgInfo = array('upload_data' => $this->upload->data()); //将上传的图片统一处理为规定的大小 $config['image_library'] = 'gd2'; $config['source_image'] = $imgInfo['upload_data']['full_path']; $config['maintain_ratio'] = TRUE; $config['width'] = 132; $config['height'] = 136; $this->load->library('image_lib', $config); $this->image_lib->resize(); $data['picName'] = strval($this->input->post('picName')); $data['telphone'] = $this->input->post('telphone'); $data['email'] = $this->input->post('email'); $data['prov_id'] = $this->input->post('prov'); $data['city_id'] = $this->input->post('city'); $data['img'] = date("Y",time()).'/'.date("m",time()).'/'.date("d",time()).'/'.$imgInfo['upload_data']['orig_name']; $data['fatherName'] = $this->input->post('fatherName'); $data['motherName'] = $this->input->post('motherName'); $data['babyName'] = $this->input->post('babyName'); $data['babyAge'] = intval($this->input->post('babyAge')); $data['babyPoint'] = strval($this->input->post('babyPoint')); $data['create_time'] = time(); $data['update_time'] = time(); if($this->Signup_model->insert_info($data)) { echo "success"; }else{ echo "failed"; } } }
上面是主要的处理代码,切记在表单验证的配置文件的上传文件这里不要再加required这样的参数,因为上传文件类里已经封装好了,再加就画蛇添足了。加了就会出错,楼主亲测。
public function check_upload_pic() { //上传图片处理 if ( ! $this->upload->do_upload()) { $this->form_validation->set_message('check_upload_pic', $this->upload->display_errors()); return false; } else { return true; } }这个是自定义的图片检测处理函数,这里CI已经封装好了,我们直接拿过来就行了。modle层的话,我一般是喜欢处理一些数据逻辑什么的,所以没有放到model层里,在控制层里处理了。好了,基本的代码就是这些,下面附带一张效果图:
最后还得补充一点,这里的CI版本是2.1.4,在程序中要用到的函数库在构造函数里要补充全了,或者autoload,反正就是辅助函数库要补充全,另外中文语言包也要准备好。
相关文章推荐
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
- 微信小程序多张图片和表单一起上传,验证表单及进度条的实现完整代码
- django 整合 kindeditor ,解决上传图片 csrf 验证问题
- 通过客户端验证上传图片文件大小的ASP源码
- dedecms整合美图秀秀实现图片上传效果
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
- 图片上传form表单需要设置的属性
- thinkPHP5框架整合plupload实现图片批量上传功能的方法
- 上传图片的验证 验证是否为图片 后缀名验证 (总结)
- 【正则表达式图片总结】+常用的表单验证代码
- input-file 图片上传尺寸验证
- 如何用拦截表单的方法上传图片?
- JS form表单图片上传
- 客户端验证上传图片的大小(兼容IE和火狐)
- PHP CI框架批量上传图片
- php+ajax图片上传,及时文件上传 摆渡整合
- Word图片上传控件整合文档(CKEditor3.x)-Xproer.WordPaster
- 多个图片上传-验证-记数
- form表单使用ajaxsubmit上传文件,并验证