您的位置:首页 > 其它

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

2013-12-02 18:54 393 查看
最近在用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,反正就是辅助函数库要补充全,另外中文语言包也要准备好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: