Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cargar archivo excel a MySQL con PHP

Estas en el tema de Cargar archivo excel a MySQL con PHP en el foro de PHP en Foros del Web. Quiero crear una opción para cargar al información de un archivo excel y agregarla a una tabla en MySQL. Pero la tabla ya tiene data ...
  #1 (permalink)  
Antiguo 17/11/2015, 12:22
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Cargar archivo excel a MySQL con PHP

Quiero crear una opción para cargar al información de un archivo excel y agregarla a una tabla en MySQL.
Pero la tabla ya tiene data previa y quiero que la nueva data se agregue.
¿Cuál es la mejor forma de hacerlo, considerando en uno de los campos existen caracteres especiales?
Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.
  #2 (permalink)  
Antiguo 17/11/2015, 12:33
 
Fecha de Ingreso: octubre-2015
Ubicación: ciudad juarez
Mensajes: 90
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Cargar archivo excel a MySQL con PHP

prueba con este guanda el archivo en formato cvs

Código PHP:
Ver original
  1. <?php
  2.  
  3. //conexiones, conexiones everywhere
  4. ini_set('display_errors', 1);
  5. $db_host = 'localhost';
  6. $db_user = 'root';
  7. $db_pass = '';
  8.  
  9. $database = 'eaton';
  10. $table = 'order';
  11. if (!mysql_connect($db_host, $db_user, $db_pass))
  12.     die("No se pudo establecer conexión a la base de datos");
  13.  
  14. if (!mysql_select_db($database))
  15.     die("base de datos no existe");
  16.     if(isset($_POST['submit']))
  17.     {
  18.         //Aquí es donde seleccionamos nuestro csv
  19.          $fname = $_FILES['sel_file']['name'];
  20.          echo 'Cargando nombre del archivo: '.$fname.' ';
  21.          $chk_ext = explode(".",$fname);
  22.          
  23.          if(strtolower(end($chk_ext)) == "csv")
  24.          {
  25.              //si es correcto, entonces damos permisos de lectura para subir
  26.              $filename = $_FILES['sel_file']['tmp_name'];
  27.              $handle = fopen($filename, "r");
  28.        
  29.              while (($data = fgetcsv($handle, 100000, ",")) !== FALSE)
  30.              {
  31.                //Insertamos los datos con los valores...
  32.                 $sql = "INSERT into order(suffix,order,item,co,schedule,responsible,item_status,catalog_number,style_number,item_quantity_open,item_Extended_Amount,item_order_date,commit_ship_date,commit_ship_actual_date,commit_ship_original_date,commit_ship_reschedule_reason,commit_ship_reschedule_number,do_not_ship_b4_date,required_ship_date,ship_method,cust_name,ship_addr_state,management_load_line,product_line)
  33.                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]','$data[14]','$data[15]','$data[16]','$data[17]','$data[18]','$data[19]','$data[20]','$data[21]','$data[22]','$data[23]','$data[24]')";
  34.                 mysql_query($sql) or die(mysql_error());
  35.              }
  36.              //cerramos la lectura del archivo "abrir archivo" con un "cerrar archivo"
  37.              fclose($handle);
  38.              echo "Importación exitosa!";
  39.              
  40.          }
  41.          else
  42.          {
  43.             //si aparece esto es posible que el archivo no tenga el formato adecuado, inclusive cuando es cvs, revisarlo para             //ver si esta separado por " , "
  44.              echo "Archivo invalido!";
  45.          }  
  46.     }
  47.      
  48.     ?>


Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.   <body>
  3.   <h1>Importando archivo CSV</h1>
  4.   <form action='importar.php' method='post' enctype="multipart/form-data">
  5.    Importar Archivo : <input type='file' name='sel_file' size='20'>
  6.    <input type='submit' name='submit' value='submit'>
  7.   </form>
  8.  </body>
  9. </html>
  #3 (permalink)  
Antiguo 17/11/2015, 15:39
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Cargar archivo excel a MySQL con PHP

Y qué pasa si tengo una tabla con más campos de los que quiero subir?
Yo en los values puse:
Código PHP:
values('$data[0]','$data[1]',""
Pero me sale error de
Código HTML:
Notice: Undefined offset: 6 in C:\www\control.php on line 33
Error: Column count doesn't match value count at row 1
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 17/11/2015, 16:23
 
Fecha de Ingreso: noviembre-2015
Mensajes: 34
Antigüedad: 8 años, 5 meses
Puntos: 4
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por bandolera Ver Mensaje
Y qué pasa si tengo una tabla con más campos de los que quiero subir?(...)
En ese caso debes insertar algo en todos los campos, aunque sea un null o un string vacío, no puedes hacer un insert sin poner todas las columnas, un ejemplo sería:

Si tiene esta tabla: myTable(campo1,campo2,campo3,campoQueNoQuieroSubir ,campoQueNoQuieroSubir)

la sentencia sql debería ser algo así:

Código SQL:
Ver original
  1. INSERT INTO 'myTable' ('campo1','campo2','campo3','campoQueNoQuieroSubir','campoQueNoQuieroSubir')VALUES('miDato','miDato2','miDato3','miDatoDefault','MiDatoDefault');
Donde miDatoDefault, podría ser por ejemplo un String vacío -> "" o incluso un null
  #5 (permalink)  
Antiguo 18/11/2015, 11:47
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por Knaak53 Ver Mensaje
Donde miDatoDefault, podría ser por ejemplo un String vacío -> "" o incluso un null
Mi sentencia está en una clase y tiene esta forma:
Código PHP:
$sql "INSERT into tabla(campo1, campo2, campo3, campo4) values('$data[0]','$data[1]', "","")"
Cuando inserto todos los campos no hay problema pero si quiero poner "nada" en los campos 3 y 4. Me sale error de sintaxis.
Pero si le pongo comilla simple igual sale error.
En la tabla el campo3 es integer y campo4 es varchar. Ambos tienen condición Null = YES.
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por bandolera; 18/11/2015 a las 12:10
  #6 (permalink)  
Antiguo 18/11/2015, 12:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Cargar archivo excel a MySQL con PHP

Tu error de sintaxis es por que los datos vacíos los estás colocando con comillas en vez de apostrofes:

Código PHP:
Ver original
  1. $sql = "INSERT into tabla(campo1, campo2, campo3, campo4) values('$data[0]','$data[1]', "","")";  
  2.  
  3. $sql = "INSERT into tabla(campo1, campo2, campo3, campo4) values('$data[0]','$data[1]', '','')";
Hay dos formas de insertar, indicando los campos específicos que quieres guardar o bien todos.

imagina una tabla con 10 campos: campo1, campo2.... campo10.

si sólo vas a insertar en algunos campos puedes hacer algo como

insert into mitabla (campo3,campo6) values('$valorX','$valorY')
  #7 (permalink)  
Antiguo 18/11/2015, 12:42
 
Fecha de Ingreso: octubre-2015
Ubicación: ciudad juarez
Mensajes: 90
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Cargar archivo excel a MySQL con PHP

pues no declares los campos 3 y 4
  #8 (permalink)  
Antiguo 18/11/2015, 14:49
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Cargar archivo excel a MySQL con PHP

Utilicé ambos comentarios, no declarando los campos que no utilizo y la otra forma utilizando los apostrofes.
Pero ahora se trunca la carga en un campo que en el nombre tiene un apostrofe.
Por ejemplo: O'hara, D'onofrio, etc.
El campo es varchar.
__________________
Todos somos iguales. NO! a la violencia de género.
  #9 (permalink)  
Antiguo 18/11/2015, 14:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Pero ahora se trunca la carga en un campo que en el nombre tiene un apostrofe.
Bueno, ¿y por qué no escapas dichos valores antes de construir la consulta de SQL?

Es tan común que es un requerimiento siempre que tratamos con comillas, ¿o cómo has hecho hasta ahora para lidiar con ello?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 18/11/2015, 15:40
 
Fecha de Ingreso: octubre-2015
Ubicación: ciudad juarez
Mensajes: 90
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Cargar archivo excel a MySQL con PHP

creo que entendistes mal lo que ocp001a t trato decir es que quitaras las comillas dobles y pusieras la comilla simple

bien
(campo3,campo6) values('$valorX','$valorY')

mal
(campo3,campo6) values("$valorX","$valorY")
  #11 (permalink)  
Antiguo 20/11/2015, 09:00
 
Fecha de Ingreso: octubre-2015
Ubicación: ciudad juarez
Mensajes: 90
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Cargar archivo excel a MySQL con PHP

que paso Bandolera si te funciono o no??
  #12 (permalink)  
Antiguo 21/11/2015, 12:37
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por edgaralcalaserra Ver Mensaje
que paso Bandolera si te funciono o no??
funciona con las comillas simples en los campos que no voy a cargar.
Pero igual sigue saliendo el problema del apostrofe.

Para escapar los valores con apostrofes he puesto en la línea 30 del código inicial addslashes():
Código PHP:
while ((addslashes($data) = fgetcsv($handle100000",")) !== FALSE
Pero me sale este error:
Código PHP:
Fatal errorCant use function return value in write context 
__________________
Todos somos iguales. NO! a la violencia de género.
  #13 (permalink)  
Antiguo 21/11/2015, 13:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cargar archivo excel a MySQL con PHP

No puedes usar addslahses() ahí porque dicha función trabaja únicamente con cadenas de texto y $data es un array.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 21/11/2015, 15:29
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
No puedes usar addslahses() ahí porque dicha función trabaja únicamente con cadenas de texto y $data es un array.
Bueno, en qué parte entonces hago la consistencia? Si cuando se lee el archivo CSV pasa de array a data pero dentro de la semtencia?
INcluso quise utilizar
Código PHP:
mysqli_real_escape_string 
pues leí que ayuda a escapar valores.
Código PHP:
mysqli_real_escape_string($data[2]) 
pero aparece un error:
Código HTML:
Error: FUNCTION basedatos.mysqli_real_escape_string does not exist
__________________
Todos somos iguales. NO! a la violencia de género.
  #15 (permalink)  
Antiguo 21/11/2015, 18:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
pues leí que ayuda a escapar valores.
Código PHP:
Ver original 
Sí, esa función es la adecuada y debes aplicar en cada valor que uses.

Cita:
pero aparece un error:
Código HTML:
Ver original
  1. Error: FUNCTION basedatos.mysqli_real_escape_string does not exist
Ese error parece que es de SQL.

¿Lo estas haciendo así?

Código PHP:
Ver original
  1. // MAL
  2. $sql = "INSERT INTO tabla VALUES('mysqli_real_escape_string($data[2])')";

Porque la deberías usar así:
Código PHP:
Ver original
  1.  
  2. $sql = "INSERT INTO tabla VALUES('$x')";

¿Es la primera ves que trabajas con bases de datos?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 23/11/2015, 11:28
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Porque la deberías usar así:
Código PHP:
Ver original
  1.  
  2. $sql = "INSERT INTO tabla VALUES('$x')";

¿Es la primera ves que trabajas con bases de datos?
Debo crear una variable de conexión ? a pesar de que no la estoy usando en el código mostrado?
Código PHP:
$micon mysql_connect($db_host$db_user$db_pass); 
para completar la sintaxis:
Código PHP:
$data1 mysqli_real_escape_string($micon$data[1]); 
Pues lo hice así pero ahora me muestra otro error:
Código PHP:
Warningmysqli_real_escape_string() expects parameter 1 to be mysqliresource given in 
__________________
Todos somos iguales. NO! a la violencia de género.
  #17 (permalink)  
Antiguo 23/11/2015, 12:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cargar archivo excel a MySQL con PHP

Estás mezclando funciones mysql_ con mysqli_ y claramente no son lo mismo, por favor consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #18 (permalink)  
Antiguo 23/11/2015, 13:44
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Cargar archivo excel a MySQL con PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Estás mezclando funciones mysql_ con mysqli_ y claramente no son lo mismo, por favor consulta el manual.
Probé el ejemplo del manual: http://php.net/mysqli_real_escape_string

Código PHP:
<?php
$enlace 
mysqli_connect('localhost''usuario''clave''database');

/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

mysqli_query($enlace"CREATE TEMPORARY TABLE miCiudad LIKE City");

$ciudad "'s Hertogenbosch";

/* esta consulta fallará debido a que no escapa $ciudad */
if (!mysqli_query($enlace"INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("Error: %s\n"mysqli_sqlstate($enlace));
}

$ciudad mysqli_real_escape_string($enlace$ciudad);

/* esta consulta con $ciudad escapada funcionará */
if (mysqli_query($enlace"INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("%d fila insertada.\n"mysqli_affected_rows($enlace));
}

mysqli_close($enlace);
?>
Y me sale :
Código HTML:
Error: 42000
Tendrá que ver con que yo uso PHP 5.4?? (Xampp)
__________________
Todos somos iguales. NO! a la violencia de género.
  #19 (permalink)  
Antiguo 24/11/2015, 09:26
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Cargar archivo excel a MySQL con PHP

Tengo una consulta adicional.
Mi proyecto se conecta con una clase ADODB.
Y para utilizar correctamente
Código HTML:
mysqli_real_escape_string
necesito conectarme con
Código HTML:
mysqli_connect
.
Cómo hago en este caso? En el manual no dice nada al respecto.
__________________
Todos somos iguales. NO! a la violencia de género.

Etiquetas: excel, mysql, 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 18:20.