Módulo H: IMPORTAR DATOS (CSV)
Transcripción
Módulo H: IMPORTAR DATOS (CSV)
Módulo H: IMPORTAR DATOS (CSV) Objetivo del Módulo: Facilitar la importación de información a nuestro aplicativo Nuestros usuarios suelen solicitarnos que llenemos con información nuestros aplicativos, pero esta información suele ser de cientos e incluso miles de registros que nos tardarían demasiado tiempo y que no es conveniente para nosotros. Teniendo en cuenta lo anterior en este módulo explicaremos dos formas de hacer esto, una de ellas mediante programación ahorrándonos una gran cantidad de trabajo y tiempo. Cabe aclarar que este proceso se realiza por cada tabla de base de datos que tengamos. Para llevar a cabo este asunto vamos a tener en cuenta que la información debe estar (digital) en una hoja de cálculo en formato .csv . ¿Qué es csv ? Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma) ¿Cómo tener una hoja de cálculo en .csv? Imaginemos que tenemos una base de datos de un colegio con una tabla estudiante con los siguientes datos Y la institución educativa nos informa que tiene una hoja de cálculo de Excel con una gran cantidad de registros con información de estudiantes los cuales debemos ingresar en el aplicativo. Lo primero que debemos hacer es solicitar que las columnas de la hoja de se encuentren en el mismo orden de los campos de nuestra base de datos y en caso de encontrarse la eliminar la fila número 1 que contiene nuestra cabecera informativa, en caso contrario debemos hacerlo nosotros. Por ejemplo Para convertir en .csv debemos dirigirnos en nuestra hoja de cálculo a la opción de menú Archivo Guardar como Asignar un nombre En la barra de tipo seleccionar csv en cualquiera de sus formatos Guardar preferiblemente en escritorio y confirmar cualquier mensaje Después de tener nuestro archivo explicaremos la primera forma de importar la información es utilizando nuestro phpMyAdmin. 1. Lo primero que debemos hacer es ingresar a nuestra base de datos y dentro de ella seleccionar la opción de importar Posterior a ello teniendo en cuenta la imagen anterior debemos hacer clic sobre el botón seleccionar archivo y buscar nuestro archivo csv creado anteriormente Posterior a ello debemos especificar en el campo “Columnas separadas por:” que los campos están separados por (punto y coma) ; Y finalmente en el botón continuar del final de la página de importar que a continuación nos presenta un mensaje de éxito. Con los registros correctamente insertados nos dirigimos a la opción examinar para visualizarlos 2. La segunda opción se presenta cuando la entidad nos manifiesta que no tiene esa información rápidamente y por lo cual debemos dejar una opción en nuestro aplicativo para que este proceso lo haga la entidad, Es importante mencionar que para este proceso la entidad deberá tener una hoja de cálculo de los datos y las columnas deben estar ordenadas igual que en la opción número 1. A continuación presentaremos un ejemplo en el cual tenemos un módulo de estudiantes de un aplicativo y añadiremos la opción de importar datos. En primera instancia tendremos una carpeta un nuestro archivo index.php con una consulta de base de datos de la tabla estudiantes .Por agilidad hemos insertado en una celda un formulario con input de tipo file que sirve para subir archivos el cual observamos en el módulo anterior y botón que nos redirigirá al archivo importar.php. Archivo index.php Cuando seleccionamos el botón “seleccionar un archivo” se nos abre una ventana de dialogo el cual nos permitirá seleccionar el archivo que contiene la información de estudiantes Archivo index.php Al presionar sobre y abrir, seguido del botón importar nuestro proceso pasará al archivo importar.php el cual realiza las siguientes actividades.. Importar.php <?php require 'conexion.php'; //llamamos archivo de conexion para insertar celdas en bd $archivo= $_FILES['datos']['tmp_name']; //Recibimos la ruta temporal del documento $TablayCamposbd = 'estudiante(id_estudiante,nombre, apellido,direccion) '; // determinamos el nombre de la tabla y campos a insertar en el orden de la base de datos if (($archivo_abierto = fopen($archivo, "r")) !== FALSE) { //leemos el archivo mediante fopen y validamos si no lo está haciendo $nombres_campos = fgetcsv($archivo_abierto, 0, ",", "\"", "\"");// Leemos los nombres de los campos(cabeceras) en caso de tener encabezados sino comentar //$num_campos = count($nombres_campos); // podemos contar la cantidad de registros opcional // $row = 1; $insertar ="INSERT INTO $TablayCamposbd Values"; //Consulta de base datos $ValoresDeInsert =""; // Creamos un espacio para asignar valores de insert while ($celdas = fgetcsv ($archivo_abierto, 1000, ";")){ //obtenemos las celdas del archivo separadas por ; $ValoresDeInsert = $ValoresDeInsert.'("'.$celdas[0].'","'.$celdas[1].'","'.$celdas[2].'","'. $celdas[3].'"),';// ValoresDeInsertUES (celda[n] )"; //determinamos la cantidad y posiciones de celda de un registro } $ValoresDeInsertSinComaAlFinal = substr ($ValoresDeInsert, 0, strlen($ValoresDeInsert) - 1); // eliminar el ultimos punto y coma del inset $sql = $insertar.''.$ValoresDeInsertSinComaAlFinal.''; //Unimos la consulta insert y los valores extraidos de la hoja de calculo para ser insertados $insertar = $mysqli -> query ($sql); //Enviamos la consulta a base de datos if ($mysqli->affected_rows > 0) { ?> <!-- si se inserto correctamente -> <script type="text/javascript"> alert ('datos importados correctamente'); //presentamos un mensaje de exito window.location = 'index.php' ; //redireccionamos al archivo inicial </script> <?php } else {?> <!-- de lo contrarioe --> <script type="text/javascript"> alert ('verificar información'); //presentamos un mensaje de verificación window.location = 'index.php' ;//redireccionamos al archivo inicial </script> <?php } } //cerramos el if de la linea 5 ?> El cual finalmente nos presenta un aviso de notificación de éxito y redirige a nuestro archivo index.php con los registros correctamente importados Archivo index.php Nota: Si tiene inconvenientes en caso de importar una gran cantidad de registros debemos modificar el tiempo de ejecución de wampserver en el archivo php.ini del wamp, modificar el siguiente valor y dejar en cero para ilimitado: max_execution_time = 0 Conclusiones: La importación de archivos es de gran importancia para ahorrar tiempo y trabajo en la migración de información a nuestro aplicativo El tiempo de importación va a variar de acuerdo a la velocidad del pc, cantidad de registros, cantidad de campos etc. (aproximadamente 3:49 para 5050 registros) Por facilidad para el presente ejercicio tomamos 2 registros pero perfectamente pueden ser una n cantidad teniendo en cuenta que mysql soporta unos 12000 registros aunque con 5000 iniciamos a tener una pérdida de rendimiento EJERCICIOS: 1. Teniendo en cuenta registros libres en Excel que encontramos en la web, realizar diversas pruebas con un gran volumen de datos con el fin de realizar test de fuerza bruta al script. Lista de referencias. http://php.net/manual/es/function.fgets.php http://php.net/manual/es/function.fopen.php http://php.net/manual/es/function.substr.php