Noto varios errores en tu código. Para empezar, como te dije en la respuesta anterior, el total de imágenes subidas lo obtienes contando la cantidad de elementos de alguno de los cinco índices de
$files
, los cuales son 'name', 'tmp_name', 'type', 'size' y 'error'. De este modo:
Obtienes el total de elementos de
$files
que siempre serán cinco por lo dicho en el anterior párrafo. Por otro lado, lo siguiente:
No tiene sentido. Para empezar, antes de esa línea, no veo en dónde asignes un valor a
$rutas
, además, estás añadiendo elementos al array asociativo
$files
que solamente debe de contener a las cinco propiedades antes mencionadas. Si deseas almacenar en un array la ruta de cada imagen subida, crea uno nuevo.
Ten cuidado con los
exit
que colocas en los casos en los que no se puede subir la imagen, pues cortarían la ejecución del script y, por ende, no se podrían subir las demás imágenes.
Lo ideal es que guardes la ruta y el nombre de cada imagen en la BD ya sea por cada vez que se guarde la imagen en el servidor o bien guardar las rutas y nombres y al final del bucle, guardarlas.
Código PHP:
Ver originalif ($total <= $max_file_uploads && $totalUploaded <= $post_max_size){
$rutas = array(); //Array en donde almacenaré las rutas y nombres de las imágenes for ($i = 0; $i < $total; $i++){
$error = $files['error'][$i];
$size = $files['size'][$i] / 1048576;
$tmp_name = $files['tmp_name'][$i];
$name = $files['name'][$i];
if ($error == UPLOAD_ERR_OK
&& $size <= $upload_max_filesize && in_array($type, $types)){ echo 'El archivo ' . $name . ' ha sido subido<br />';
$guardar[] = 'img/' . $name;
}
else{
echo 'No se pudo subir el archivo ' . $name . '<br />';
}
}
else{
echo 'No se pudo subir el archivo ' . $name . ', su tamaño excede el límite o no es un archivo de imagen<br />';
}
}
$valores = "('" . implode("'), ('", $rutas) . "')"; mysqli_query($conexion, "INSERT INTO tabla (imagen) VALUES {$valores}"); }
Como puedes ver, creo un array justo antes de iniciar el bucle y por cada archivo subido al servidor, guardo su ruta y nombre. Al finalizar el bucle, le doy forma a la cadena a insertar con las rutas y nombres de las imágenes que se subieron al servidor, tomando una forma similar a esta:
Código MySQL:
Ver originalINSERTO
INTO tabla
(imagen
) VALUES ('img/imagen1.jpg'), ('img/imagen2.jpg'), ('img/imagen3.jpg')
Veo que trabajas con PDO, de modo que solo te quedaría adaptar la forma que presento de guardar datos en la BD con MySQLi a la manera en la que trabajas. Sería bueno que en lugar de colocar el nombre de las imágenes como llegaron por defecto, crearas cadenas aleatorias para cada una de ellas pues puede darse el caso de que se suban imágenes con los mismos nombres (en tiempos distintos) y podría ocurrir un reemplazo. Por cierto, el bloque de código en el que usas la estructura
Try - Catch
, está de más. Mejor deja el mensaje que había puesto inicialmente y, por favor, fíjate bien en cómo es que realizo el proceso para que no cometas más errores básicos.
Saludos