2012-07-05 16 views
5

Voglio pubblicare file csv sul mio controller usando API. Sto usando la libreria REST Codeigniter di phil sturgeon. Come implementare sul lato client l'importazione di CSV sul mio server REST. Voglio solo chiedere perché non riesco a trovare alcuna documentazione a riguardo.Codeigniter REST CSV import a mysql

+0

Non sei abbastanza chiaro con la domanda. Codeigniter REST è quasi uguale al normale Codeigniter ma la differenza è solo chiamando il metodo e la risposta. Nel normale codeign chiamiamo 'controller/function' dove in REST deve essere' resource/{resource_id}/child_resource/{child_resource_id} '. Non c'è alcun problema per l'invio delle intestazioni come file '.xls' – KuKu

+0

clealy e in parole semplici dicci cosa vuoi –

+0

@raheelshan Voglio postare file csv sul mio controller usando l'API lato client di jquery.post ed estrarre i dati del file csv e importarli in mysql. –

risposta

27

Ecco un modo semplice per farlo. Non so cosa facciano le persone ma io uso questo

Questa è la mia libreria di lettori csv, salvala nella cartella delle librerie come csvreader.php.

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

class CSVReader { 

    var $fields;   /** columns names retrieved after parsing */ 
    var $separator = ';'; /** separator used to explode each line */ 
    var $enclosure = '"'; /** enclosure used to decorate each field */ 

    var $max_row_size = 4096; /** maximum row size to be used for decoding */ 

    function parse_file($p_Filepath) 
    { 
     $file   = fopen($p_Filepath, 'r'); 
     $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); 
     $keys_values  = explode(',',$this->fields[0]); 

     $content   = array(); 
     $keys   = $this->escape_string($keys_values); 

     $i = 1; 
     while(($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) 
     { 
      if($row != null) { // skip empty lines 
       $values   = explode(',',$row[0]); 
       if(count($keys) == count($values)){ 
        $arr   = array(); 
        $new_values = array(); 
        $new_values = $this->escape_string($values); 
        for($j=0;$j<count($keys);$j++){ 
         if($keys[$j] != ""){ 
          $arr[$keys[$j]] = $new_values[$j]; 
         } 
        } 
        $content[$i] = $arr; 
        $i++; 
       } 
      } 
     } 
     fclose($file); 
     return $content; 
    } 

    function escape_string($data) 
    { 
     $result = array(); 
     foreach($data as $row){ 
      $result[] = str_replace('"', '',$row); 
     } 
     return $result; 
    } 
} 
?> 

e il metodo

function readExcel() 
{ 
     $this->load->library('csvreader'); 
     $result = $this->csvreader->parse_file('Test.csv');//path to csv file 

     $data['csvData'] = $result; 
     $this->load->view('view_csv', $data); 
} 

controller e questo è vista

<table cellpadding="0" cellspacing="0" width="100%"> 
    <tr> 
      <td width = "10%">ID</td> 
      <td width = "20%">NAME</td> 
      <td width = "20%">SHORT DESCRIPTION</td> 
      <td width = "30%">LONG DESCRIPTION</td> 
      <td width = "10%">STATUS</td> 
      <td width = "10%">PARENTID</td> 
    </tr> 

      <?php foreach($csvData as $field){?> 
       <tr> 
        <td><?php echo $field['id']?></td> 
        <td><?php echo $field['name']?></td> 
        <td><?php echo $field['shortdesc']?></td> 
        <td><?php echo $field['longdesc']?></td> 
        <td><?php echo $field['status']?></td> 
        <td><?php echo $field['parentid']?></td> 
       </tr> 
      <?php }?> 
</table> 

Nota: Questo sarà solo leggere un file che esiste sul server. Se è necessario caricare il file, utilizzare File Upload Class per caricare il file e salvarlo in una posizione del server, quindi indicare il percorso del file localizzato nel metodo parse_file. E tutto funzionerà bene.

+0

Grazie ci proverò ho solo bisogno dei dati per estrarlo e passarlo al modello. –

+0

è possibile passare l'array restituito al modello –

+0

come se i miei campi csv senza $ recinzione "" restituisca errore se inserisco $ enclosure = ''; –