Foros del Web » Programando para Internet » PHP »

subir varios archivos en un form con php

Estas en el tema de subir varios archivos en un form con php en el foro de PHP en Foros del Web. Hola gente tengo una web con panel de usuario en php.. lo que quiero hacer es que cada usuario pueda subir una foto de perfil ...
  #1 (permalink)  
Antiguo 04/04/2014, 19:43
 
Fecha de Ingreso: mayo-2010
Mensajes: 93
Antigüedad: 13 años, 11 meses
Puntos: 3
Exclamación subir varios archivos en un form con php

Hola gente tengo una web con panel de usuario en php.. lo que quiero hacer es que cada usuario pueda subir una foto de perfil y 3 fotos más. Esas imagenes van a terminar en una galeria de imagenes(pero eso es otro tema).
Mi idea es que hayan entonces 4 inputs y que el nombre de las imagenes sean de este estilo:
por ejemplo el usuario con el id 01 tendra las imagen de perfil llamada 01.jpg y las 3 imagenes restantes serían 01-01.jpg, 01-02.jpg y 01-03.jpg

Estuve viendo algunos tutoriales pero me estoy haciendo un lio! Si alguien me puede guiar un poco con esto y con el tema de limitar el tamaño de la imagen en cuanto a peso y medidas (ya que van a terminar en una galeria )
pd: habria una tabla llamada imagenes con los campos---id_imagen --imagen--
en donde se encontraría la ruta de la imagen junto con el nombre y el id de imagen (igual al id de usuario)
__________________
Mi web de estética www.estarmaslinda.com.ar
  #2 (permalink)  
Antiguo 04/04/2014, 22:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: subir varios archivos en un form con php

La subida de archivos se realiza con un elemento de entrada (input) de tipo file y con la función move_uploaded_file, la cual se encarga de subir el archivo al servidor. Al mismo tiempo, guardarías mediante una sentencia SQL, el nombre del archivo subido para acceder a él en un futuro a través de dicho nombre.

Código HTML:
Ver original
  1. <form action = "upload.php" method = "post" enctype = "multipart/form-data">
  2.     <input type = "file" name = "imagen1" />
  3.     <input type = "file" name = "imagen2" />
  4.     <input type = "file" name = "imagen3" />
  5.     <input type = "file" name = "imagen4" />
  6.     <input type = "submit" value = "Subir" />
  7. </form>

Código PHP:
Ver original
  1. $tipos = array("image/jpg", "image/jpeg", "image/png", "image/gif", "image/bmp");
  2. $i = 0;
  3.  
  4. foreach ($_FILES as $imagen){
  5.     if ($imagen["error"] == UPLOAD_ERR_OK and in_array($imagen["type"], $tipos)){
  6.         if (++$i == 1)
  7.             $nombre = $id . ".jpg";
  8.         else
  9.             $nombre = $id . "-0" . $i . ".jpg";
  10.  
  11.         $temporal = $imagen["tmp_name"];
  12.         $carpeta = "../imagenes/";
  13.         move_uploaded_file($temporal, $carpeta . $nombre);
  14.        
  15.         $query = mysqli_query($conexion, "INSERT INTO tabla (id_imagen, imagen) VALUES ($id, $nombre)");
  16.     }
  17.     else
  18.         echo "Se produjo un error al intentar subir el archivo";
  19. }

Lo que hago es simple. En el primer archivo, tengo un formulario con 4 elementos <input> de tipo file. Luego de seleccionar las imágenes deseadas, las envío a un archivo PHP que las subirá al servidor y guardarás sus nombres en la BD. En dicho archivo, tengo un array que contiene los tipos de archivo que admitiré en mi subida, que como verás, son los tipos más comunes de imagen. Además, tengo un contador $i que iniciará con el valor -1 y que será con el que sabré si estoy en la primera iteración o en una superior, por el tema de que quieres que la estructura del nombre de la primera imagen sea distinta al del resto.

El array multidimensional $_FILES es el que contiene a los archivos subidos; es multidimensional pues contiene un array por cada archivo, en donde las claves o índices de dichos arrays son name (nombre del archivo), tmp_name (nombre temporal del archivo), type (tipo del archivo), error (código de error, aquí puedes ver todos los códigos) y size (tamaño del archivo). Dado que $_FILES es un array, procedo a recorrerlo con un bucle ya que el proceso será el mismo para todos los archivos subidos. En cada iteración, la variable $imagen tomará a cada uno de los arrays contenidos en $_FILES, es decir, los arrays que contienen la información de cada archivo subido.

Ya estando en el bucle, compruebo que no se haya producido un error al momento de recibir el archivo desde el formulario y que el tipo del archivo corresponda con alguno de los que contiene el array $tipos, en caso de ser así, verifico el valor del contador, si éste aumentado en uno es igual a cero, es decir, es la primera imagen, le asigno como nombre el valor del $id del usuario o registro y lo concateno con el tipo de imagen que en este caso será JPG, caso contrario, le doy la forma que indicas, es decir, el valor del $id, seguido de un guión y el valor del contador y concatenado con el tipo de imagen.

Enseguida, asigno el nombre temporal del archivo a la variable $temporal y predetermino el valor de la variable $carpeta que será la ruta de la carpeta en la que se guardarán los archivos. Con la función move_uploaded_file, subo el archivo a la carpeta indicada en el servidor y más abajo, guardo el nombre del archivo en la tabla de la BD.

Te sugiero que uses comillas simples en lugar de las dobles que uso en este ejemplo, lo hice por el tema del resaltado del color del texto para que se vea más claro, pero por temas de eficiencia, es mejor utilizar comillas simples para texto simple (sin variables PHP ni etiquetas HTML).

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 05/04/2014, 16:25
 
Fecha de Ingreso: mayo-2010
Mensajes: 93
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: subir varios archivos en un form con php

wow muchisimas gracias por el tiempo que te tomaste para explicarlo!!! Voy a implementarlo en mi web. Luego comentare como me fue. Muchas gracias de vuelta, saludos!
__________________
Mi web de estética www.estarmaslinda.com.ar
  #4 (permalink)  
Antiguo 05/04/2014, 18:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: subir varios archivos en un form con php

Había olvidado la limitación por peso y dimensiones. Para el peso o tamaño de la imagen, tienes el índice size que menciono en la respuesta anterior. El tamaño está dado en bytes, de modo que si deseas limitar el tamaño en una medida superior, solamente necesitas hacer la conversión.

Para obtener las medidas de la imagen, utiliza la función getimagesize. Ingresa al enlace para que veas los ejemplos y puedas hacerlo.

Por cierto, olvidé cambiar los valores en el código anterior, la variable $i inicia con el valor -1 y en la condición, ++$i debe ser comparado con cero.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: form, imagenes, inputs, usuarios
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 19:36.