Foros del Web » Programando para Internet » PHP »

importador de csv con php

Estas en el tema de importador de csv con php en el foro de PHP en Foros del Web. Hola, Tengo una base de datos (mysql) en donde existen dos tablas, una es tbl_registros y la otra es tbl_ciclo, en ambas bases debo importar ...
  #1 (permalink)  
Antiguo 18/02/2019, 16:45
 
Fecha de Ingreso: noviembre-2015
Mensajes: 77
Antigüedad: 9 años
Puntos: 2
importador de csv con php

Hola,

Tengo una base de datos (mysql) en donde existen dos tablas, una es tbl_registros y la otra es tbl_ciclo, en ambas bases debo importar un solo csv, es decir; con un botón de un form debo importar hacia las dos tablas, en tbl_registros deben entrar 19 columnas del csv y en tbl_ciclo deben entrar solo dos columnas. El problema es que cada vez que intento realizar la importación hacia las dos tablas no importa nada ni me manda errores, solamente se quedan en blanco las tablas de la base de datos. Esto lo estoy tratando de hacer con dos INSERT INTO, alguien me puede ayudar con una mejor solución?

Aquí el código de html:
Código HTML:
<form method="post" action="import.php" enctype="multipart/form-data">
    <div class='col-md-12'>
    <section>
    <table border="1" style="">
        <tr>
            <td><input type='file' name='selfile' size='20' style=""></td>
            <td><input type="submit" name="import" id="import" value="Importar" class="btn btn-primary" style="width: 70px; " /></td>
            <td><label for="" style="margin-left: 5px; ">Import .</label></td>
            
        </tr>
    </table>
    </section>
    </div>
    </form> 
Aquí el código de PHP
Código PHP:
<?php
 
include('conexion.php');
    if(isset(
$_POST['import']))
    {
        
//Aquí es donde seleccionamos nuestro csv
         
$fname $_FILES['selfile']['name'];
         echo 
'Cargando nombre del archivo: '.$fname.' <br>';
         
$chk_ext explode(".",$fname);
 
         if(
strtolower(end($chk_ext)) == "csv")
         {
             
//si es correcto, entonces damos permisos de lectura para subir
             
$filename $_FILES['selfile']['tmp_name'];
             
$handle fopen($filename"r");
 
             while ((
$data fgetcsv($handle1000",")) !== FALSE)
             {
               
//Insertamos los datos con los valores...
$sql "INSERT INTO tbl_registro (id_registro, bk_registro, apellido_paterno, apellido_materno, nombre, hospital, calle, numero_exterior, numero_interior, consultorio, colonia, CP, ciudad, estado, referencias, horario_1, horario_2, dia_entrega, telefono_fijo, telefono_movil, persona_autorizada) values('$data[0]','$data[1]','$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]', '$data[9]', '$data[10]', '$data[11]', '$data[12]', '$data[13]', '$data[14]', '$data[15]', '$data[16]', '$data[17]', '$data[18]', '$data[19]', '$data[20]')";
                
mysqli_query($con$sql);

$sql1 "INSERT INTO tbl_ciclos (id_ciclos, id_registro, ciclo, semana, reenvio) values('$data[0]','$data[1]','$data[2]','$data[3]')";
                
mysqli_query($con$sql1);
             }
             
//cerramos la lectura del archivo "abrir archivo" con un "cerrar archivo"
             
fclose($handle);
             echo 
"Importación exitosa!";
             echo 
"</br>";
             echo 
'<a href="../vistas/consulta.php">Regresar</a>';
         }
         else
         {
            
//si aparece esto es posible que el archivo no tenga el formato adecuado, inclusive cuando es cvs, revisarlo para             
//ver si esta separado por " , "
             
echo "Archivo invalido!";
         }
    }
 
?>
Gracias y saludos.
__________________
paco alonso
  #2 (permalink)  
Antiguo 18/02/2019, 18:11
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: importador de csv con php

Dos cosas:
1. Chequear la extensión de un archivo de esta manera
$chk_ext = explode(".",$fname);
if(strtolower(end($chk_ext)) == "csv")

No es la mejor idea, ya que es cosa que a un archivo .exe (virus) se le puede poner como extensión .csv,

Mejor usa finfo:

Código PHP:
Ver original
  1. $finfo = new finfo(FILEINFO_MIME);
  2. $mimetype = $finfo->file($_FILES['selfile']['tmp_name']);

Algunos csv mime:

text/comma-separated-values , text/csv , application/csv

Entonces

Código PHP:
Ver original
  1. $csvEXT = ["text/comma-separated-values", "text/csv", "application/csv"];
  2. $finfo = new finfo(FILEINFO_MIME);
  3. $mimetype = $finfo->file($_FILES['selfile']['tmp_name']);
  4. if(in_array($mimetype, $csvEXT)){
  5. //to do if is csv file
  6. }
  7. else{
  8. //To do if not csv file
  9. }


[/HIGHLIGHT]
Luego en tus SQL estas usando el array como string debes concatenar:


Código PHP:
Ver original
  1. $sql = "INSERT INTO table (col1, col2, ...) VALUES ('".$data[0]."', '".$data[1]."', ....)";



Saludos

Última edición por alvaro_trewhela; 18/02/2019 a las 18:17

Etiquetas: csv, html, mysql, query, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:37.