Importar datos de un CSV a una base de datos MySQL con PHP


Vamos como importar datos de un archivo .csv a una base de datos mysql usando Php y sin usar ningún framework php.

Hola a todos, en esta ocasión les traigo un ejemplo limpio sobre importar datos en PHP y es que muchas veces es importante importar datos en un proyecto y bueno vamos a ello.

Formato

El formato de datos para este ejemplo debe ser el siguiente [Rut/Rfc, Nombre, Apellidos, Direccion, Email, Telefono] se veria asi:

RAEA050892,Agustin,Ramos Escalante,Tabasco , evilnapsis@gmail.com, +52 1 914 1183199

Y esa linea se debe repetir en el archivo, las veces que sean necesarias y usando los valores que necesitemos.

Una vez que tengamos la lista de entradas, es decir por cada entrada debe ser una linea, vamos a guardar el archivo con extensión .csv o la verdad puede ser cualquier extension.

Base de datos

La base de datos es sencilla solo consta de una tabla.

[code language=”sql”]

create database importex1;
use importex1;

create table person(
id int not null auto_increment primary key,
no varchar(255) ,
name varchar(255) not null,
lastname varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
phone1 varchar(50),
phone2 varchar(50),
email1 varchar(50),
email2 varchar(50),
created_at datetime not null
);

[/code]

 

Conexion a la base de datos

La conexion a la base de datos la haremos con un archivo database.php que debe contener lo siguiente:

[code language=”php”] $con = new mysqli(“localhost”,”root”,””,”importex1″);
[/code]

Formulario

Vamos a crear un formulario para subir los archivos, este lo colocaremos en un archivo index.php:

[code language=”html”]

<form class=”form-horizontal” method=”post” id=”addproduct” action=”import.php” enctype=”multipart/form-data” role=”form”>

<div>
<label for=”inputEmail1″ class=”col-lg-2 control-label”>Archivo (.csv)*</label>
<input type=”file” name=”name” id=”name” placeholder=”Archivo (.csv)” required>
<button type=”submit” class=”btn btn-primary”>Importar Datos</button>
</div>

</form>

[/code]

Como podemos ver es un formulario simple con un campo tipo file y un boton de submit. Al hacer submit se dirigira al archivo import.php que se encargara de procesar los datos y guardarlos.

Leer archivo e importar datos

El siguiente codigo PHP es el que esta dentro del archivo import.php.

[code language=”php”] include “database.php”;
include “class.upload.php”;

if(isset($_FILES[“name”])){
$up = new Upload($_FILES[“name”]);
if($up->uploaded){
$up->Process(“./”);
if($up->processed){
if ( $file = fopen( “./” . $up->file_dst_name , “r” ) ) {

$ok = 0;
$error = 0;
$products_array = array();

while($x=fgets($file,4096)){

$data = explode(“,”, $x);
if(count($data)>=6){
$ok++;
$sql = “insert into person (no,name,lastname,address1,email1,phone1,created_at) value (\”$data[0]\”,\”$data[1]\”,\”$data[2]\”,\”$data[3]\”,\”$data[4]\”,\”$data[5]\”,NOW())”;
$con->query($sql);
}else{
$error++;
}
}
}
fclose($file);
unlink(“./”.$up->file_dst_name);
}

}

}
[/code]

Para que este codigo funciones recurriremos a la libreria class.upload.php usada para subir y guardar el archivo, y el archivo database.php que contiene la conexion a la base de datos.

En este archivo lo que hacemos es subir el archivo y guardarlo en un archivo en el servidor, posteriormente se lee el archivo con la funcion fopen y se recorre cada linea del archivo con la funcion fgets, con la funcion explode se separa cada linea por el separador en este caso la coma “,” este se puede cambiar si es necesario.

Se debe validar que los campos separados de cada linea sean 6, y si es asi se insertan los datos en la base de datos en el orden preestablecido.

Finalmente, se cierra el archivo abierto y se elimina del servidor con la funcion unlink.

Descarga desde Dropbox

En el paquete de descarga encontraras los archivos index.php, im.txt, database.php, import.php, class.upload.php y schema.sql

Link: https://www.dropbox.com/s/6rg79i7r63nt90h/import1-php.zip

Finalizando

Cuéntanos que tal te parecio este ejemplo?

Te invitamos a que  te suscribas en este blog y recibas notificaciones cada vez que publiquemos nuevos contenidos.

Leave a comment