关闭

CI 整合上传(图片)到表单验证中

标签: CI
894人阅读 评论(0) 收藏 举报
分类:

最近在用CI的时候,发现一个问题,虽然CI已经封装好了很多的基础类吗,譬如表单验证类、文件上传类,但是都是一个一个的,并没有进行整合。但是实际应用当中单独试用一个基础类的情况可以说是少之又少,这里就介绍一些我自己研究的东西——将上传这个常用的功能整合进表单验证中。

首先在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,反正就是辅助函数库要补充全,另外中文语言包也要准备好。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12618次
    • 积分:267
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:8篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论