У меня есть функция для загрузки изображения, которое прекрасно вставляет имя изображения в базу данных. Я создал новую функцию с именем edit()
с тем же кодом, который позволяет пользователю редактировать форму и загружать изображение. это имя изображения обновит существующее имя изображения в базе данных.
Однако каждый раз, когда пользователь редактирует форму и выбирает новое изображение, вместо сохранения нового имени изображения он вытирает предыдущее имя из базы данных и ничего не отображает.
мой контроллер:
public function edit(){
$this->form_validation->set_rules('title', 'Title', 'required|xss_clean|trim|is_unique[news.title]');
$this->form_validation->set_rules('description', 'description', 'required|xss_clean|trim');
$this->form_validation->set_rules('notes', 'notes', 'required|xss_clean|trim');
if ($this->form_validation->run() == FALSE)
{
$data['error'] = '';
$data['page_title']="Edit News";
$this->load->view("edit_news_form",$data);
}
else {
$new = array(
'upload_path' => "./images/news",
'allowed_types' => "gif|jpg|png|jpeg|JPG",
'overwrite' =>False,
'max_height' => "768",
'max_width' => "1024"
);
$this->load->library('upload', $new);
$this->load->helper(array('form', 'url'));
if(isset($_FILES)) {
if($this->upload->do_upload())
{
$data = array('upload_data' => $this->upload>data());
$this->load->view('manage_news',$data);
}
else {
if(empty($_FILES['userfile']['name'])){ $imagename ='';}
else {
$message2 = "Please choose another file type. gif,jpg,png,jpeg ";
echo "<script type='text/javascript'>alert('$message2');</script>";
redirect('resetPasswordController/edit_news_form', 'refresh');
}
}
}
$this->db->trans_start();
$imagename = $this->upload->data();
$data = array(
'image'=>$imagename['file_name'],
);
$this->users_model->update($id,$data);
$this->db->trans_complete();
$message2 = "The selected news has been edited";
echo "<script type='text/javascript'>alert('$message2');</script>";
redirect('resetPasswordController/manage_news', 'refresh');
}
}
мой взгляд:
<?php echo form_open_multipart('resetPasswordController/news');?>
<label>Image</label>
<input name = "userfile" type="file" />
<label> <input type="submit" name="submit" value="Save and Continue">
</label>
моя модель:
function update($id,$data){
$this->db->where('id', $id);
$this->db->update('news',$data);
}
моя модель работает, потому что она обновляет базу данных до нуля. Я думаю, что проблема связана с представлением и контроллером.
когда я var_dump($_FILES)
он возвращает пустой массив, что означает, что файл не был выбран.
Как я могу это исправить?
$this->load->library('upload');
$config = array(
'upload_path' => './uploads/',
'allowed_types' => 'gif|jpg|png|pdf|doc|docx',
'max_size' => 10000,
'overwrite' => FALSE
);
$files = $_FILES;
$cpt = count($_FILES['file']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['userfile']['name'] = $files['file']['name'][$i];
$_FILES['userfile']['type'] = $files['file']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['file']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['file']['error'][$i];
$_FILES['userfile']['size'] = $files['file']['size'][$i];
$this->upload->initialize($config);
$this->upload->do_upload();
<!-- INSERT DB HERE --->
}
вы можете использовать это как свою ссылку, она работает для меня.
Убедитесь, что вы загрузили помощник формы CodeIgniter. $this-> load-> helper ('form') перед вашим контроллером формы. Или вы можете загрузить его автоматически с помощью application/config/autoload.php, поместив этот $ autoload ['helper'] = array ('form'); Надеюсь, он сработает.