Foros del Web » Programando para Internet » PHP »

Problema importar csv

Estas en el tema de Problema importar csv en el foro de PHP en Foros del Web. Buenas gente que tal, estoy teniendo un problema con un .csv. Es un .csv para importarlo al outlook y lo creo a partir de las ...
  #1 (permalink)  
Antiguo 21/09/2010, 04:06
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema importar csv

Buenas gente que tal, estoy teniendo un problema con un .csv.
Es un .csv para importarlo al outlook y lo creo a partir de las direcciones de correo que tengo guardadas en una tabla, el problema esta que lo creo, lo descargo y al intentarlo importarlo me da error, en cambio si el archivo descargado primero lo habro con el Wordpad y lo guardo y luego lo intento importar me lo hace sin ningun problema.
Lo peor es que en local me funciona perfectamente y cuando lo subo al servidor me pasa lo que os he comentado, asi que no se si puede ser algo de permisos o algo raro, os dejo el codigo por si me podeis echar una mano, garcias

Código PHP:
        $selTotal "SELECT * FROM usuario where tipo='0' and Activar='1'";
    
$res=mysql_query($selTotal);    
        
    
$csvName "libreta.csv";
    
$fileHandle fopen($csvName,'w+');

    
$elCSV ='"Title","Nombre","Segundo nombre","Apellidos","Suffix","Organización","Department","Puesto","Calle del trabajo","Calle del trabajo 2","Calle del trabajo 3","Ciudad de trabajo","Provincia o estado de trabajo","Código postal del trabajo","País de trabajo","Home Street","Home Street 2","Home Street 3","Home City","Home State","Home Postal Code","Home Country","Otra calle","Otra calle 2","Otra calle 3","Otra ciudad","Otra provincia o estado","Otro código postal","Otro país","Assistant\'s Phone","Business Fax","Teléfono del trabajo","Business Phone 2","Devolución de llamada","Car Phone","Número de centralita de la organización","Home Fax","Particular","Home Phone 2","ISDN","Mobile Phone","Otro fax","Otro teléfono","Pager","Teléfono principal","Radioteléfono","Número de teletipo","Télex","Account","Aficiones","Anniversary","Apartado postal de la dirección del trabajo","Apartado postal de la dirección personal","Assistant\'s Name","Birthday","Categorías","Confidencialidad","E-mail Address","E-mail Type","Nombre de pantalla de correo electrónico","Dirección de correo electrónico 2","Tipo de correo electrónico 2","Nombre de pantalla de correo electrónico 2","Dirección del correo electrónico 3","Tipo de correo electrónico 3","Nombre de pantalla de correo electrónico 3","Facturación","Género","Government ID Number","Hijos","Initials","Internet Free Busy","Keywords","Kilometraje","Language","Location","Nombre del director","Notes","Office Location","Organizational ID Number","Otro apartado postal","Página Web","Prioridad","Private","Profesión","Remitido por","Servidor de directorio","Spouse","Usuario 1","Usuario 2","Usuario 3","Usuario 4"';

    while( 
$elTotal mysql_fetch_array($res) ){

    
$elCSV .= '
'
;
    
$elCSV .=','.$elTotal['nombre'].',,'.$elTotal['apellidos'].',,,,,,,,,,,,'.$elTotal['direccion'].',,,'.$elTotal['poblacion'].',,'.$elTotal['cpostal'].','.$elTotal['pais'].',,,,,,,,,,,,,,,,,,,,,,,,,,,,,0/0/00,,,,0/0/00,,Normal,'.$elTotal['email'].',SMTP,'.$elTotal['email'].',,,,,,,,Sin especificar,,,,,,,,,,,,,,,,Normal,Falso,,,,';
   }
   
    
fwrite($fileHandle,$elCSV);
    
fclose($fileHandle);
    
 
        

    
header("Pragma: public");
    
header("Expires: 0"); 
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    
header("Cache-Control: private",false);
    
header('Content-Type: application/csv; utf-8');
    
header("Content-Disposition: attachment; filename=libreta_direcciones.csv");
    
header("Content-Transfer-Encoding: binary"); 
    
header("Content-Length: ".filesize($elCSV)); 
    
readfile('libreta.csv');    
    exit(); 
  #2 (permalink)  
Antiguo 21/09/2010, 06:14
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema importar csv

Mirando el archivo que genera Outlook veo que utiliza ";" en la generación de los csv (si tu versión es distinta lo cambias). Hice un par de modificaciones a tu código y en principio puede importar sin problemas, espero que te sirva. Para el ejemplo he utilizado una tabla de pruebas como esta:

Código:
CREATE TABLE `temp` (

  `Title` varchar(32) NOT NULL,

  `Email` varchar(32) default NULL,

  PRIMARY KEY  (`Title`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `temp`(`Title`,`Email`) values ('Miss','[email protected]'),('Mr','[email protected]'),('Mrs','[email protected]');
El código PHP quedaría así:

Código PHP:
        $selTotal "SELECT * FROM temp";
        
$res mysql_query($selTotal);
        
        
$csvName "libreta.csv";
        
$fileHandle fopen($csvName,'w+');
        
        
$elCSV "Title;";
        
$elCSV .= "Email"//El último campo no lleva ;
        
$elCSV .= "\n";
        
        while( 
$elTotal mysql_fetch_assoc($res) ){
        
            
$elCSV .= "{$elTotal['Title']};";
            
$elCSV .= "{$elTotal['Email']}"//El último campo no lleva ;
            
$elCSV .= "\n";
        }
        
        
fwrite($fileHandle,$elCSV);
        
fclose($fileHandle);
        
        
        
header("Pragma: public");
        
header("Expires: 0");
        
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
header("Cache-Control: private",false);
        
header('Content-Type: application/csv; utf-8');
        
header("Content-Disposition: attachment; filename=libreta.csv");
        
header("Content-Transfer-Encoding: binary");
        
//  header("Content-Length: ".filesize($elCSV));
        
readfile('libreta.csv');
        exit(); 
Espero que te sea útil, 1 saludo;
  #3 (permalink)  
Antiguo 26/10/2010, 12:34
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema importar csv

Hola, yo tengo un problema parecido he creado un código en php para importar unos archivos csv pero el problema que tengo es que el csv que me genera el programa no esta en UTF-8 u cuando los importo los campos que tienen "ñ" no los importa bien.

¿alguien sabría que función tengo que emplear en PHP para cambiar el formato?

Gracias por adelantado.

Os dejo el código de importación de un csv:

Código PHP:
<?php
/* Manera de insertar csv */

function Conectarse()
{
       if (!(
$link=mysql_connect("localhost","plazau","plazap"))){
           echo 
"Error conectando a la base de datos.";
           exit();
       }
        if (!
mysql_select_db("plazab",$link)) {
            echo 
"Error seleccionando la base de datos.";
           exit();
       }

       return 
$link;
}



ini_set ('auto_detect_line_endings','1');

$row 1;
$row_country 1;
;
//$row_users = 1;


$enlace=Conectarse();
$enlace_country=Conectarse();
//$enlace_users=Conectarse();

/*$consulta_users = "TRUNCATE TABLE jos_properties_users";
$resultado_users = mysql_query($consulta_users,$enlace_users) or die("Error $consulta_users <br>MySQL dice: ".mysql_error());*/

$consulta_country "TRUNCATE TABLE jos_properties_country";
$resultado_country mysql_query($consulta_country,$enlace_country) or die("Error $consulta_country <br>MySQL dice: ".mysql_error());


/* Insertar CSV Country */

$handle_country fopen("codigo_php/jos_properties_country.csv""r");


while ((
$data_country fgetcsv($handle_country,","";")) !== FALSE) {

        
$num_country count($data_country);
        
$row_country++;

        
$cadena_country "insert into jos_properties_country values(";
             for (
$c_country=0$c_country $num_country-1$c_country++) {

                   if (
$c_country==($num_country-2))
                          
$cadena_country $cadena_country."'".$data_country[$c_country] . "'";

                    else
                          
$cadena_country $cadena_country."'".$data_country[$c_country] . "',";
                }

        
$cadena_country $cadena_country.");";
    
        
$result_country=mysql_query($cadena_country$enlace_country) or die("Error $cadena_country <br>MySQL dice: ".mysql_error());

        
$contador_country=$contador_country+1;
    
    }

mysql_close($enlace_country);
fclose($handle_country);

Etiquetas: csv
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:28.