首页 > 解决方案 > Codeigniter 通过单击更改图像,在第二次编辑时不起作用?

问题描述

好吧,我有一个基于 CI3 的简单博客,我在管理面板中有用于添加文章的表单:

在此处输入图像描述

博客图片是默认图片,当我点击它时,会出现上传表单,我可以从我的电脑中选择其他图片,然后点击保存按钮,一切正常,但是当我再次编辑这篇文章但没有再次设置图片时,它显示图像,这是我第一次设置的,但是在单击图像的 DB 列中的保存按钮后,图像为空,并且图像消失,这是我的代码:

控制器/编辑():

public function edit($id = '')
{
    $data['header_title'] = 'Блог - Добави';
    $this->load->model('admin/Blog_Model');

    if (!empty($this->input->post())) {

        $config['upload_path'] = './assets/img/blog/'; //Use relative or absolute path
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '100';
        $config['max_width'] = '5000';
        $config['max_height'] = '5000';
        $config['overwrite'] = FALSE;
        $this->upload->initialize($config);

        $this->upload->do_upload('image');
        $uploadData = $this->upload->data();
        $image = $uploadData['file_name'];

        $user = $this->Blog_Model->editPost($this->input->post(), $image, $id);
        redirect(site_url('admin/blog/showAll'));
    }

    $this->getForm($id);
}

控制器/getForm():

public function getForm($id = '')
{
    $data['header_title'] = 'Блог';

    if (!empty($id)) {
        $post = $this->Blog_Model->getPost($id);
        $data['action'] = 'admin/blog/edit/'.$id;
    } else {
        $data['action'] = 'admin/blog/add';
    }

    $data['formTitle'] = array(
        'name'          => 'title',
        'id'            => 'content-title',
        'value'         => isset($post['title']) ? $post['title'] : '',
        'placeholder'   => 'Заглавие',
        'class'         => 'form-control'
    );

    $data['formContent'] = array(
        'name'          => 'content',
        'id'            => 'content-blog',
        'value'         => isset($post['content']) ? $post['content'] : '',
        'placeholder'   => 'Съдържание',
    );

    $data['formImage'] = !empty($post['image']) ? $post['image'] : 'blog.png';


    $data['formButton'] = array(
        'type' => 'submit',
        'content'=> 'Изпрати',
        'class'=> 'btn btn-primary btn-block btn-flat'
    );

    $data['head'] = $this->load->view('admin/common/head', NULL, TRUE);
    $data['left_column'] = $this->load->view('admin/common/left_column', NULL, TRUE);

    $this->load->view('admin/common/header', $data);
    $this->load->view('admin/blog/blog_form', $data);
    $this->load->view('admin/common/footer');
}

查看/blog_form:

<body class="hold-transition skin-blue sidebar-mini">
<div class="wrapper">
<?php echo $head; ?>
<?php echo $left_column; ?>


  <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper">
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <h1>
        БЛОГ
      </h1>
      <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>
        <li><a href="#">Tables</a></li>
        <li class="active">Data tables</li>
      </ol>
    </section>
    <!-- Main content -->
    <section class="content">
      <div class="row">
        <div class="col-md-12">
          <div class="box box-info">
            <div class="box-header">
              <h3 class="box-title"><b>Добави новина:</b></h3>
            </div>
            <!-- /.box-header -->
            <div class="box-body pad">
                <?php echo form_open_multipart($action); ?>

                <div class="box-body">
                <div class="form-group">
                  <label for="content-title">Заглавие:</label>
                   <?php echo form_input($formTitle); ?>
                </div>
                <div class="form-group">
                    <label for="content_blog">Съдържание:</label>
                    <?php echo form_textarea($formContent); ?>
                </div>
                <div class="col-xs-12 col-md-3 pull-right">
                    <?php echo form_button($formButton); ?>
                </div>
                <div class="image-upload">
                    <label for="image-input">
                        <img src="<?php echo base_url('assets/img/blog/' . $formImage); ?>" alt="" class="img-thumbnail" id="image-blog"/>
                    </label>
                    <input type="file" id="image-input" name="image" onchange="readPath(this);"/>
                </div>

              <?php echo form_close(); ?>
            </div>
          </div>
          <!-- /.box -->

        </div>
        <!-- /.col-->
      </div>
      <!-- ./row -->
    </section>
    <!-- /.content -->
  </div>
  <div class="control-sidebar-bg"></div>
</div>
<!-- ./wrapper -->

<script>
        function readPath(input) {
        console.log('blog');
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function (e) {
                $('#image-blog').attr('src', e.target.result);
            }

            reader.readAsDataURL(input.files[0]);
        }
    }

    $("#image-input").change(function(){
        readPath(this);
    });
</script>

和模型/getPost(),editPost() 方法:

public function getPost($id)
{
    $this->db->select()->from('blog')->where('id', $id);
    $query = $this->db->get();
    return $query->row_array();
}

public function editPost($inputData, $image, $id)
{
    $data = array(
        'title' => $inputData['title'],
        'content' => $inputData['content'],
        'image' => $image
    );

    $this->db->where('id', $id);
    $this->db->update('blog', $data);
}

任何想法都会有所帮助,在视图文件的底部你可以看到替换图像的 js 脚本。

标签: phpcodeigniter-3

解决方案


嗯..我取得了一些进展

在控制器中,我更改了这一行:

$data['formImage'] = !empty($post['image']) ? $post['image'] : 'blog.png';

这些行:

if (!empty($this->input->post('image'))) {
    $data['image'] = $this->input->post('image');
} elseif (!empty($post)) {
    $data['image'] = $post['image'];
} else {
    $data['image'] = '';
}

if (!empty($this->input->post('image'))) {
   $data['formImage'] = $post['image'];
} elseif (!empty($post)) {
    $data['formImage'] = $post['image'];
} else {
    $data['formImage'] = 'blog.png';
}

然后在该行下方的视图文件中:

<label for="image-input">
  <img src="<?php echo base_url('assets/img/blog/' . $formImage); ?>" alt="" class="img-thumbnail" id="image-blog"/>
</label>

添加了这一行:

<input type="hidden" name="image" value="<?php echo $image; ?>" id="input-image" />

在模型中,将编辑方法更改为:

public function editPost($inputData, $id)
{
    $data = array(
        'title' => $inputData['title'],
        'content' => $inputData['content'],
        'image' => $inputData['image']
    );

    $this->db->where('id', $id);
    $this->db->update('blog', $data);
}

现在我可以每次编辑而不会丢失图像,但是每次我保存并打开它时,它都是相同的图像,它只会改变图像的视觉效果。

编辑:

好的,最后我做到了,像这样:

    $image = !empty($uploadData['file_name']) ? $uploadData['file_name'] : $this->input->post('image');

    $user = $this->Blog_Model->editPost($this->input->post(), $image, $id);

但我认为,这不是很好的方法,如果有人可以提出更好的方法,请!


推荐阅读