php - 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 脚本。
解决方案
嗯..我取得了一些进展
在控制器中,我更改了这一行:
$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);
但我认为,这不是很好的方法,如果有人可以提出更好的方法,请!
推荐阅读
- python - 预约管理系统(预约时间限制)
- r - 在 DESeq2 中执行 plotPCA 之后,是否有更好的方法在 ggplot 中绘制此 PCAplot?
- snowflake-cloud-data-platform - 在雪花中使用 COPY INTO 创建多个文件
- typescript - 对修改后的源文件进行 TypeScript API 类型检查
- python - 根据以下条件更正我的 Python 闰年代码
- python - 如何使用 Python reportlab 和 BytesIO 的缓冲区在 PDF 上设置密码
- java - 在Java中使用子字符串删除部分字符串
- python - 来自邻接矩阵的 Gurobi、python 和 tsp
- elasticsearch - Elasticsearch没有multi_match的结果
- react-native - 将照片从 React Native 应用程序上传到 Strapi api