2015-11-30 5 views
2

Я не уверен, правильно ли сформулированы мои вопросы, поэтому, пожалуйста, не стесняйтесь сказать мне, чтобы я изменил его.Вставьте данные в базу данных с помощью codeigniter 3

Я разрешаю загружать сразу несколько изображений, а затем вставлять текст в базу данных в виде html img.

Вот мой код:

if (! $this->upload->do_upload('post_image')) 
       { 
        $this->session->set_flashdata('post_message', $this->upload->display_errors()); 
        $this->session->set_flashdata('post_message_class', 'alert-danger'); 
        redirect('/user/profile/'.$identity, 'refresh'); 
       } 
       else 
       { 
        $uploaded = $this->upload->data();       
        // insert pos 
        if(isset($uploaded['file_name']) && $uploaded['file_name'] == 0){      
         $post_text = '<img src="/uploads/images/'.$uploaded['file_name'].'" width="251px" alt="'.$uploaded['raw_name'].'" /><br>'.$this->input->post('post_text');         
        } 
        else 
        { 
         foreach ($uploaded as $images){            
          $post_text = '<img src="/uploads/images/'.$images['file_name'].'" width="251px" alt="'.$images['raw_name'].'" /><br>'.$this->input->post('post_text');             
         } 
        }    

        $query = $this->user_model->insert_user_posts($this->input->post('poster_id'), $this->input->post('profile_id'), $this->input->post('post_type'), $post_text); 
        $this->session->set_flashdata('post_message', 'Image has been posted!'); 
        $this->session->set_flashdata('post_message_class', 'alert-success'); 
        redirect('/user/profile/'.$identity, 'refresh');   
       } 

EDIT: Вот код модели:

public function insert_user_posts($poster_id, $profile_id, $post_type, $post_text) 
    { 
     // Users table. 
     $data = array(
      'poster_id'  => $poster_id, 
      'profile_id' => $profile_id, 
      'post_type'  => $post_type, 
      'post_text'  => $post_text, 
      'datetime'  => time() 
     ); 

     $this->db->insert($this->tables['users_posts'], $data); 

     if($this->db->affected_rows() > 0) 
     { 
      $this->set_message('upload_successful'); 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    } 

Кроме того, я использую это: https://github.com/avenirer/MY_Upload

Если я echo или var_dump$post_text он отобразит данные для обоих изображений, но только вставляет первое изображение. Что я здесь делаю неправильно?

+1

он появляется в цикле foreach здесь 'foreach ($ uploaded as $ images) {' вы переписываете '$ post_text' с каждым изображением. Из-за этого, я думаю, вы только вставляете последнее изображение. Кроме того, вы должны опубликовать код в 'user_model-> insert_user_posts', так как это может быть проблемой. –

+1

Спасибо. Я также добавил ссылку на библиотеку, которую я использую. – iamthestreets

+0

Так что скажем, что переменная '$ uploaded' имеет в ней несколько значений, которые мы можем считать изображениями. Что вы собираетесь с ними делать? Вы хотите добавить их вместе в одну и ту же переменную '$ post_text', которую нужно вставить, или вставить для каждой из них? –

ответ

1

Если вы хотите добавить изображения вместе в одной и той же $post_text переменной вы должны изменить эту строку: $post_text = '<img src="/uploads/images/'.$images['file_name'].'" width="251px" alt="'.$images['raw_name'].'" /><br>'.$this->input->post('post_text');

путем изменения оператора присваивания = оператору конкатенации .= следующим образом:

$post_text .= ...

Вместо того, чтобы переписывать переменную $post_text каждый раз, когда вы вместо этого добавляете каждое изображение в конец. Я могу сделать предположение, что ваш последний цикл Еогеаспа может выглядеть примерно так:

$post_text = ""; foreach ($uploaded as $images){ $post_text .= '<img src="/uploads/images/'.$images['file_name'].'" width="251px" alt="'.$images['raw_name'].'" />'; } $post_text .= '<br>'.$this->input->post('post_text');

Это позволит создать строку, содержащую все изображения в строке а в конце по '<br>'.$this->input->post('post_text');. Имейте в виду, что вы должны сначала создать экземпляр переменной $post_text, чтобы что-то (здесь я установил ее в пустую строку), чтобы использовать оператор конкатенации.

+1

Спасибо! Отлично! – iamthestreets

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