2016-04-12 7 views
1

Hier ist die Bibliothek, die ich bin mitCant Upload von Daten über CSV-Datenbank in codeigniter

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); 
}  

}

Hier ist der Controller,

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

    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'csv'; 
    $config['max_size'] = '10000'; 

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


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

     $this->load->view('tenant/import', $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(

        'first_name'=>$row['first_name'], 
        'last_name'=>$row['last_name'], 
        'postal_address'=>$row['postal_address'], 
        'company_name'=>$row['company_name'], 
        'company_url'=>$row['company_url'], 
        'office_hours'=>$row['office_hours'], 
        'industry'=>$row['industry'], 
        'contact_type'=>$row['contact_type'], 
        'status'=>$row['status'], 
       ); 
       $this->account_model->insert($insert_data); 
      } 
      $this->session->set_flashdata('success', 'Csv Data Imported Succesfully'); 
      redirect(base_url('tenant/import')); 

     } else 
      $data['error'] = "Error occured"; 


     } 




    } 

wenn ich eine print_r auf $ tun Daten es würde drucken, dass ein Fehler aufgetreten ist, was bedeutet, dass es automatisch zu meinem anderen Zustand geht, die Dateien hochgeladen werden, um Ordner hochzuladen, so bedeutet es, dass das Problem mit der zweiten if-Anweisung ist, kann mir jemand helfen zu erkennen rmine, wo ich bei der zweiten if-Anweisung falsch gelaufen bin?

+0

was ist der Fehler? –

+0

Es wird keine Fehlermeldung angezeigt, der Teil meiner if-Anweisung zeigt an, dass ein Fehler aufgetreten ist, wenn der Upload fehlgeschlagen ist. – Beldion

+0

Verweisen Sie auf diesen Link und versuchen Sie, den Fehler zu reproduzieren: http://php.net/manual/en/features.file -upload.errors.php –

Antwort

0

Änderung dieser:

$file_path = $file_data['full_path'];