用编辑/更新功能替换数据库中的图像

时间:2019-02-21 21:39:55

标签: php codeigniter

使用 codeigniter 3因此,在搜索此问题时,我尝试了一些示例。无济于事。

我的问题是,当我编辑帖子时,我能够获得所有输入字段,其中包含最初发布的数据以进行相应显示和编辑。我的问题是在照片部分,它将图像上载到服务器上的文件夹,但是图像名称未更新到数据库,因此视图无法显示它。

(此问题仅在编辑时,在创建后即可正常使用)。

那么我在这里想念的是什么?


P.S。::另外,如果有人可以给我提示如何在编辑字段中加载原始上传的图像,那么如果此人决定保留他们上传的原始图像,则无需再次添加。


我的控制器

public function edit($slug){
  $data['categories'] = $this->post_model->get_categories();
  $data['post_image'] = $this->post_model->get_posts('post_image');
  $data['post'] = $this->post_model->get_posts($slug);
  if(empty($data['post'])){
    show_404();
  }
$data['title'] = 'Edit Your Post';
$this->load->view('templates/header');
$this->load->view('posts/edit', $data);
$this->load->view('templates/footer');
}
public function update(){
  if(!$this->session->userdata('logged_in')){
                redirect('users/login');
            }
else{
  if($_FILES['userfile']['name'] != "")
  {
     if($_FILES['userfile']['type'] == 'image/jpeg'){
      $ext = ".jpeg";
    }
      if($_FILES['userfile']['type'] == 'image/jpg'){
       $ext = ".jpg";
     }
      else if($_FILES['userfile']['type'] == 'image/png'){
      $ext = ".png";
    }
}
    $imageedit = time();
            $config = array(
              'file_name' => $imageedit,
              'upload_path' => "assets/images/posts/",
              'allowed_types' => "jpg|png|jpeg",
            );
    $this->upload->initialize($config);
    if(!$this->upload->do_upload('userfile')){
          $this->session->set_flashdata( 'error_msg', $this->upload->display_errors());
               redirect('posts/edit');
             }
             else {
      $this->post_model->update_post($imageedit);
      $imageedit = "assets/images/posts/".$imageedit;
    }
  $slug = $this->post_model->get_posts($slug);
  $this->post_model->update_post();
  $this->session->set_flashdata('post_updated', 'Your post has been updated');
  redirect('posts');
}
}
  }

模型

public function update_post($imageedit,$slug){

  $site = $this->input->post('site');


  $data = array(

  'title'=>$this->input->post('title'),
  //'slug'=>$slug,
  'body'=> $this->input->post('Description'),
  'post_image' => $imageedit,
  'Number'=> $this->input->post('Number'),
  "Languages"=>$this->input->post('Lang'),
  'site'=>$site

  );
  $this->db->where('id',$this->input->post('id'));
  return $this->db->update('posts',$data);
}

}

?>

1 个答案:

答案 0 :(得分:1)

您的图像名称未在数据库中更新,因为在else部分之后,您将发出空更新请求。

$this->post_model->update_post(); //Here you are passing nothing in update function.

进行如下更改。因为您具有public function update_post($imageedit,$slug)

之类的更新功能
else
{
    $imageedit = "assets/images/posts/".$imageedit;
}
$slug = $this->post_model->get_posts($slug);

$this->post_model->update_post($imageedit,$slug);  //Update this line.

在编辑时,要显示/加载原始上传的图像,请在“视图”中执行以下操作。

假设您通过编辑功能以如下方式获取所有图像数据。

$data['post_image'] = $this->post_model->get_posts('post_image');
$this->load->view('posts/edit', $data);

在这里,您将图像数据作为数组在 $ data ['post_image'] 中获取,并将所有这些数据传递到视图文件中。

在浏览图像代码上方的查看文件中添加以下代码。这样用户可以看到原始图像。

<?php if( $this->uri->segment(2) == 'edit' ) { ?>
Your Original uploaded Image
<img src="assets/images/posts/<?php echo $post_image[0]['post_image']; ?>" title="Image" alt="Image" />
<?php } ?>
<br />
Upload New Image => 
<?php echo form_input(array('type'=>'file','name'=>'userfile','id'=>'userfile','accept'=>'.jpg,.jpeg,.png')); } ?>

注意:-上面只是示例,说明了如何在编辑时在View文件中显示原始图像。 确保您根据需要更改图像路径。

EDIT => 在编辑视图部件时,我正在显示“视图”,如下图所示。这样用户可以看到原始图像。

enter image description here