Foros del Web » Programando para Internet » PHP »

funcion para crear un CSV desde un query

Estas en el tema de funcion para crear un CSV desde un query en el foro de PHP en Foros del Web. hola, como puedo generar un archivo csv desde una consulta a la base datos mysql? gracias......
  #1 (permalink)  
Antiguo 12/03/2007, 10:26
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
Pregunta funcion para crear un CSV desde un query

hola, como puedo generar un archivo csv desde una consulta a la base datos mysql?

gracias...
__________________
sEIK! -Chile-
Analista Programador.
  #2 (permalink)  
Antiguo 12/03/2007, 10:39
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: funcion para crear un CSV desde un query

Podrias utilizar una rutina parecida a esta:

Código PHP:
<?php

$selTotal 
"SELECT * FROM api_orders_history";
    
$selTotalExec mysql_query($selTotal$catalogoSTD) or die( mysql_error() );
    
    
$elCSV 'No. PEDIDO, CODIGO CLIENTE, CODIGO PRODUCTO, CANTIDAD';
    
$elCSV .= "\r\n";
        
$csvName "archivos/pedidos"date('Ymd') .".csv";
$fileHandle fopen($csvName'w') or die('Can\'t create .csv file, try again later.');

    while( 
$elTotal mysql_fetch_assoc($selTotalExec) ){
    
       
// echo($elTotal['company_code']);exit;
    
    
$elCSV .= $elTotal['order_code'].",".$elTotal['company_code'].",".$elTotal['product_code'].",".$elTotal['product_quantity']." \n ";
    
    
// create and write file
        
        
fwrite($fileHandle$elCSV);
        
        
        
    
    
//echo($elTotal['id']."<br />");
     
}

fclose($fileHandle);
    
    
//}
    
    // push file to browser
        
header('Content-Type: application/x-octet-stream');
        
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        
header('Last-Modified: '.date('D, d M Y H:i:s'));
        
header('Content-Disposition: attachment; filename="Reporte_de_pedidos'date('Ymd')  .'.csv"');
        
header("Content-Length: ".filesize($csvName));
        
// echo $csvContent; 

        // delete file
        // unlink($csvName);
    
    
echo($elCSV);



?>

http://php.net/fopen


un saludo.
__________________
http://dev.wsnetcorp.com

Última edición por ebe; 12/03/2007 a las 10:55 Razón: put out of while fopen and fclose functions.
  #3 (permalink)  
Antiguo 12/03/2007, 12:08
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
De acuerdo Re: funcion para crear un CSV desde un query

no entendi! xD! ajjajajaaj

es que ando medio lento...

algo mas comentado y simple por favor :D

Saludos,
__________________
sEIK! -Chile-
Analista Programador.
  #4 (permalink)  
Antiguo 12/03/2007, 13:03
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
Re: funcion para crear un CSV desde un query

manifiestate javista ! ayuda!
__________________
sEIK! -Chile-
Analista Programador.
  #5 (permalink)  
Antiguo 12/03/2007, 13:15
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 2 meses
Puntos: 67
Re: funcion para crear un CSV desde un query

Jajjajjvjajaa, ok, me manifesto. Ya que el anterior forista te dió un codigo muy bueno, entonces no queda otra más que un consejo, si quieres aprender a usar funciones dificiles empieza por las simples, nadie da un paso de frente desde el primer escalón hasta el quinto. Ve con calma si estás aprendiendo, pero si es algo urgente, entonces si que tienes problemas.
  #6 (permalink)  
Antiguo 12/03/2007, 13:17
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
Re: funcion para crear un CSV desde un query

jjajajajaja si tan novato no soy... es que bueno, hoy no es un buen dia para la programacion... y si me referia ayuda no era a una metafora filosofica del conocimiento hahahahahah me referiaa codigos!!

gracias :D

XD
__________________
sEIK! -Chile-
Analista Programador.
  #7 (permalink)  
Antiguo 12/03/2007, 13:20
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 2 meses
Puntos: 67
Re: funcion para crear un CSV desde un query

Entonces acuéstate temprano hoy mañana levantate temprano y ponte a trabajar.
  #8 (permalink)  
Antiguo 12/03/2007, 13:32
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: funcion para crear un CSV desde un query

<?php

$selTotal = "SELECT * FROM api_orders_history"; // guardo en una variable sentencia sql a ejecutar


$selTotalExec = mysql_query($selTotal, $catalogoSTD) or die( mysql_error() ); // uso mysql_query() para ejecutar sentencia SQL guardada en #selTotal

$elCSV = 'No. PEDIDO, CODIGO CLIENTE, CODIGO PRODUCTO, CANTIDAD'; // creo las cabeceras para mi archivo CSV (como te das cuenta separadas por comas, y notar que este archivo CSV tendra 4 valores por linea

$elCSV .= "\r\n"; // esto si creo que sabes que hacen?????

$csvName = "archivos/pedidos". date('Ymd') .".csv";// creo el nombre para mi archivo CSV, utilizo la funcion date para para que alnombre se le adjunte el anio el mes y el dia.
$fileHandle = fopen($csvName, 'w') or die('Can\'t create .csv file, try again later.'); // uso fopen para abrir archivo en el que voy a escribir.. si tienes duda sobre esta funcion mira le referencia que te deje arriba.

while( $elTotal = mysql_fetch_assoc($selTotalExec) ){ // ejecuto un while con mi resultado de mi query a la base de datos.

// echo($elTotal['company_code']);exit; // esto es un comentario

$elCSV .= $elTotal['order_code'].",".$elTotal['company_code'].",".$elTotal['product_code'].",".$elTotal['product_quantity']." \n ";// aqui es cuanto empiezo a guardar el contenido de los campos de mi base de datos en una variable de string de PHP

// create and write file

fwrite($fileHandle, $elCSV); // funcion para escribir mi string al archivo previamente abierto con fopen.




//echo($elTotal['id']."<br />");
}

fclose($fileHandle); // cierro el archivo previamente abierto

//}

// push file to browser
// ESTAR CABECERAS (QUE SE MANEJAN CON LA FUNCION HEADER DE PHP,) SON PARA DECIRLE EL TIPO DE ARCHIVO QUE ESTAMOS GENERANDO (EN ESTE CASO PARA CREAR UN ARCHIVO DE CSV DE EXCEL) , PARA QUE NO CACHEE EL CONTENIDO, FECHA DE ULTIMA MODIFICACION, COMO SE MANEJARA EL CONTENIDO CREADO. SI INLINE (QUE LO VERA DIRECTAMENTE EN EL NAVEGADOR) O ATTACHMENT (QUE DESPLEGARA LA VENTANA DE DESCARGAR DEL NAVEGADOR), TAMANIO DEL ARCHIVO Y POR ULTIMO DAMOS UN ECHO PARA QUE EL CONTENIDO SEA AGREGADO.
header('Content-Type: application/x-octet-stream'); // ARCHIVO DE EXCEL
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="Reporte_de_pedidos'. date('Ymd') .'.csv"');
header("Content-Length: ".filesize($csvName));
// echo $csvContent;

// delete file
// unlink($csvName);

echo($elCSV);



?>


Si aun con los comentario tienes dudas sobre las funciones de PHP puedes hacer lo siguiente:

el la barra de direcciones de tu navegador pon php.net/funcionquenosabes que hace, o sea si no sabes como utilizar fopen pones asi:

http://www.php.net/fopen

y te desplegara la descripcion de dicha funcion.

dudas??

un saludo
__________________
http://dev.wsnetcorp.com
  #9 (permalink)  
Antiguo 12/03/2007, 13:35
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: funcion para crear un CSV desde un query

perdon, asi lo veras mejor:

Código PHP:
<?php

$selTotal 
"SELECT * FROM api_orders_history"// guardo en una variable sentencia sql a ejecutar


$selTotalExec mysql_query($selTotal$catalogoSTD) or die( mysql_error() ); // uso mysql_query() para ejecutar sentencia SQL guardada en #selTotal

$elCSV 'No. PEDIDO, CODIGO CLIENTE, CODIGO PRODUCTO, CANTIDAD'// creo las cabeceras para mi archivo CSV (como te das cuenta separadas por comas, y notar que este archivo CSV tendra 4 valores por linea

$elCSV .= "\r\n"// esto si creo que sabes que hacen?????

$csvName "archivos/pedidos"date('Ymd') .".csv";// creo el nombre para mi archivo CSV, utilizo la funcion date para para que alnombre se le adjunte el anio el mes y el dia.
$fileHandle fopen($csvName'w') or die('Can\'t create .csv file, try again later.'); // uso fopen para abrir archivo en el que voy a escribir.. si tienes duda sobre esta funcion mira le referencia que te deje arriba.

while( $elTotal mysql_fetch_assoc($selTotalExec) ){ // ejecuto un while con mi resultado de mi query a la base de datos.

// echo($elTotal['company_code']);exit; // esto es un comentario

$elCSV .= $elTotal['order_code'].",".$elTotal['company_code'].",".$elTotal['product_code'].",".$elTotal['product_quantity']." \n ";// aqui es cuanto empiezo a guardar el contenido de los campos de mi base de datos en una variable de string de PHP

// create and write file

fwrite($fileHandle$elCSV); // funcion para escribir mi string al archivo previamente abierto con fopen.




//echo($elTotal['id']."<br />");
}

fclose($fileHandle); // cierro el archivo previamente abierto

//}

// push file to browser
// ESTAR CABECERAS (QUE SE MANEJAN CON LA FUNCION HEADER DE PHP,) SON PARA DECIRLE EL TIPO DE ARCHIVO QUE ESTAMOS GENERANDO (EN ESTE CASO PARA CREAR UN ARCHIVO DE CSV DE EXCEL) , PARA QUE NO CACHEE EL CONTENIDO, FECHA DE ULTIMA MODIFICACION, COMO SE MANEJARA EL CONTENIDO CREADO. SI INLINE (QUE LO VERA DIRECTAMENTE EN EL NAVEGADOR) O ATTACHMENT (QUE DESPLEGARA LA VENTANA DE DESCARGAR DEL NAVEGADOR), TAMANIO DEL ARCHIVO Y POR ULTIMO DAMOS UN ECHO PARA QUE EL CONTENIDO SEA AGREGADO.
header('Content-Type: application/x-octet-stream'); // ARCHIVO DE EXCEL
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="Reporte_de_pedidos'date('Ymd') .'.csv"');
header("Content-Length: ".filesize($csvName));
// echo $csvContent;

// delete file
// unlink($csvName);

echo($elCSV);



?>
__________________
http://dev.wsnetcorp.com
  #10 (permalink)  
Antiguo 12/03/2007, 13:37
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
De acuerdo Re: funcion para crear un CSV desde un query

gracias, mira lo intentare... cualkier cosa estare en contacto...

te pasaste ;)

__________________
sEIK! -Chile-
Analista Programador.
  #11 (permalink)  
Antiguo 13/03/2007, 15:37
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
De acuerdo Re: funcion para crear un CSV desde un query

logre generar el archivo y todo genial menos que me escribe al lote los datos...
hechale un ojo porfavor k no que es xD! me imagino k el orden pero no he dado con el adecuado

Código PHP:
//GENERAMOS RESPALDO DE DATOS ANTERIORES EN BASE DATOS
$result=mysql_query("select * from historial_alumnos ");
$elCSV 'RUT, NOMBRE, FECHA TITULO, AÑO TITULO'// creo las cabeceras para mi archivo CSV (como te das cuenta separadas por comas, y notar que este archivo CSV tendra 4 valores por linea 
$elCSV .= "\r\n"// esto si creo que sabes que hacen????? 
$csvName "/home/areas/of-col/public_www/colocaciones/CSV/csv_respaldo/csv_respaldo"date('Ymd') .".csv";// creo el nombre para mi archivo CSV, utilizo la funcion date para para que alnombre se le adjunte el anio el mes y el dia. 
$fileHandle fopen($csvName'w') or die('Can\'t create .csv file, try again later.'); // uso fopen para abrir archivo en el que voy a escribir.. si tienes duda sobre esta funcion mira le referencia que te deje arriba. 
while( $elTotal mysql_fetch_array($result) ){ // ejecuto un while con mi resultado de mi query a la base de datos. 
// echo($elTotal['company_code']);exit; // esto es un comentario 
$elCSV .= $elTotal['historial_rut'].";".$elTotal['historial_nombre'].";".$elTotal['historial_fecha_titulo'].";".$elTotal['historial_anio_titulo']."\n";// aqui es cuanto empiezo a guardar el contenido de los campos de mi base de datos en una variable de string de PHP 
// create and write file 
fwrite($fileHandle$elCSV); // funcion para escribir mi string al archivo previamente abierto con fopen. 
//echo($elTotal['id']."<br />"); 

fclose($fileHandle); // cierro el archivo previamente abierto 
//} 
// push file to browser 
// ESTAR CABECERAS (QUE SE MANEJAN CON LA FUNCION HEADER DE PHP,) SON PARA DECIRLE EL TIPO DE ARCHIVO QUE ESTAMOS GENERANDO (EN ESTE CASO PARA CREAR UN ARCHIVO DE CSV DE EXCEL) , PARA QUE NO CACHEE EL CONTENIDO, FECHA DE ULTIMA MODIFICACION, COMO SE MANEJARA EL CONTENIDO CREADO. SI INLINE (QUE LO VERA DIRECTAMENTE EN EL NAVEGADOR) O ATTACHMENT (QUE DESPLEGARA LA VENTANA DE DESCARGAR DEL NAVEGADOR), TAMANIO DEL ARCHIVO Y POR ULTIMO DAMOS UN ECHO PARA QUE EL CONTENIDO SEA AGREGADO. 
header('Content-Type: application/x-octet-stream'); // ARCHIVO DE EXCEL 
header('Last-Modified: '.date('D, d M Y H:i:s')); 
header('Content-Disposition: attachment; filename="Historial_Titulados_DII'date('Ymd') .'.csv"'); 
header("Content-Length: ".filesize($csvName)); 
// echo $csvContent; 
// delete file 
// unlink($csvName); 
echo($elCSV); 
Saludos,
__________________
sEIK! -Chile-
Analista Programador.
  #12 (permalink)  
Antiguo 13/03/2007, 15:43
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
Re: funcion para crear un CSV desde un query

asi me kedaron los datos xD!

RUT, NOMBRE, FECHA TITULO, AÑO TITULO
15893074-9 jonathan 10-10-2007 2007
RUT, NOMBRE, FECHA TITULO, AÑO TITULO
15893074-9 jonathan 10-10-2007 2007
11111111-1 pia 11/11/1111 1111


YA SOLUCIONE ESTO!!!! ERA CAMBIAR DE LUGAR } DE TERMINACION DEL CICLO WHILE


AHORA EL PROBLEMA QUE DETECTO ES QUE LOS DATOS QUEDAN EFECTIVAMENTE 1,2,3,4 PERO TODOS EN LA MISMA COLUMNA EL TEMA DE LAS FILAS ESTA CORRECTO ... SI HABRO EL ARCHIVO CON EXCEL TODOS LOS DATOS QUEDAN EL LA COLUMNA "A"COMO PUEDO HACER QUE OCUPE CADA DATO UNA COLUMNA DIFERENTE??
__________________
sEIK! -Chile-
Analista Programador.

Última edición por seik!; 13/03/2007 a las 15:51
  #13 (permalink)  
Antiguo 13/03/2007, 15:48
Avatar de DarkXNightmare  
Fecha de Ingreso: agosto-2005
Ubicación: Somewhere Over The Rainbo
Mensajes: 181
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: funcion para crear un CSV desde un query

Mira lo que podemos encontrar si buscamos atentamente en PHP:
http://www.php.net/manual/es/function.fputcsv.php
http://www.php.net/manual/es/function.fgetcsv.php

Es más facil de lo que creía xD!

Saludos.
__________________
Cambiando mi Web... sean pacientes :P
  #14 (permalink)  
Antiguo 13/03/2007, 16:07
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años
Puntos: 6
Pregunta Re: funcion para crear un CSV desde un query

no entiendo :D!



algo mas explicativo plz :D

si te fijas ariba hago lo k dice el manual(creo)... pero no funcion =(

Espero tus comentarios... mañana por la mañana lo reviso
__________________
sEIK! -Chile-
Analista Programador.
  #15 (permalink)  
Antiguo 09/08/2007, 17:01
Avatar de Sarai  
Fecha de Ingreso: enero-2003
Ubicación: Alli donde Dios ha coloca
Mensajes: 91
Antigüedad: 21 años, 3 meses
Puntos: 0
Re: funcion para crear un CSV desde un query

Excelente ejemplo gracias.
Justo lo que necesitaba, al menos la mitad.

Existe la forma de formatear cada campo de mi query en una celda de excel.

Gracias, un saludote superforo.
__________________
*** La ciencia lo es ÉL ***
  #16 (permalink)  
Antiguo 07/09/2007, 05:48
 
Fecha de Ingreso: marzo-2002
Mensajes: 86
Antigüedad: 22 años, 1 mes
Puntos: 0
Re: funcion para crear un CSV desde un query

ME PASA LO MISMO QUE A TI. Alguien tiene una solucion para que no queden en la misma fila?

Gracias.


AHORA EL PROBLEMA QUE DETECTO ES QUE LOS DATOS QUEDAN EFECTIVAMENTE 1,2,3,4 PERO TODOS EN LA MISMA COLUMNA EL TEMA DE LAS FILAS ESTA CORRECTO ... SI HABRO EL ARCHIVO CON EXCEL TODOS LOS DATOS QUEDAN EL LA COLUMNA "A"COMO PUEDO HACER QUE OCUPE CADA DATO UNA COLUMNA DIFERENTE??
  #17 (permalink)  
Antiguo 07/09/2007, 10:14
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: funcion para crear un CSV desde un query

para no enredarse mas podrian utilizar una clase para tal resultado.

http://www.phpclasses.org/

ese es una opción, busquen ahi y encontrarán aún mas.

un saludo
__________________
http://dev.wsnetcorp.com
  #18 (permalink)  
Antiguo 10/09/2007, 15:24
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: funcion para crear un CSV desde un query

Aqu hay un hílo mas simple dentro del foro.

link

un saludo.
__________________
http://dev.wsnetcorp.com
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 21:44.