En este ejemplo podrán ver como subir multiples archivos o imágenes al servidor y guardarlas usando PHP y MySQL, esto es una característica que aveces se requiere en ciertos proyectos, sistemas de gestión de contenidos o simples galerías de imágenes.
En este ejemplo es una especie de continuación del ejemplo anterior sobre subir una imagen al servidor, usaremos la misma clase class.upload.php.
Como funciona
Muchos se preguntaran como guardar imágenes o archivos en la base de datos, hay 2 for,as de hacerlo, una es guardando físicamente los archivos en la base de datos usando el formato blob, pero esto es mas pesado para la base de datos y otro es guardar el archivo físico en el servidor y guardar una referencia (por ejemplo la ubicación) en la base de datos.
Formulario
El formulario con respecto a la version anterior tiene ciertas modificaciones, el nombre del campo se cambia y se agregan corchetes [] para definir un array, también se agrega el atributo multiple al campo y queda de la siguiente manera:
<form enctype="multipart/form-data" method="post" action="upload.php"> <input name="image[]" required="" type="file" multiple /> <br> <input type="submit" value="Upload"> </form>
Subir imágenes o archivos
Para las imágenes o archivos usaremos un algoritmo para subir multiples imágenes o archivos con la clase class.upload.php que encontraremos en la documentación de la librería :
$error = false; $files = array(); foreach ($_FILES['image'] as $k => $l) { foreach ($l as $i => $v) { if (!array_key_exists($i, $files)) $files[$i] = array(); $files[$i][$k] = $v; } } foreach ($files as $file) { $handle = new Upload($file); if ($handle->uploaded) { $handle->Process("uploads/"); if ($handle->processed) { // usamos la funcion insert_img de la libreria db.php insert_img("uploads/",$handle->file_dst_name); } else { $error = true; echo 'Error: ' . $handle->error; } } else { $error = true; echo 'Error: ' . $handle->error; } unset($handle); }
Base de datos
Para almacenar las imágenes simplemente tenemos una tabla llamada image:
create table image( id int not null auto_increment primary key, folder varchar(255), src varchar(255), created_at datetime not null );
En cuanto a la base de datos tenemos los siguientes campos:
- Id: identificador de los archivos
- Folder: La ubicación en la que se encuentra el archivo.
- Src: El nombre del archivo
- Created_At: La fecha de creación
Contenido del paquete
El paquete de descarga cuenta con 8 archivos:
- schema.sql : El código de la base de datos.
- class.upload.php : Clase para subir imágenes/archivos, recortar, etc.
- db.php : La conexión a la base de datos y las funciones de agregar, mostrar y eliminar.
- form.php : El formulario para seleccionar las imágenes o archivos.
- upload.php : El algoritmo para subir imágenes or archivos y agregar a la base de datos.
- download.php: Algoritmo para descargar el archivo desde el servidor.
- images.php : Muestra las imágenes que hemos subido al servidor y que están “guardadas” en la base de datos.
- files.php: Muestra los archivos que hemos subido y que están “guardados” en la base de datos en formato de tabla
- delete.php: Eliminar imágenes o archivos.
Descarga
A continuación te dejo un enlace para que puedas descargar los archivos de código.
[sociallocker]Descargar: multi_upload_php_mysql
[/sociallocker]Conclusion
Ya puedes empezar a implementar la aplicación para lo que tu quieras.
Te invito a que me comentes que te pareció este ejemplo, si te gustaría que publicara mas.
Gracias, buen aporte!!
Hola, muy buen aporte muchas gracias por compartir. Una pregunta, por qué en una computadora no se cargan las imágenes, lo he probado en chrome en varias compus, pero en una en especifico no sube las fotos. En el teléfono solo se sube una foto.
Gracias por contestar.
Es posible que el problema sea el peso de las imagenes, ya que la mayoria de servidores se limitan a soportar archivos de maximo 2MB, asi que si el archivo pesa mas de 2mb el servidor no lo sube
Buen aporte; Tengo una inquietud, inserta múltiples imágenes pero por cada imagen sería un registro en la base de datos, ¿ y si quiero insertar varias imágenes pero en un mismo registro de la BD? , estoy desarrollando un sistema para una inmobiliaria. A cada inmueble se le agregan 3 fotos, lo hice de esta forma en la BD cree los tres campos ejemplo: img1, img2, img3. Me inserta las url de las tres imágenes en la base de datos, pero en la carpeta de mi servidor solo guarda la primera. Gracias
Pdta: para tomar las tres imágenes utilizo tres input
Asi es daniel.
Hola, se podria hacer que al subir el archivo te cambie el nombre y te mantenga la extensión original? Gracias Por tu Aporte
Muy buen aporte, voy a implementar ahora
Hola, Agustin, he visto esta aportación y es muy buena, pero lo que me falta es que no lo suba con el nombre original, que cree un codigo y ponga ese nombre al archivo, y otra cosa es que si se podria hacer el download. Muchas Gracias por tus aportaciones, te dejo mi web para que le eches un vistazo http://www.dacoto.xyz y suerte con las creaciones, muchas gracias por estas aportaciones.
Hola, ya lo actualize, le agregue la opcion de descarga, te pasare el algoritmo para cambiarle el nombre mas tarde.
Muchísimas Gracias por tu aporte. =)