Importar y exportar datos.. En php

Desearía importar y exportar datos de una consulta en php..
Lo primero es exportar..
Cual seria la función para exportar...
¿Encontré por ahí que capturar la cabecera mime de excel? Algo ais.. Header(etc, etc, etc)
La verdad queno entendí nada...
Si me podrías dar un ejemplo por favor...
La consulta ya la tengo.. Ahora ocn un botón donde diga exportar exporte los datos hacia le formato *. Csv o *.txt, a cualquiera de los dos..
(Esto es más adelante.. Me importa primero exportar, luego ya sera importar...)
Para importar los datos, he escuchado del: load data local... Pero no se muy bien como funciona...

1 respuesta

Respuesta
2
Pues para exportar los datos de una consulta se me ocurre crear un fichero y rellenarlo:
$f = fopen("datos.txt","w");
$sep = ";";
while($reg = mysql_fetch_array($datos) ) {
$linea = $reg['campo1'] . $sep . $reg['campo2'] . $sep . $reg['campo3']; //pones cada campo separado con $sep.
fwrite($f,$linea);
}
fclose($f);
El fichero que crea podría ser csv o txt, en realidad los dos ficheros de texto normales donde los campos están separados con un separador. En el caso de csv el separador es ";".
Para importar, a partir de un fichero csv es muy fácil. Creas un script que lea esos archivos y almacene los datos en la base de datos.
Lo primero de todo es ver la estructura de la base de datos. Tienes que crearla, y para eso no necesitas usar php. Mejor que uses MySQL Control Center, o phpMyAdmin.
Después te creas un script que rellene la base de datos a partir de los datos del fichero. Te puede servir uno parecido al siguiente:
<html> <head> <title></title> </head> </body>
<?php
$fich = "BaseDatos1.csv";
$db = mysql_connect("localhsot", "", "");
mysql_select_db("BaseDatos1", $db);
$contenido = file ( $fich );
for( $i = 0; $i < sizeof( $contenido ); $i++) {
$linea = trim( $contenido[ $i ] );
$arrayDatos = explode(",", $linea);
$consulta = "INSERT INTO Tabla1 VALUES ('".
implode("','", $arrayDatos) ."')";
mysql_query( $consulta );
echo $consulta ."<br>\n";
if(mysql_error()) {
echo mysql_error() ."<br>\n";
}
}
?>
</body> </html>
El código sería similar a este, lo que hace es conectar con una base de datos llamada BaseDatos1 y rellenar la Tabla1 a partir de los datos del fichero BaseDatos1. Csv.
Gracias por la respuesta..
Fue exactamente lo que hice... al crear el fichero.. pero lo que sucede es que el archivo lo crea en la carpeta de mi hosting.. y como sabrás mi hosting no esta en mi PC.., al insertarlo a la base de datos. Me suen aun poco duplicar el trabajo.. porque los registros los extrago de una tabla y luego los paso hacia el archivo *.txt, o *.cvs, el problema es que ya tengo el archivo *.txt, como hago ahora para descargarlo a mi maquina... si fuese a utilizar un botón donde diga exportar y al hacer clic me permita elegir la ubicación del destino... en lo per de los casos.. que ismplemente lo guarde en c:\
esperando tu respuesta.. gracia.s.
Una vez que tengas el archivo *.txt o *.cvs se crea como bien dices en el host y no en tu pc. Pero puedes formar la descarga de ese archivo.
Supongo que se llama "listado.txt", el código que tienes que usar para que se descargue a la máquina cliente es el siguiente:
$fichero = "./listado.txt";
header("Content-Description: File Transfer");
header( "Content-Disposition: filename=".basename($fichero) );
header("Content-Length: ".filesize($fichero));
header("Content-Type: application/force-download");
@readfile($fichero);
¿Pero dónde lo descarga?, he copiado dicho código pero no lo descarga..
O en todo caso disculpame por mi ignorancia...
fantasticio
En cuanto se ejecute ese código, se tiene que comprobar que el fichero listado.txt existe y se abre una ventana que te permite seleccionar la ruta en la que deseas descargar ese fichero.
El código funciona en distintos navegadores. Lo he probado creando un script php situado en la misma carpeta que el fichero listado.txt.
El script es el siguiente:
<?php
$fichero = "./listado.txt";
header("Content-Description: File Transfer");
header( "Content-Disposition: filename=".basename($fichero) );
header("Content-Length: ".filesize($fichero));
header("Content-Type: application/force-download");
@readfile($fichero);
?>
Como ves, no ha cambiado nada. Asegúrate que existe el fichero y que están los dos en la misma carpeta. Si no pueden estar los dos juntos, tienes que modificar la variable $fichero y ponerle la ruta donde se encuentra listado.txt.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas