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

原创 2013年12月02日 18:54:20

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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CI框架文件上传类

public function uploadImg($fileName){ //上传类的配置 $config['upload_path'] ='./public/uploads/';  //文...

ci表单验证

CI框架学习之四(表单验证)

1、form头部信息的自动输出函数(view) 'email', 'id' => 'myform'); echo form_open('email/send', $attributes); ...

ci框架 2_表单验证(未完善)

创建控制器 user.php class User extends CI_Controller { public function __construct() { parent :: __co...

CI的表单验证

1.在填写表单的页面,最好在

用struts2 完成一个简单的通讯录,实现增删改查,分页,文件上传(头像),表单验证(两种方法)

1.登录 1.1登录页面 2.2写action return "success"; 2.2  表单验证 例如: 注意:使用表单验证有一个前提,该action必须...

CI之图片上传

  • 2014-12-29 14:35
  • 741B
  • 下载

CI中 图片上传

CI中 图片上传

PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例

网上关于七牛云存储的教程除了官网上的API文档,其他的资料太少了。研究了下API之后,现在已经能实现图片的上传和下载及上传之后的重定向。 首先本篇文章实现的功能如下: 1.利用表单上传功能,用户可...

PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例

PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)