Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/08/2013, 22:32
Avatar de Nemutagk
Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: Agregar fotos sin sobreescribir las que existen

Cielos. hasta me da pena decirlo por no verlo desde un principio....

Todo tu código esta mal, no puedes hacer un foreach de $_FILES porque $_FILES contiene varios items que se asocian a un mismo archivo (tmp_name, name, type, size y error) por lo tanto en varios loop se hace referente al mismo archivo, así que todo esta mal, hagamos las cosas bien =)

Primero, cambia todos los name de los input:file a "fotos[]", checa con especial cuidado los corchetes en el name, son muy importantes, todos deben tener el mismo name!

Ejemplo:
Código HTML:
Ver original
  1. <td><input type="file" name="foto[]" id="foto1" /></td>
  2. <td><input type="file" name="foto[]" id="foto2" /></td>
  3. <td><input type="file" name="foto[]" id="foto3" /></td>
  4. <td><input type="file" name="foto[]" id="foto4" /></td>

Ahora, en el código PHP haremos esto!
Código PHP:
Ver original
  1. <?php
  2. //aquí
  3. $id_posada = $_POST['id_posada'];
  4. $id_foto = $_POST['id_foto'];
  5.  
  6. $foto_nombre = substr($id_foto,0,-4);
  7. $codigo = substr($id_foto,0,-4);
  8. $extension = "jpg";
  9.  
  10. $ruta1 = "../../images/galeria/large/$codigo/";
  11. $ruta2 = "../../images/galeria/thumbnails/$codigo/";
  12.  
  13. foreach($_FILES['foto']['error'] as $key => $value) {
  14.     if ($value == UPLOAD_ERR_OK) {
  15.         $image = new ResizePicture($_FILES['foto']['tmp_name'][$key]);
  16.  
  17.         $image->resize(444,420);
  18.         $w444 = $foto_nombre. '_' .$key. '.' . $extension;
  19.         $image->save($ruta1.$w444);
  20.  
  21.         $image->resize(54,54);
  22.         $w54 = $foto_nombre. '_'  .$key. '.' . $extension;
  23.         $image->save($ruta2.$w54);
  24.     }
  25. }

Ahora, tu código tiene un problema, y es que siempre se asume que es la primera vez que se suben los archivos, por lo tanto el ID de cada archivo será 1, así que primero hay que verificar si ya existe la carpeta, si existe, ver cuantos archivos hay dentro de la carpeta y así asignar el ID indicado!

Código PHP:
Ver original
  1. <?php
  2. $id_posada = $_POST['id_posada'];
  3. $id_foto = $_POST['id_foto'];
  4.  
  5. $foto_nombre = substr($id_foto,0,-4);
  6. $codigo = substr($id_foto,0,-4);
  7. $extension = "jpg";
  8.  
  9. $ruta1 = "../../images/galeria/large/$codigo/";
  10. $ruta2 = "../../images/galeria/thumbnails/$codigo/";
  11.  
  12. //si la carpeta existe contamos los archivos que hay dentro!
  13. if (is_dir($ruta1)) {
  14.     // - 1 porque scandir agrega 2 items al array, el . y el .., así obtenemos el ID sigueinte!
  15.     $idFile = count(scandir($ruta1)) - 1;
  16.     mkdir($ruta1);
  17.     mkdir($ruta2);
  18. }else {
  19.     $idFile = 1;
  20. }
  21.  
  22. foreach($_FILES['foto']['error'] as $key => $value) {
  23.     if ($value == UPLOAD_ERR_OK) {
  24.         $image = new ResizePicture($_FILES['foto']['tmp_name'][$key]);
  25.  
  26.         $image->resize(444,420);
  27.         $w444 = $foto_nombre. '_' .$idFile. '.' . $extension;
  28.         $image->save($ruta1.$w444);
  29.  
  30.         $image->resize(54,54);
  31.         $w54 = $foto_nombre. '_'  .$idFile. '.' . $extension;
  32.         $image->save($ruta2.$w54);
  33.         $idFile++;
  34.     }
  35. }

Prueba el código y comenta como va!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 10/08/2013 a las 22:37