2014-03-31 4 views
0

datamapper를 사용하여 데이터베이스에 file_name을 저장하고 저장하려고합니다. 처음에 Codeigniter 매뉴얼에 주어진 do_upload의 기본 예제를 사용하여 끝냈습니다. idama와 url이있는 간단한 테이블을 보려고 datamapper의 3 행을 썼습니다. 나는 그것을 실행하고 그것을 잘 저장합니다.Codeigniter & Datamapper : 업로드 된 이미지를 데이터베이스에 저장하는 것이 작동하지 않습니다.

내 add_article 메서드에서 do_upload 함수를 호출하려고 할 때 문제가 발생합니다. 기사가 업로드 된 이미지 이름과 기사의 모든 세부 정보를 저장하기 위해 이미지와 함께 업로드 될 때입니다. 그러나 그것은 작동하지 않으며 모든 종류의 유형을 시도합니다. 내 컨트롤러에서

:

public function add_article($id = NULL) 
{ 
    $articles = new Article_model(); 
    $article = $articles->where('id', $id)->get(); 

    $article->title = $this->input->post('title'); 
    $article->text = $this->input->post('text'); 


    // Try to upload the image 
    if ($this->input->post('submit')) 
    { 
     $this->do_upload(); 
    } 

    if ($article->save()) 
    { 
     echo '<p>You have successfully added an article</p>'; 
     redirect('admin/article/'); 
    } 
    else 
    { 
     echo '<p>' . $article->error->string . '</p>'; 
    } 
} 

    public function do_upload() 
{ 
    $config = array(
     'allowed_types' => 'jpg|jpeg|gif|png', 
     'upload_path' => $this->gallery_path, 
     ); 

    $this->load->library('upload' , $config); 
    $this->upload->do_upload(); 
    $image_data = $this->upload->data(); 

    $article = new Article_model(); 
    $article->url = $image_data['file_name']; 
    $article->save(); 


} 

내보기 :

<?php echo form_open_multipart('admin/article/add_article'); ?> 
<table class="table"> 
    <tr> 
     <td>Title</td> 
     <td><?php echo form_input('title', set_value('title', $article->title)); ?></td> 
    </tr> 
    <tr> 
     <td>Image</td> 
     <td><?php echo form_upload('userfile'); ?></td> 
    </tr> 
    <tr> 
     <td>Body</td> 
     <td><?php echo form_textarea('text', set_value('text' , $article->text), 'class="tinymce"'); ?></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><?php echo form_submit('submit', 'Save', 'class="btn btn-primary"'); ?></td> 
    </tr>  
</table> 
+0

무엇이 오류입니까? – mituw16

+0

나는 오류가 없으며, file_name은 데이터베이스에 들어 가지 않습니다. ( – Unsparing

+0

당신의'do_upload' 함수에서 당신이 새로운'Article_Model'을 인스턴스화하고 있기 때문에 그걸 업데이트하는 것이 아닌가 의심 스럽습니다. 이전에 삽입 한 코드를 변경하십시오. 내 대답을 넣을 코드를 변경하십시오. – mituw16

답변

0

이 시도를 여기에 내가 가진 것입니다.

대신 do_upload 방법에 새로운 Article_Model을 인스턴스화, 단순히 do_upload 방법에서 이미지 이름을 반환하고, 데이터베이스에 저장하기 전에 Article_Model의 URL 속성을 설정합니다.

public function add_article($id = NULL) 
{ 
    $articles = new Article_model(); 
    $article = $articles->where('id', $id)->get(); 

    $article->title = $this->input->post('title'); 
    $article->text = $this->input->post('text'); 


    // Try to upload the image 
    if ($this->input->post('submit')) 
    { 
     $article->url = $this->do_upload(); 
    } 

    if ($article->save()) 
    { 
     echo '<p>You have successfully added an article</p>'; 
     redirect('admin/article/'); 
    } 
    else 
    { 
     echo '<p>' . $article->error->string . '</p>'; 
    } 
} 

public function do_upload() 
{ 
    $config = array(
    'allowed_types' => 'jpg|jpeg|gif|png', 
    'upload_path' => $this->gallery_path, 
    ); 

    $this->load->library('upload' , $config); 
    $this->upload->do_upload(); 
    $image_data = $this->upload->data(); 

    return $image_data['file_name']; 
} 
+0

그것은 건배 :) – Unsparing