php-upload-multiple-files

Como subir varias imágenes o archivos con un formulario en php

Seguramente en algún momento nos habremos encontrado con que necesitamos cargar algún archivo desde php. Si ya tenemos claro como se hace, pero necesitamos subir más de uno, nos habremos dado cuenta de que solo con poner nombres distintos en los input no es suficiente.

La solución es un poquito diferente, pero a pesar de ello es prácticamente igual de simple. Supongamos que tenemos un formulario en el que ponemos nuestro nombre y subimos una foto:

<form action="upload.php" enctype="multipart/form-data">
<input type="name">
<input type="file" name="imagenuno">
</form>

Este formulario sería correcto, pero ahora vamos a imaginar que queremos subir dos fotos, y que nuestra lógica nos diría que poniendo un campo extra podríamos subir otra imágen más:

<form action="upload.php" enctype="multipart/form-data">
<input type="name">
<input type="file" name="imagenuno">
<input type="file" name="imagendos">
</form>

Este formulario también es correcto hablando de la codificación, pero no nos va a funcionar a la hora de subir la segunda imágen y capturarla, esto pasa por que el bloque de datos que se utiliza es el mismo para las imágenes, por tanto la solución pasa por crear un formulario como el siguiente:

<form action="upload.php" enctype="multipart/form-data">
<input type="name">
<input type="file" name="imagen[]">
<input type="file" name="imagen[]">
</form>

Esto lo que nos va a generar a la hora de subir el formulario es un array con todas las imágenes que queramos, ya que los formularios soportan arrays. En este caso tendríamos las imágenes subidas en la etiqueta con nombre «imagen», con lo que haciendo uso del array en php podríamos capturarlas por separado.

La forma de usarlas es la siguiente:

$imagenuno = $_FILE['imagen']['name'][0];
$imagendos = $_FILE['imagen']['name'][1];

Ahora tendremos un par de variables con el nombre de cada imágen del array. También podemos usar un foreach cuando queremos hacer subidas múltiples, y así poder procesarlas todas con una pequeña porción de código en lugar de andar una por una.


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.