Saltar al contenido
Codifíca.me | Desarrollo web | Programación
Php

Cómo importar datos csv o txt a MySQL con Php

3 mayo, 2016

En esta entrada rescato el código para importa un fichero CSV o TXT a tu base de datos mysql desde una formulario dentro de tu página web.

Basicamente el funcionamiento que queremos sería así, ponemos un formulario en la página web desde el que seleccionaremos un TXT o CSV y lo importaremos a nuestra base de datos.

Esta imagen muestra como sería esa parte del formulario.

importar ficheros CSV TXT mysql

Este sería el código para subir el CSV o TXT , en este caso vamos a subir a importar unas 1000 filas de una sola columna.

<form enctype='multipart/form-data' action='/desarrollo/wsld/subir.php' method='post' id="form-id-subir" >
Selecciona el fichero a importar:<br />
<input size='50' type='file' name='filename'><br />
 
  <input type="hidden" name="subir" value="admin1">
  <br />
   <a id="descargarA" onclick="$('#form-id-subir').submit();" class="button">Subir CSV / TXT </a>
</form>
 
<script>
var form = document.getElementById("form-id-subir");
document.getElementById("descargarA").addEventListener("click", function () {
  form.submit();
});
</script>

Este sería el código PHP al que tu formulario llamará y al que enviará los datos que hay en el fichero txt.
El TXT del ejemplo tendrá unas 1000 filas y una sola columna. Para añadir columnas utiliza el Array $data[0], $data[1] , … .

function subir(){
   $file_type = $_FILES['file']['type'];
 
        $servername = "localhost";
        $username = "-----";
        $password = "-----";
        $database = "-----";
 
        // Create connection
        if (!$conn = mysql_connect($servername,$username,$password)) {
            echo 'No pudo conectarse a mysql';
            exit;
        }
 
        if (!mysql_select_db($database, $conn)) {
            echo 'No pudo seleccionar la base de datos';
            exit;
        }    
 
//Upload File
 
if (isset($_POST['subir'])) {
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['filename']['name'] ." subido." . "</h1>";
        echo "<h2>Datos subidos:</h2>";
        readfile($_FILES['filename']['tmp_name']);
    }
 
    //Import uploaded file to Database
    $handle = fopen($_FILES['filename']['tmp_name'], "r");
 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $import="insert into Tabla_1 (campo_1) values ('".$data[0]."')";
 
        mysql_query($import) or die(mysql_error());
    }
 
    fclose($handle);
 
    print "Import hecho!";
 
    //view upload form
}
 
}

Y listo, ¿fácil no?. Ya puedes importar todos los datos que quieras a tus tablas desde un formulario hecho en tu web.

Otro usuarios llegaron aquí buscando:

  • importar csv a mysql desde php
  • importar datos csv a mysql con php
  • importar archivo csv a mysql desde php
  • subir archivo csv a mysql con php
  • subir csv a mysql php

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Comentarios (7)

Buenas noches, trate de usar este ejemplo para guardar datos en una base de datos de prueba pero no me funciono ni me arrojo algun error, sabes porque? Yo tengo mi duda en el campo hidden del formulario, cual es su funcion?

Responder

Ponle un control de errores para que te muestre el error en el caso de que quieras trabajar con ello.

El código es muy simple, demásiado, mira que la tabla se llame igual y que el campo se llame igual.

La función del campo hidden es que le pase un valor que no sea nulo, y si existe ese valor en el ‘Post’ ejecuta el resto del código. Si no le pasa este valor no puede ejecutar el código, digamos que es una ‘medida’ cutre de seguridad. Fácil de mejorar y sobretodo fácil de adaptar.

Responder

Hola, estoy intentando cargar de forma automática a mi sitio web en WP los datos de productos que tengo en un fichero externo csv.
Tengo un fichero csv con filas (cada fila es un producto con 20 columnas cada una) cada columna es un dato del producto.
Lo que pretendo es que 1 vez al día los productos de este fichero externo csv se carguen en mi web y que cada uno de ellos sea una ENTRADA en mi sitio web. Es decir que cuando yo entre a visitar el sitio, ya se puedan visualizar las nuevas ENTRADAS cargadas ese día desde el fichero csv externo.
El fichero me lo van a enviar de forma diaria a mi servidor y lo dejarán en una carpeta de mi servidor donde tengo el wordpress.
¿ Sabes como lo puedo hacer ?
Muchas gracias de antemano

Responder

Buenas,
Disculpa que no te haya respondido antes, que llevo un tiempo fuera y no me he pasado por el blog.

Esto que quieres hacer para cargar productos desde un csv lo puedes hacer si tienes woocommerce, existen varios plugins para woocommerce que lo hacen.
Ahora bien, tendrías que prepararan una cron para que vuelva a realizar el proceso 1 vez al día , o cuando quieras que se vaya refrescando el inventario.

Saludos,

Responder

Y en que momento llamas la funcion subir() en php??? como crees que funcionará sin llamar la función???

Responder

jajajaja, por Magia, el código es todo magia.

Esta empaquetado en una función que tu tendrás que llamarla si quieres usarla, o bien puedes quitar la función, o puedes modificar el código a tu gusto.

Te muestro como lo tengo hecho, copio-pego las partes que tienen esa funcionalidad, pero obviamente hay un desarrollo detrás, quizá un desarrollador te venga guay.

Saludos

Responder

Muy bueno tu ejemplo me fue de gran ayuda para que pudiera completar un proyecto, muy buena explicación.
Gracias amigo por la información.

Responder