2015-06-04 4 views
1

У меня есть функция для загрузки изображения, которое вставляет имя изображения в базу данных отлично. Я создал новую функцию под названием 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); 
    } 

моя модель функция работает, потому что она обновляет базу данных, чтобы nothing.i думать проблема связана с представлением и контроллером.

Когда я набираю var_dump($_FILES), он возвращает пустой массив, что означает, что файл не был выбран.

как я могу это исправить?

+0

У вас есть тег формы? – Saty

+0

да есть. форма работает, потому что я использовал точный код формы для другой ситуации загрузки. его логическая проблема с моим контроллером. он не читает файл, который пользователь выбирает в форме. –

ответ

0
    $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 ---> 
        } 

Вы можете использовать это как свою ссылку, это работает для меня.

+0

Это дает мне новые ошибки, т. Е. Undefined 'file' –

-1

Проверьте, что вы загрузили хелпер формы CodeIgniter. $ this-> load-> helper ('form') перед вашим контроллером формы. Или вы можете загрузить его автоматически с помощью application/config/autoload.php, поместив этот $ autoload ['helper'] = array ('form'); Надеюсь, он сработает.

+0

спасибо, но я уже загрузил форму helper –

+1

вашу форму связи , Которая передается функции новостей в resetPasswordController контроллер. Но вы работаете над public function edit(). Представлены ли данные в нужное место назначения? –

+0

извините, забыл изменить это, когда я скопировал текст. он подходит к правильной функции. –

Смежные вопросы