2012-02-24 122 views
0

我的HTML:笨照片上傳提交

<?php echo form_open_multipart(base_url() . 'user/' . $this->session->userdata['username'] . '/settings/picture'); ?> 
    <input type="file" name="photo_data" id="photo_data" value="" /> 
    <input type="submit" value="Save" name="submit" class="button_ui fr" /> 
<?php form_close(); ?> 

所以用戶進入其設置頁面,然後在菜單,然後出上述HTML,並允許用戶更新圖片點擊圖片選項卡。

然後我進入我的usercontroller並試圖檢查用戶是否在圖片選項卡上並打印出正在發送的數據,因此我可以繼續編碼其餘部分......但事情是它不打印圖片我選擇要上傳...

我的控制器代碼:

if ($this->uri->segment(4) == 'picture'){ 
    if (isset($_POST["submit"])){ 
     print_r($_POST); 
    } 
} 

輸出:

Array ([submit] => Save Changes) 
+2

'$ _POST'不包含您的文件數據。它位於['$ _FILES'](http://php.net/manual/en/reserved.variables.files.php)。這應該讓你再次感動。 – 2012-02-24 17:30:00

+0

該死的......我沒有注意到我正在使用$ _POST而不是$ _FILES ..謝謝。 – fxuser 2012-02-24 17:33:06

回答

1

由於該男子iac指出,文件上傳存儲在$ _FILES全局中,而不是$ _POST。但是你甚至不需要使用這些CodeIgniter(只要它是你正在做的一個文件上傳)。在你的控制器,你可以使用CI的內置的文件上傳類:

public function do_upload() 
{ 
    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = '100'; 
    $config['max_width'] = '1024'; 
    $config['max_height'] = '768'; 

    $this->load->library('upload', $config); 

    // Automatically finds your user's file in $_FILES 
    if (! $this->upload->do_upload()) 
    { 
     $error = array('error' => $this->upload->display_errors()); 
     $this->load->view('upload_form', $error); 
    } 
    else 
    { 
     $data = array('upload_data' => $this->upload->data()); 
     $this->load->view('upload_success', $data); 
    } 
} 

如果您要上傳多個文件,你需要做一個foreach循環使用$ _FILES。在documentation中瞭解更多關於它的信息。此外,您可以使用類似於以下內容將視圖中的代碼最小化:

<?php 
    echo form_open_multipart('user/'.$this->session->userdata['username'].'/settings/picture'); ?> 
    echo form_upload(array('name'=>'photo_data','id'=>'photo_data')); 
    echo form_submit('submit','Save'); 
    echo form_close(); 
?>