Foros del Web » Programando para Internet » PHP »

Exportar de php una tabla de mysql a un csv, y de este importarlo a una tabla mysql

Estas en el tema de Exportar de php una tabla de mysql a un csv, y de este importarlo a una tabla mysql en el foro de PHP en Foros del Web. Hola chicos, hace ya un tiempo que ando intentando hallar la solucion , pero nada, espero que me puedan ayudar, desde ya gracias saludos...
  #1 (permalink)  
Antiguo 24/08/2004, 06:55
 
Fecha de Ingreso: junio-2004
Mensajes: 29
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación Exportar de php una tabla de mysql a un csv, y de este importarlo a una tabla mysql

Hola chicos, hace ya un tiempo que ando intentando hallar la solucion , pero nada, espero que me puedan ayudar, desde ya gracias

saludos
  #2 (permalink)  
Antiguo 24/08/2004, 09:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Necesitas usar PHP? .. o sólo hacer el proceso? (en tal caso existen GUI's para Mysql para tal fin: .. desde el phpMyadmin (en PHP) hasta Navicat por ejemplo (windows) entre otros...)

Si vas a usar PHP .. en principio un CSV es un archivo de texto plano con cierta definición: campos separados por comas y registros por salto de línea ..

EL trabajo de archivos (para genear el archivo en sí ) con PHP lo haces con las funciones: fopen() .. fwrite() y afines.

Sólo tienes que tener presente que tendrás que hacer tu consulta SQL a tu BD -> obtener los registros como lo harás ya .. pero ahora vas a generar "fwrite()" del tipo y formato que requieres:

$linea = $row['campo1'].",".row['campoN']."\n";

El "\n" sería el salto de línea y ahí veras concatenado tus variables (los campos que obtienes de tu registro con el separador (coma en ese caso).

Para importar ese CSV en tu tabla Mysql .. puedes usar el comando SQL:
LOAD DATA
http://dev.mysql.com/doc/mysql/en/LOAD_DATA.html

De todo esto tienes ejemplos (creo recordar) en las FAQ's de este foro PHP (hechales un viztazo) y sino en sítios como www.phpclasses.org

Un saludo,
  #3 (permalink)  
Antiguo 25/08/2004, 09:11
 
Fecha de Ingreso: junio-2004
Mensajes: 29
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación

gracias por la info, ahora quiero saber como utilizo el fwrite(), donde lo coloco?, yo tengo una tabla de pedidos en mysql y quiero exportarla a un arhivo csv. desde una pagina php, el codigo que me pasaron usando las faqs, no me resulto, y no se porque?, este era el codigo:
Código PHP:
<?
function Descargar($excel){
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($excel));
@
readfile($file);
}

include(
"../pedidos/fcn/fcnConectarse.php");
$resultado=mysql_query("select * from pedidos");
$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Periodo</td><td>Codigo_cta</td><td>cat11</td><td>id_item</td><td>tip_sum</td><td>cls_item</td><td>cant_item</td><td>ficha</td><td>actualiza</td><td>cerrado</td>";
$shtml=$shtml."</tr>";
while (
$registro mysql_fetch_array($resultado)) {
$excel $excel."<tr><td>".$registro["periodo"]."</td><td>".$registro["cod_cta"]."</td><td>".$registro["cat11"]."</td><td>".$registro["id_item"]."</td><td>".$registro["tip_sum"]."</td><td>".$registro[cls_item]."</td><td>".$registro[cant_item]."</td><td>".$registro["ficha"]."</td><td>".$registro["actualiza"]."</td><td>".$registro["cerrado"]."</td></tr>";
}
$shtml=$shtml."</table>";
$scarpeta="./exportar"//carpeta donde guardar el archivo.
//$clave=date("dmYHis");
//debe tener permisos 775 por lo menos
$sfile=$scarpeta."/"."xxxx.xls"//ruta del archivo a generar
$fp=fopen($sfile,"w");
fwrite($fp,$shtml);
fclose($fp);
echo
"<a href='".$sfile."'>Haz click aqui</a><p></p>";
Descargar($sfile);
unlink($sfile)
?>
espero que puedan darme alguna pista o ejemplo de como usarlo, para poder guiarme, gracias
saludos
  #4 (permalink)  
Antiguo 25/08/2004, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Para tu caso concreto .. no deberías usar la función Descargar($sfile) .. por qué eso mismo ofrece tu archivo al navegador para su descarga.

Además de eso tienes algunos problemas:

Código PHP:
function Descargar($excel){ 
header("Content-Description: File Transfer"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=".basename($excel)); 
@
readfile($file); 

Si usas @ en readfile() no vas a ver los posibles mensajes de error que estás obteniendo .. por ejemplo que el archivo no existe .. Usastes $file cuando debes usar $exel

El resto de problemas .. si no se vé mensaje de error no se vé muy claro que sucederá.

Comenta la función Descargar de tu código (o eliminala por el momento) para no ejecutarla y prueba denuevo tu código (el resto parece estar bien .. a simple vista y la función mencionada tenía ya un error).

Un saludo,
  #5 (permalink)  
Antiguo 27/08/2004, 08:58
 
Fecha de Ingreso: junio-2004
Mensajes: 29
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación

Hola cluster, gracias por la verificacion, pero no me sale nada, me sale el este error en la pagina:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\pedidos\exportar6.php on line 15

aun así no se que hacer
Código PHP:
/*function Descargar($excel){
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($excel));
@readfile($file);
}
*/
include("../pedidos/fcn/fcnConectarse.php");
$rpedidos=mysql_query("select * from pedidos");
$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Periodo</td><td>Codigo_cta</td><td>cat11</td><td>id_item</td><td>tip_sum</td><td>cls_item</td><td>cant_item</td><td>ficha</td><td>actualiza</td><td>cerrado</td>";
$shtml=$shtml."</tr>";
while (
$reg mysql_fetch_array($rpedidos)) {
$excel $excel."<tr><td>".$reg["periodo"]."</td><td>".$reg["cod_cta"]."</td><td>".$reg["cat11"]."</td><td>".$reg["id_item"]."</td><td>".$reg["tip_sum"]."</td><td>".$reg[cls_item]."</td><td>".$reg[cant_item]."</td><td>".$reg["ficha"]."</td><td>".$reg["actualiza"]."</td><td>".$reg["cerrado"]."</td></tr>";
}
$shtml=$shtml."</table>";
$scarpeta="./exportar"//carpeta donde guardar el archivo.
//$clave=date("dmYHis");
//debe tener permisos 775 por lo menos
$excel=$scarpeta."/"."xxxx.xls"//ruta del archivo a generar
//$fp=fopen($sfile,"w");
/*fwrite($fp,$shtml);
fclose($fp);*/
echo"<a href='".$sfile."'>Haz click aqui</a><p></p>";
/*Descargar($sfile);
unlink($sfile)*/ 
espero que puedas ayudarme, gracias
saludos
  #6 (permalink)  
Antiguo 27/08/2004, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, por lo menos ahora ya se vé un error (que antes no veias) ...

Ahora tocará ver el error de Mysql concreto .. para eso puedes usar la función mysql_error():

Código PHP:
$rpedidos=mysql_query("select * from pedidos") or die (mysql_error()); 
Un saludo,
  #7 (permalink)  
Antiguo 27/08/2004, 11:15
 
Fecha de Ingreso: junio-2004
Mensajes: 29
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación

Cluster gracias por el dato, bien el error era porque no tenia la data seleccionada, ahora ejecuto el sgte codigo, pero me sale en blanco, como hago para descargar lo que quiero en un archivo?
este es el codigo actual:

Código PHP:
<?
include("../pedidos/fcn/fcnConectarse.php");
$link=conectarse();
$rpedidos=mysql_query("select * from pedidos");
$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Periodo</td><td>Codigo_cta</td><td>cat11</td><td>id_item</td><td>tip_sum</td><td>cls_item</td><td>cant_item</td><td>ficha</td><td>actualiza</td><td>cerrado</td>";
$shtml=$shtml."</tr>";
while (
$reg mysql_fetch_array($rpedidos)) {
$excel $excel."<tr><td>".$reg["periodo"]."</td><td>".$reg["cod_cta"]."</td><td>".$reg["cat11"]."</td><td>".$reg["id_item"]."</td><td>".$reg["tip_sum"]."</td><td>".$reg[cls_item]."</td><td>".$reg[cant_item]."</td><td>".$reg["ficha"]."</td><td>".$reg["actualiza"]."</td><td>".$reg["cerrado"]."</td></tr>";
}
$shtml=$shtml."</table>";
$scarpeta="./exportar"//carpeta donde guardar el archivo.
$excel=$scarpeta."/"."xxxx.xls"//ruta del archivo a generar
?>
espero tu ayuda, muchas gracias
  #8 (permalink)  
Antiguo 27/08/2004, 12:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues ahora usa el código de header() que usabas desde un principio ..

Código PHP:
// etc ....
$shtml=$shtml."</table>"
header("Content-Description: File Transfer"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=datos.xls"); 
echo 
$shtml
Eso te ofrecerá a descarga el archivo generado (o te abrirá el Exel directamente).

Si quieres generar un archivo en el servidor .. usa el código del fopen() que tenías antes.

Un saludo,
  #9 (permalink)  
Antiguo 27/08/2004, 14:01
 
Fecha de Ingreso: junio-2004
Mensajes: 29
Antigüedad: 19 años, 10 meses
Puntos: 0
De acuerdo

Cluster, muchas gracias por todos los consejos, y sobre todo por tu paciencia, para exportar un archivo de excel a mysql, tiene que ser de csv a mysql cierto?, pues el hecho es que ya exporta desde php a csv el problema es que me sale <!-- Manual de PHP de WebEstilo.com -->
,como hago para que no me salga, ahora como importo ese csv a mysql?
bien este es el codigo que utilicé para exportar de php a mysql, y funcionó:
Código PHP:
include("../pedidos/fcn/fcnConectarse.php");
$link=conectarse();
$rpedidos=mysql_query("select * from pedidos");
/*$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Periodo</td><td>Codigo_cta</td><td>cat11</td><td>id_item</td><td>tip_sum</td><td>cls_item</td><td>cant_item</td><td>ficha</td><td>actualiza</td><td>cerrado</td>";
$shtml=$shtml."</tr>";*/
while ($reg mysql_fetch_array($rpedidos)) {
    
$shtml $shtml.$reg["periodo"].",".$reg["cod_cta"].",".$reg["cat11"].",".$reg["id_item"].",".$reg["tip_sum"].",".$reg[cls_item].",".$reg[cant_item].",".$reg["ficha"].",".$reg["actualiza"].",".$reg["cerrado"]."\n";
}
//$shtml=$excel;
//$shtml=$shtml."</table>";
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=pedidos.csv");
echo 
$shtml
muchas gracias, espero que puedan ayudarme,
saludos
  #10 (permalink)  
Antiguo 27/08/2004, 20:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues eso de "manual de webestilo" no sé de donde saldrá . en el código que pusistes aquí no se vé por ningún sitio ..

Por lo demás .. Exel tiene la particularidad de "aceptar" como un .xls válido (básico .. sin definición de funciones ni nada má extra) una estructura de tabla HTML común .. también importa CVS (archivos separados por comas y registros por salto de línea (\n)

Un saludo,
  #11 (permalink)  
Antiguo 23/05/2005, 15:54
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 18 años, 10 meses
Puntos: 0
Una pregunta, el código es excelente, pero como puedo concatenar los nombres de los campos?.
  #12 (permalink)  
Antiguo 22/08/2005, 11:05
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 7 meses
Puntos: 0
Cita:
Iniciado por jviera
Cluster, muchas gracias por todos los consejos, y sobre todo por tu paciencia, para exportar un archivo de excel a mysql, tiene que ser de csv a mysql cierto?, pues el hecho es que ya exporta desde php a csv el problema es que me sale <!-- Manual de PHP de WebEstilo.com -->
,como hago para que no me salga, ahora como importo ese csv a mysql?
bien este es el codigo que utilicé para exportar de php a mysql, y funcionó:
Código PHP:
include("../pedidos/fcn/fcnConectarse.php");
$link=conectarse();
$rpedidos=mysql_query("select * from pedidos");
/*$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Periodo</td><td>Codigo_cta</td><td>cat11</td><td>id_item</td><td>tip_sum</td><td>cls_item</td><td>cant_item</td><td>ficha</td><td>actualiza</td><td>cerrado</td>";
$shtml=$shtml."</tr>";*/
while ($reg mysql_fetch_array($rpedidos)) {
    
$shtml $shtml.$reg["periodo"].",".$reg["cod_cta"].",".$reg["cat11"].",".$reg["id_item"].",".$reg["tip_sum"].",".$reg[cls_item].",".$reg[cant_item].",".$reg["ficha"].",".$reg["actualiza"].",".$reg["cerrado"]."\n";
}
//$shtml=$excel;
//$shtml=$shtml."</table>";
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=pedidos.csv");
echo 
$shtml
muchas gracias, espero que puedan ayudarme,
saludos
Me puedes enviar el codigo completo ... no me funciona.

Gracias.
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 02:27.