2012-07-05 12 views
5

Quiero publicar un archivo csv en mi controlador usando API.Estoy usando Codeigniter REST Library por phil sturgeon. Cómo implementar en el lado del cliente la importación de CSV a mi servidor REST. Solo quiero preguntar porque no puedo encontrar ninguna documentación al respecto.Codeigniter REST CSV import to mysql

+0

No tiene suficiente claridad con la pregunta. Codeigniter REST es casi lo mismo que Codeigniter normal, pero la diferencia es simplemente llamar al método y la respuesta. En codeigniter normal llamamos a 'controller/function' donde en REST debe ser 'resource/{resource_id}/child_resource/{child_resource_id}'. no creo que haya ningún problema para enviar los encabezados como archivo '.xls' – KuKu

+0

clemente y en palabras simples díganos lo que quiere –

+0

@raheelshan Quiero publicar un archivo csv en mi controlador usando la API del lado del cliente por jquery.post y extrae los datos del archivo csv e importa a mysql. –

Respuesta

27

Aquí hay una manera fácil de hacerlo. No sé lo que hace la gente pero utilizo esto

Esta es mi biblioteca de lectores csv, guárdela en la carpeta de bibliotecas como 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; 
    } 
} 
?> 

y el método controlador

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

Y esto es 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: Esto sólo va a leer un archivo que existe en el servidor. Si es necesario cargar el archivo, use File Upload Class para cargar el archivo y guárdelo en alguna ubicación en su servidor, luego proporcione la ruta del archivo ubicado en el método parse_file. Y todo funcionará bien.

+0

Gracias, lo intentaré. Solo necesito los datos para extraerlos y pasarlos al modelo. –

+0

puede pasar la matriz devuelta al modelo –

+0

cómo si mis campos csv sin $ enclosure '"'? Devuelven error si puse $ enclosure = ''; –