Necesito importar datos de un archivo CSV a una tabla de MySQL a través de PHP, el problema es que necesito importar solo algunas columnas NO TODAS el proceso se hace cada semana y ademas no siempre vienen en el mismo orden, sin embargo los títulos de las columnas nunca cambian, ¿es posible seleccionar con php las columnas que deseo importar por nombre y como?
1 Respuesta
Respuesta de Juan Moreno
1
1
Juan Moreno, Nada es imposible. La solución es saberlo hacer.
Te paso este código. Creo que esta muy masticadito. Lo utilice hace mucho tiempo pero ahora pues... utilizo una librería que me lee los .xls... queda más profesional. Si tu eres el Administrador de la base de datos... tramalos a tod@s... diles que tiene que ser en tal formato y en tal orden sino no puedes subir la información... así de fácil.. Espero te sea de gran ayuda.. Éxitos... DTB <?php $status = "";// Es el mensaje que me muestra por si hay error $img=""; if ($_POST["action"] == "upload") { // obtenemos los datos del archivo $tamano = $_FILES["archivo"]['size']; $tipo = $_FILES["archivo"]['type']; $archivo = $_FILES["archivo"]['name']; $prefijo = substr(md5(uniqid(rand())),0,6); if ($archivo != "") { // Si no esta en blanco compruebo la extencion if (($tipo == "application/vnd.ms-excel")){ // Si es igual compruebo el tamaño if ($tamano > "5000000"){ // Compruebo el tamaño $status = "Tu archivo es muy grande... lo maximo es de 5 MB"; $img = "img/stop.jpg"; } else{//Fin comprobacion tamaño $destino = "upload/".$prefijo."_".$archivo; if (copy($_FILES['archivo']['tmp_name'],$destino)) { //Subo el archivo // Inicio del proceso para subir el csv a la base de datos lo que hice fue copiar el dodigo de "cargue_csv_db" y lo coloque despues que se sube el archivo a upload include("conex.php"); $link=Conectarse(); mysql_select_db("casos"); $row = 1; $total= 0; $fp = fopen ("$destino","r"); while ($data = fgetcsv ($fp, 10000, ";")) { $num = count ($data); //print " <br>"; $row++; //echo "$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7].$data[8].$data[9].$data[10].$data[11].$data[12].$data[13].$data[14]; /*$insertar="insert into casos (id,solicitante,fecha_recibido,fecha_sol,mi_nota,cod_envio,localizacion,cel,nombre_cliente,cc_cliente,nom_municipio,nom_medio_envio,nom_tipo_solicitud,notas_solicitud) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]','$data[13]')"; */ if (mysql_query("insert into casos (solicitante,fecha_recibido,fecha_sol,hora_sol,mi_nota,cod_envio,localizacion,cel,nombre_cliente,cc_cliente,nom_municipio,nom_medio_envio,nom_tipo_solicitud,notas_solicitud) values ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]','$data[13]')")){ $status="Agregados"; $total= $total + 1; } else { $status="Error por favor contacte con el administrador"; } } echo "<br><br><br><br>$status<br>"; echo "Un total de $total registros"; fclose ($fp); //Fin proceso importar datos a la base de datos $status = "Archivo subido: <b>".$archivo."</b>"; $img = "img/ok.jpg"; } else {//Fin subo archivo $status = "Error al subir el archivo. Por favor contacte con el administrador"; $img = "img/stop.jpg"; }//Fin else subo archivo }//Fin else comprobacion tamaño } else{//Fin comprobacion extencion $status = "Este tipo de archivo no se puede subir. Solo puedes subir .csv. Si no entiende respecto al tema por favor contacte con el Administrador "; $img = "img/stop.jpg"; } } else {//Fin de si no esta vacio $status = "Por favor seleccione el archivo a subir"; $img = "img/stop.jpg"; }// Fin else si no esta vacio }//Fin de comprobacion post echo '<center><table class="cajagrande" width="200" border="0"> <tr> <td> <img src="'.$img.'"></img></td> <tr> <td>'.$status.'</td> </tr> <td></td> </tr> </table></center>'; ?>