Foros del Web » Programando para Internet » PHP »

Problema exportación en csv

Estas en el tema de Problema exportación en csv en el foro de PHP en Foros del Web. Hola a todos! Mi problema es que estoy creando un icono que permita exportar los datos que vienen de una base de datos a un ...
  #1 (permalink)  
Antiguo 17/05/2013, 04:26
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Problema exportación en csv

Hola a todos!


Mi problema es que estoy creando un icono que permita exportar los datos que vienen de una base de datos a un archivo csv. El codigo que utilizo para exportar es este:

Código PHP:
header("Cache-Control: public");

header('Content-Type: text/csv; charset=utf-8');


header('Content-Disposition: attachment; filename=Usuarios.csv');


mysql_connect("localhost","root","");


mysql_select_db("dispal"); 
$query="SELECT *FROM recursoshumanos";
$q=mysql_query($query) or die("Error de consulta");


echo 
"nombre;email;telefono;adjunto;apellidos;carta;puesto;fecha de envio\n";


while(
$r=mysql_fetch_array($q)){

    echo 
$r[0].";".$r[1].";".$r[2].";/dispal/components/com_foxcontact/uploads/".$r[3].";".$r[4].";".$r[5].";".$r[6].";".$r[7]."\n";
    


Esto funciona perfectamente excepto por dos cosas, puede que más que no haya considerado.

Una es si en el $[5] , al ser una carta de presentacíon que puede ser batante extensa, hay algún enter, ya que el csv lo interpreta como cambio de fila.

La otra es si en el texto hay un ; que hace que pase a la siguiente celda.

¿Hay alguna manera de tratar estas situaciones?

Gracias a todos desde ya.
  #2 (permalink)  
Antiguo 17/05/2013, 07:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema exportación en csv

Para el ";" solo tienes que agregar delimitadores de texto... claro que si en algun caso tienes dobles comillas dentro del texto tambien te dará problemas....

str_replace("\"","'",$r[X]) retornará las dobles comillas conveertidas en apostrofes

Código PHP:
Ver original
  1. echo "\"".$r[0]."\";\"".$r[1]."\";\"".$r[2]."\";\"/dispal/components/com_foxcontact/uploads/".$r[3]."\";\"".$r[4]."\";\"".$r[5]."\";\"".$r[6]."\";\"".$r[7]."\"\n";

Si alguno de los campos es numerico puedes omitirlos...

En cuanto a la carta de presentación deberias substituir el salto de linea por otro caracter...

str_replace("\n","//",$r[5]) por ejemplo....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 22/05/2013, 02:11
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema exportación en csv

Cita:
Iniciado por quimfv Ver Mensaje
Para el ";" solo tienes que agregar delimitadores de texto... claro que si en algun caso tienes dobles comillas dentro del texto tambien te dará problemas....

str_replace("\"","'",$r[X]) retornará las dobles comillas conveertidas en apostrofes

Código PHP:
Ver original
  1. echo "\"".$r[0]."\";\"".$r[1]."\";\"".$r[2]."\";\"/dispal/components/com_foxcontact/uploads/".$r[3]."\";\"".$r[4]."\";\"".$r[5]."\";\"".$r[6]."\";\"".$r[7]."\"\n";

Si alguno de los campos es numerico puedes omitirlos...

En cuanto a la carta de presentación deberias substituir el salto de linea por otro caracter...

str_replace("\n","//",$r[5]) por ejemplo....



En serio, mil gracias. Perdon por la tardanza en contestar, tuvimos un pequeño puente y no me he vuelto a poner con el trabajo hasta hoy.

La verdad es que lo de sustituir el /n parecía muy lógico, pero como cuando utilizaba un echo no realizaba los saltos de linea, tuve que añadirle la función nl2br para que el navegador me lo interpretara, por eso no caia en la cuenta de que pudiera ser por eso. Cosas de novato, supongo.

Lo de usar delimitadores en el csv no lo hubiera descubierto en la vida, ya que ni sabía de su existencia. Me mandaron importar a csv como un extra de la aplicación y no había hecho algo así nunca. Tuve que ir a la aventura.

Etiquetas: csv, mysql, select, sql, usuarios
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 06:20.