2015-09-17 29 views
1

我想將CSV導入MYSQL數據庫。我也跟着教程here如何在Codeigniter中只設置或上傳CSV類型

現在我得到的是

您嘗試上傳文件類型是不允許出錯。

下面是我的控制器代碼:

function importcsv() { 
    $data['addressbook'] = $this->csv_model->get_addressbook(); 
    $data['error'] = ''; //initialize image upload error array to empty 

    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'text/x-comma-separated-values'|'text/comma-separated-values'|'application/octet-stream'| 'application/vnd.ms-excel'|'application/x-csv'|'text/x-csv'|'text/csv'|'application/csv'|'application/excel'|'application/vnd.msexcel'|'text/plain'; 
    $config['max_size'] = '1000'; 

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


    // If upload failed, display error 
    if (!$this->upload->do_upload()) { 
     $data['error'] = $this->upload->display_errors(); 

     $this->load->view('csvindex', $data); 
    } else { 
     $file_data = $this->upload->data(); 
     $file_path = './uploads/'.$file_data['file_name']; 

     if ($this->csvimport->get_array($file_path)) { 
      $csv_array = $this->csvimport->get_array($file_path); 
      foreach ($csv_array as $row) { 
       $insert_data = array(
        'firstname'=>$row['firstname'], 
        'lastname'=>$row['lastname'], 
        'phone'=>$row['phone'], 
        'email'=>$row['email'], 
       ); 
       $this->csv_model->insert_csv($insert_data); 
      } 
      $this->session->set_flashdata('success', 'Csv Data Imported Succesfully'); 
      redirect(base_url().'csv'); 
      //echo "<pre>"; print_r($insert_data); 
     } else 
      $data['error'] = "Error occured"; 
      $this->load->view('csvindex', $data); 
     } 

    } 

    public function chk_attachment() // callback validation for check the attachment extension 
    { 
     $file_type = array('.csv'); 
     if(!empty($_FILES['uploaded_file']['name'])) 
     { 
      $ext = strtolower(strrchr($_FILES['uploaded_file']['name'],".")); 
      if(in_array($ext,$ext_array)) 
      { 
       return true; 
      } 
      else 
      { 
       $this->form_validation->set_message('chk_attachment','Attachment allowed only csv'); 
       return false; 
      } 
     } 
     { 
      $this->form_validation->set_message('chk_attachment','image field is required'); 
       return false; 
     } 
    } 

回調函數是通過計算器用戶誰了同樣的問題解決了,但不知何故並沒有對我的工作建議。我有一個用戶表,我只想插入用戶使用上傳的CSV,但不知何故,它不允許我上傳CSV。

這是庫

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 


    /** 
    * CodeIgniter CSV Import Class 
    * 
    * This library will help import a CSV file into 
    * an associative array. 
    * 
    * This library treats the first row of a CSV file 
    * as a column header row. 
    * 
    * 
    * @package   CodeIgniter 
    * @subpackage  Libraries 
    * @category  Libraries 
    * @author   Brad Stinson 
    */ 

    class Csvimport { 

     private $filepath = ""; 
     private $handle = ""; 
     private $column_headers = ""; 

     /** 
     * Function that parses a CSV file and returns results 
     * as an array. 
     * 
     * @access public 
     * @param filepath  string Location of the CSV file 
     * @param column_headers array Alternate values that will be used for array keys instead of first line of CSV 
     * @param detect_line_endings boolean When true sets the php INI settings to allow script to detect line endings. Needed for CSV files created on Macs. 
     * @return array 
     */ 
     public function get_array($filepath='', $column_headers='', $detect_line_endings=FALSE) 
     { 
      // If true, auto detect row endings 
      if($detect_line_endings){ 
       ini_set("auto_detect_line_endings", TRUE); 
      } 

      // If file exists, set filepath 
      if(file_exists($filepath)) 
      { 
       $this->_set_filepath($filepath); 
      } 
      else 
      { 
       return FALSE;    
      } 

      // If column headers provided, set them 
      $this->_set_column_headers($column_headers); 

      // Open the CSV for reading 
      $this->_get_handle(); 

      $row = 0; 

      while (($data = fgetcsv($this->handle, 0, ",")) !== FALSE) 
      { 
       // If first row, parse for column_headers 
       if($row == 0) 
       { 
        // If column_headers already provided, use them 
        if($this->column_headers) 
        { 
         foreach ($this->column_headers as $key => $value) 
         { 
          $column_headers[$key] = trim($value); 
         } 
        } 
        else // Parse first row for column_headers to use 
        { 
         foreach ($data as $key => $value) 
         { 
          $column_headers[$key] = trim($value); 
         }     
        }   
       } 
       else 
       { 
        $new_row = $row - 1; // needed so that the returned array starts at 0 instead of 1 
        foreach($column_headers as $key => $value) // assumes there are as many columns as their are title columns 
        { 
         $result[$new_row][$value] = trim($data[$key]); 
        } 
       } 
       $row++; 
      } 

      $this->_close_csv(); 

      return $result; 
     } 

     /** 
     * Sets the filepath of a given CSV file 
     * 
     * @access private 
     * @param filepath string Location of the CSV file 
     * @return void 
     */ 
     private function _set_filepath($filepath) 
     { 
      $this->filepath = $filepath; 
     } 

     /** 
     * Sets the alternate column headers that will be used when creating the array 
     * 
     * @access private 
     * @param column_headers array Alternate column_headers that will be used instead of first line of CSV 
     * @return void 
     */ 
     private function _set_column_headers($column_headers='') 
     { 
      if(is_array($column_headers) && !empty($column_headers)) 
      { 
       $this->column_headers = $column_headers; 
      } 
     } 

     /** 
     * Opens the CSV file for parsing 
     * 
     * @access private 
     * @return void 
     */ 
     private function _get_handle() 
     { 
      $this->handle = fopen($this->filepath, "r"); 
     } 

     /** 
     * Closes the CSV file when complete 
     * 
     * @access private 
     * @return array 
     */ 
     private function _close_csv() 
     { 
      fclose($this->handle); 
     }  
    } 
+0

http://stackoverflow.com/questions/4731071/uploading-a-csv-into-codeigniter – Saty

+0

新文件上傳用戶指南這裏位置http://www.codeigniter.com/ userguide2 /庫/ file_uploading.htm l – user4419336

+0

@Saty我試過,但同樣的錯誤,我認爲除了那部分代碼之外有什麼問題 – Rajan

回答

2

添加$配置[ 'allowed_types'] = 'CSV';到你的$ config數組。

更多的幫助檢查https://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html

還通過路徑應用程序的文件去\ CONFIG \ mimes.php有關在文件上傳類型CSV陣列支持更清晰的認識

您可以更新這個數組,如果你真想......

'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel') 
+0

嗨,我保持這個,但沒有好它總是顯示一個錯誤也許我有其他部分的代碼有問題 – Rajan

+0

檢查文件使用Print_r($ _ FILES)的詳細信息;檢查文件類型是否屬於csv數組。 –

+0

我應該在哪裏做這個? – Rajan

相關問題