codeigniter更新图片上传

时间:2011-03-04 04:08:01

标签: codeigniter image-processing upload

您好我正在开发一个图像上传模块,其中图像路径保存在数据库中并在预览中检索,这是我的问题,我希望它编辑和更新,但我的问题是它不删除旧图像但它保存并更新新图像。

我希望你可以帮助或建议我一个好的教程基本添加,编辑更新删除图像上传,其中保存图像在DB中。谢谢!

这是我在配置文件控制器中的编辑

    <?php
          function edit_profile()
          {
              $id=$this->uri->segment(3);
              $this->load->model('profile_model');      
              $this->load->library('form_validation');
            // field name, error message, validation rules
            $this->form_validation->set_rules('name', 'Name', 'trim|required');
            $this->form_validation->set_rules('city', 'City', 'trim|required');
            $this->form_validation->set_rules('telno', 'Tel no.', 'trim|required');

              if ($this->form_validation->run() == FALSE )
              {
                if(empty($id)) $id=$this->input->post('id');

                $data['result'] = $this->profile_model->profile_hotel($id);   
                $data['id']=$id;
                $this->load->view('profile/edit_form', $data);
              }
              else{ 
            if(isset($_FILES['profile_avatar']))
            {
              $this->load->model('profile_model');
              $file = read_file($_FILES['upload']['tmp_name']);
              $profile_avatar = basename($_FILES['upload']['name']);

              write_file('files/'.$profile_avatar, $file);

              $this->profile_model->update_profile($profile_avatar);
            }
              }    
          }

/* My update function in profile_model */

  function update_profile($profile_field)
   {
    if(!empty($profile_field)){
      $profile_avatar = $this->input->post('profile_avatar');
    }
    else{
      $profile_avatar = $profile_field;
    }
      $id = $this->input->post('id');
      $new_profile_update_data = array( 
      'name' => $this->input->post('name'),
      'city' => $this->input->post('city'),
      'telno' => $this->input->post('telno'),
      'avatar' => $profile_avatar,
      );
      $this->db->where('id', $id);
      $this->db->update('tbl_profile', $new_profile_update_data);
  }

?>

/*My profile edit view*/

<?php

   echo form_open_multipart('profile/edit_profile').'<br/>';
   $fetch=$result->row();
?>
<img width="200" height="200" src="<?php echo base_url()?>files/<?php echo $fetch->hotel_logo;?>"><br/>
<?php

   echo form_hidden('id',$id);
   echo form_hidden('profile_avatar', $fetch->profile_avatar).'<br/>';     
   echo '<span>avatar</span>';
   echo '<input type="file" name="profile_avatar" />'.'<br/>';
   echo form_input('name', $fetch->name).form_error('name').'<br/>';
   echo form_input('city', $fetch->city) .form_error ('city').'<br/>';
   echo form_input('telno', $fetch->telno).form_error ('telno').'<br/>';

   echo form_submit('submit', 'Save');
  ?>
  <?php echo validation_errors('<p class="errors">');?>

2 个答案:

答案 0 :(得分:0)

如果要覆盖旧的头像文件,则应从数据库加载旧图像的路径,unlink(删除)旧文件,然后编写新文件,最后写入新文件的路径文件到数据库。

答案 1 :(得分:0)

戴夫:

查看模型,其中:

if (!empty($profile_field)) {
    $profile_avatar = $this->input->post('profile_avatar');
} else {
    $profile_avatar = $profile_field;
}
我认为有一个'!'那是错的。它应该是

if (empty($profile_field)) {
    $profile_avatar = $this->input->post('profile_avatar');
} else {
    $profile_avatar = $profile_field;
}

可能是这个错误