Ver Mensaje Individual
  #9 (permalink)  
Antiguo 25/08/2014, 23:26
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Imagen repetida al subir a servidor, upload fotos

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:

Código PHP:
Ver original
  1. $total = count($files);

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:

Código PHP:
Ver original
  1. $files[$i] = $rutas;

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 original
  1. if ($total <= $max_file_uploads && $totalUploaded <= $post_max_size){
  2.     $rutas = array(); //Array en donde almacenaré las rutas y nombres de las imágenes
  3.     for ($i = 0; $i < $total; $i++){
  4.         $error = $files['error'][$i];
  5.         $size = $files['size'][$i] / 1048576;
  6.         $tmp_name = $files['tmp_name'][$i];
  7.         $name = $files['name'][$i];
  8.         $type = getimagesize($tmp_name)['mime'];
  9.  
  10.         if ($error == UPLOAD_ERR_OK && $size <= $upload_max_filesize && in_array($type, $types)){
  11.             if (move_uploaded_file($tmp_name, 'img/' . $name)){
  12.                 echo 'El archivo ' . $name . ' ha sido subido<br />';
  13.                 $guardar[] = 'img/' . $name;
  14.             }
  15.             else{
  16.                 echo 'No se pudo subir el archivo ' . $name . '<br />';
  17.             }
  18.         }
  19.         else{
  20.             echo 'No se pudo subir el archivo ' . $name . ', su tamaño excede el límite o no es un archivo de imagen<br />';
  21.         }
  22.     }
  23.  
  24.     $valores = "('" . implode("'), ('", $rutas) . "')";
  25.     mysqli_query($conexion, "INSERT INTO tabla (imagen) VALUES {$valores}");
  26. }

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 original
  1. INSERTO 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
__________________
«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