Codeigniter:Update 图片并显示当前图片(如果我不想更新旧图片)
Codeigniter:Update Image and Display Current image if I don't want to update old image
我在更新图片时遇到问题。我已经创建了图片上传,效果很好,但我也希望更新它。当我添加需要的图像时,它会正确更新,但如果我不想更改图像并保持原样,则无法检索我当前的图像。
请帮帮我
这是我的代码:
我的模型更新
function updateDatasale($id){
$data=array(
'mayor_permit_attachment'=>$this->mayors_attachment()
);
$this->db->where('id',$id);
$this->db->update('tickets',$data);
}
function mayors_attachment(){
$pic=array(
'upload_path'=>'./uploads/',
'allowed_types'=>'gif|jpg|png',
'max_size'=>4000,
'max_width'=>10024,
'max_height'=>10024,
);
$this->load->library("upload",$pic);
if($this->upload->do_upload('mayors_attachment')){
$fb=$this->upload->data();
$fd=$fb['file_name'];
return $fd;
}
else{
$data = "null";
return $data;
}
}
控制器
public function updatesales($id){
$this->TicketReply_model->updateDatasale($id);
redirect("accepttask");
}
观看次数
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
<input type="file" name="mayors_attachment" >
</td>
</tr>
我用来解决此类问题的一种方法是将文件名(或完整路径)存储在会话或 cookie 中。存储后,您可以轻松检索此详细信息并在任何需要的地方使用它。
在您的上传文件检查块中:
if($this->upload->do_upload('mayors_attachment')){
// other code here
$attachment_session_data = array('attachment_file' => $fb['full_path']); // or the file_name if your prefer
$this->session->set_userdata($attachment_session_data); // add to session
// return normally
}
然后在您的视图文件中,对文件输入使用 value
属性不算数,并且不会提交到表单。因此,解决方法是 echo
一个 img
标记,以显示图像,然后在处理表单时,您将检查是否在输入文件中输入了新值,以及会话是否已经存在先前输入的图像。
大概是这样:
查看文件
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
<input type="file" name="mayors_attachment" >
<img src="<?php echo $this->session->attachment_file; ?>">
</td>
</tr>
理想情况下,$this->session->attachment_file
应该在您的控制器中并保存为将发送到视图的 $data
数组的一部分,然后您可以调用或回显视图文件中的变量. (希望你明白我的意思)。
然后在你的 CONTROLLER 或 MODEL:
// Check if session exists and input file is empty
if ( $this->session->attachment_file && empty($_FILES) )
{
// No file was entered, no need to upload
}
else
{
// New file was entered, do upload.
}
首先,您必须使用输入类型文件选项从数据库中存储 hidden
图像。
然后使用 if else{}
检查控制器功能是否可用?
观看次数
<form method="POST" action="<?php echo base_url().'ControllerName/updateImageData/'.$id;?>" enctype="multipart/form-data">
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
//store hidden image from database.
<input type="hidden" name="mayors_attachment_oldimage" value="<?php echo $mayors_attachment;?>">
<input type="file" name="mayors_attachment">
</td>
</tr>
<button class="btn btn-primary form-control" type="submit">Update Details</button>
</form>
控制器代码:
public function updateImageData($aid)
{
if($_FILES['mayors_attachment']['name']!=""){
$config['upload_path'] = "./assets/uploads/mayors_attachment/";
$config['allowed_types'] = 'gif|jpeg|png|jpg';
$this->load->library('upload',$config);
$this->path = './assets/uploads/mayors_attachment/';
$this->upload->initialize($config);
if (!$this->upload->do_upload('mayors_attachment'))
{
$error = array('error'=>$this->upload->display_errors());
}else{
$imageUpload = $this->upload->data();
$mayors_attachment_image_name=$imageUpload['file_name'];
}
}
else{
$mayors_attachment_image_name=$this->input->post('mayors_attachment_oldimage');
}
$insertdata = array(
'mayors_attachment'=>$mayors_attachment_image_name);
$insertQuery = $this->db->where('id',$aid)->update('tickets',$insertdata);
}
我在更新图片时遇到问题。我已经创建了图片上传,效果很好,但我也希望更新它。当我添加需要的图像时,它会正确更新,但如果我不想更改图像并保持原样,则无法检索我当前的图像。
请帮帮我
这是我的代码:
我的模型更新
function updateDatasale($id){
$data=array(
'mayor_permit_attachment'=>$this->mayors_attachment()
);
$this->db->where('id',$id);
$this->db->update('tickets',$data);
}
function mayors_attachment(){
$pic=array(
'upload_path'=>'./uploads/',
'allowed_types'=>'gif|jpg|png',
'max_size'=>4000,
'max_width'=>10024,
'max_height'=>10024,
);
$this->load->library("upload",$pic);
if($this->upload->do_upload('mayors_attachment')){
$fb=$this->upload->data();
$fd=$fb['file_name'];
return $fd;
}
else{
$data = "null";
return $data;
}
}
控制器
public function updatesales($id){
$this->TicketReply_model->updateDatasale($id);
redirect("accepttask");
}
观看次数
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
<input type="file" name="mayors_attachment" >
</td>
</tr>
我用来解决此类问题的一种方法是将文件名(或完整路径)存储在会话或 cookie 中。存储后,您可以轻松检索此详细信息并在任何需要的地方使用它。
在您的上传文件检查块中:
if($this->upload->do_upload('mayors_attachment')){
// other code here
$attachment_session_data = array('attachment_file' => $fb['full_path']); // or the file_name if your prefer
$this->session->set_userdata($attachment_session_data); // add to session
// return normally
}
然后在您的视图文件中,对文件输入使用 value
属性不算数,并且不会提交到表单。因此,解决方法是 echo
一个 img
标记,以显示图像,然后在处理表单时,您将检查是否在输入文件中输入了新值,以及会话是否已经存在先前输入的图像。
大概是这样:
查看文件
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
<input type="file" name="mayors_attachment" >
<img src="<?php echo $this->session->attachment_file; ?>">
</td>
</tr>
理想情况下,$this->session->attachment_file
应该在您的控制器中并保存为将发送到视图的 $data
数组的一部分,然后您可以调用或回显视图文件中的变量. (希望你明白我的意思)。
然后在你的 CONTROLLER 或 MODEL:
// Check if session exists and input file is empty
if ( $this->session->attachment_file && empty($_FILES) )
{
// No file was entered, no need to upload
}
else
{
// New file was entered, do upload.
}
首先,您必须使用输入类型文件选项从数据库中存储 hidden
图像。
然后使用 if else{}
检查控制器功能是否可用?
观看次数
<form method="POST" action="<?php echo base_url().'ControllerName/updateImageData/'.$id;?>" enctype="multipart/form-data">
<tr>
<td>
<span class="text-danger text-bold">
<label>Mayors Permit:</label>
//store hidden image from database.
<input type="hidden" name="mayors_attachment_oldimage" value="<?php echo $mayors_attachment;?>">
<input type="file" name="mayors_attachment">
</td>
</tr>
<button class="btn btn-primary form-control" type="submit">Update Details</button>
</form>
控制器代码:
public function updateImageData($aid)
{
if($_FILES['mayors_attachment']['name']!=""){
$config['upload_path'] = "./assets/uploads/mayors_attachment/";
$config['allowed_types'] = 'gif|jpeg|png|jpg';
$this->load->library('upload',$config);
$this->path = './assets/uploads/mayors_attachment/';
$this->upload->initialize($config);
if (!$this->upload->do_upload('mayors_attachment'))
{
$error = array('error'=>$this->upload->display_errors());
}else{
$imageUpload = $this->upload->data();
$mayors_attachment_image_name=$imageUpload['file_name'];
}
}
else{
$mayors_attachment_image_name=$this->input->post('mayors_attachment_oldimage');
}
$insertdata = array(
'mayors_attachment'=>$mayors_attachment_image_name);
$insertQuery = $this->db->where('id',$aid)->update('tickets',$insertdata);
}