Pasar un CSV a una BD en PHP

Subir un archivo CSV, abrirlo y recorrer sus elementos para almacenarlos en una Base de Datos MYSQL usando el Lenguaje PHP, usaremos la función fgetcsv

En este tip vamos a llenar una base de datos mysql con un archivo CSV para  tal efecto tenemos que realizar las siguientes operaciones

  1. Subir el Archivo CSV al servidor
  2. Abrir el Archivo CSV
  3. Recorrer los elementos
  4. Abrir la conexión a la Base de Datos
  5. Pasar la data a través de una consulta de insercion a una tabla para tal efecto.
  6. Cerrar el archivo CSV y cerrar la conexión a la BD MYSQL

El código completo es:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>Pauta csv</title>
</head>
<body>
<?php
if(isset($_FILES['csv'])):
	include "conexion.php";
	$user 		= new ApptivaDB();	
	$carpeta 	= "uploads/";
	$nombre  	= time()."_".$_FILES['csv']['name'];
	move_uploaded_file($_FILES['csv']['tmp_name'], "$carpeta$nombre");
	$fp = fopen ($carpeta.$nombre,"r");
	$linea=false;
	while ($data = fgetcsv ($fp, 1000, ",")):
		if($linea)
			$u=$user->insertar("agenda","'".$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."'");
		$linea=true;
	endwhile;
	fclose ($fp);	
	echo "<p>La importación del archivo CSV fue un éxito</p>";
	$u=$user->buscar("agenda","1");
	$html= "<ul>";
	foreach ($u as $data)
		$html.= "<li>Nombre :".$data['nombre']." Apellidos :".$data['apellidos']." DNI :".$data['dni']." Celular :".$data['celular']."</li>";
	$html.="</ul>";
	echo $html;
	$user=null;
else:?>
	<h1>UPLOAD CSV CON PHP</h1>
	<form method="post" enctype="multipart/form-data">		
		<input type="file" name="csv" id="csv" /><br>
		<input type="submit"  value="subir" />
	</form>
<?php endif; ?>
</body>
</html>

Para mostrar los datos genera dinámicamente una lista html

BASE DE DATOS

Debemos crear una base de datos, le pondremos el nombre de bdcsv y agregamos una tabla con el nombre de agenda:

CREATE TABLE `agenda` (
  `id` int(11) NOT NULL,
  `nombre` varchar(50) NOT NULL,
  `apellidos` varchar(50) NOT NULL,
  `dni` varchar(8) NOT NULL,
  `celular` varchar(9) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `agenda`
--
ALTER TABLE `agenda`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `agenda`
--
ALTER TABLE `agenda`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

 

ARCHIVO CSV

Este archivo  agenda.csv tiene la siguiente estructura

Nombre,Apellido,Dni,Celular
Juan,Contreras,,42882321,950092356
Adriana,Angelina,42312331,950043022
Fatro,Ppiroue,32876523,950064545
Natalia,Vergara,42009321,998920022

 

EL ARCHIVO DE CONEXION 

Esta clase permite conectarnos a la base de datos bdcsv ademas de proveernos de dos métodos para manipular datos como es

  1. INSERTAR .- Crea registros 
  2. BUSCAR .- Busca registros de acuerdo a un criterio de búsquedad o condición
<?php 
class ApptivaDB{    
    private $host   ="localhost";
    private $usuario="root";
    private $clave  ="";
    private $db     ="bdcsv";
    public $conexion;
    public function __construct(){
        $this->conexion = new mysqli($this->host, $this->usuario, $this->clave,$this->db) or die(mysql_error());
        $this->conexion->set_charset("utf8");
    }
    public function insertar($tabla, $datos){
        $resultado =    $this->conexion->query("INSERT INTO $tabla VALUES (null,$datos)") or die($this->conexion->error);
        if($resultado)
            return true;
        return false;
    } 
    public function buscar($tabla, $condicion){
        $resultado = $this->conexion->query("SELECT * FROM $tabla WHERE $condicion") or die($this->conexion->error);
        if($resultado)
            return $resultado->fetch_all(MYSQLI_ASSOC);
        return false;
    } 
}
 ?>

Y listo.

Visitas: 226 | Publicado:2018-12-16 00:55:01

Más publicaciones de PHP que te pueden interesar:

Facebook Twitter Youtube Pinterest Wordpress Google Plus

:: Calle Paucarpata 130 Of. 212 2do Piso CC. AQPcompucentro ::
:: © Todos los derechos reservados APPTIVA WEB | Arequipa Perú 2010-2018 ::