Foros del Web » Programando para Internet » PHP »

Agregar fotos sin sobreescribir las que existen

Estas en el tema de Agregar fotos sin sobreescribir las que existen en el foro de PHP en Foros del Web. Hola, tengo un código para cargar fotos pero necesito que si el usuario no ha podido cargar todas en un primer momento, pueda entrar despues ...
  #1 (permalink)  
Antiguo 10/08/2013, 11:26
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Pregunta Agregar fotos sin sobreescribir las que existen

Hola, tengo un código para cargar fotos pero necesito que si el usuario no ha podido cargar todas en un primer momento, pueda entrar despues y cargar las faltantes. El problema es que como lo tengo lo que hace es reemplazar las que ya existen y lo que necesito es que agregue las nuevas y conserve las que ya existen. Este es mi código:

Código HTML:
Ver original
  1. <form action="fotos_cargadas.php" name="form2" enctype="multipart/form-data" id="form2" method="post" >
  2.         <th colspan="2">CARGAR FOTOS</th>
  3.         <tr>
  4.         <td>Id de Posada</td>
  5.         <td><input name="id_posada" type="text" value="<?php echo $id_posada; ?>" readonly="readonly" />
  6.         <input name="id_foto" type="hidden" value="<?php echo $id_foto; ?>">
  7.         </td>
  8.         </tr>
  9.         <tr>
  10.         <td>Nombre Posada</td>
  11.         <td><input name="nombre_posada" type="text" value="<?php echo $nombre_posada; ?>" readonly="readonly" /></td>
  12.         </tr>
  13.         <tr>
  14.             <td>FOTO 1</td>
  15.                         <td><input type="file" name="foto1" id="foto1" /></td>
  16.         </tr>    
  17.         <tr>
  18.             <td>FOTO 2</td>
  19.                         <td><input type="file" name="foto2" id="foto2" /></td>
  20.         </tr>    
  21.         <tr>
  22.             <td>FOTO 3</td>
  23.                         <td><input type="file" name="foto3" id="foto3" /></td>
  24.         </tr>    
  25.         <tr>
  26.             <td>FOTO 4</td>
  27.                         <td><input type="file" name="foto4" id="foto4" /></td>
  28.         </tr>    
  29.         <tr>
  30.             <td>FOTO 5</td>
  31.                         <td><input type="file" name="foto5" id="foto5" /></td>
  32.         </tr>    
  33.         <tr>
  34.             <td>FOTO 6</td>
  35.                         <td><input type="file" name="foto6" id="foto6" /></td>
  36.         </tr>    
  37.         <tr>
  38.             <td>FOTO 7</td>
  39.                         <td><input type="file" name="foto7" id="foto7" /></td>
  40.         </tr>    
  41.         <tr>
  42.             <td>FOTO 8</td>
  43.                         <td><input type="file" name="foto8" id="foto8" /></td>
  44.         </tr>
  45.         <tr>
  46.             <td>FOTO 9</td>
  47.                         <td><input type="file" name="foto9" id="foto9" /></td>
  48.            
  49.         <tr>
  50.           <td colspan="2" align="center"><input name="cargar" type="submit" id="cargar" value="Cargar" /></td>
  51.         </tr>
  52.         </tr>  
  53.      </form>

y el php:

Código PHP:
Ver original
  1. $id_posada = $_POST['id_posada'];
  2. $id_foto = $_POST['id_foto'];
  3.  
  4. $foto_nombre = substr($id_foto,0,-4);
  5. $codigo = substr($id_foto,0,-4);
  6.  
  7. $ruta1 = "../../images/galeria/large/$codigo/";
  8. $ruta2 = "../../images/galeria/thumbnails/$codigo/";
  9.  
  10. if (file_exists($ruta1)) {
  11. $extension = "jpg";
  12.  
  13. $i = 1;
  14. foreach($_FILES as $value){
  15.    // Si la imagen fue subida correctamente
  16.    if ( $value['error'] == UPLOAD_ERR_OK ){
  17.         $image = new ResizePicture($value['tmp_name']);
  18.  
  19.         $image->resize(444,420);
  20.         $w444 = $foto_nombre. '_' .$i. '.' . $extension;
  21.         $image->save($ruta1.$w444);
  22.  
  23.         $image->resize(54,54);
  24.         $w54 = $foto_nombre. '_'  .$i. '.' . $extension;
  25.         $image->save($ruta2.$w54);
  26.          $i++;
  27.     }
  28. }
  29. } else {
  30. mkdir($ruta1);
  31. mkdir($ruta2);
  32. $extension = "jpg";
  33.  
  34. $i = 1;
  35. foreach($_FILES as $value){
  36.    // Si la imagen fue subida correctamente
  37.    if ( $value['error'] == UPLOAD_ERR_OK ){
  38.         $image = new ResizePicture($value['tmp_name']);
  39.        
  40.         $image->resize(444,420);
  41.         $w444 = $foto_nombre. '_' .$i. '.' . $extension;
  42.         $image->save($ruta1.$w444);
  43.         $image->resize(54,54);
  44.        
  45.         $w54 = $foto_nombre. '_'  .$i. '.' . $extension;
  46.         $image->save($ruta2.$w54);
  47.          $i++;
  48.     }
  49. }
  50. }

Como puedo hacer esto????

Gracias
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 10/08/2013, 12:59
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Agregar fotos sin sobreescribir las que existen

Podría ser algo así....

Código PHP:
Ver original
  1. $image->resize(444,420);
  2.         $w444 = $ruta1.$foto_nombre. '_' .$i. '.' . $extension;
  3.         if (file_exists($w444))
  4.                 $w444 = rand(1000,9999).'_'.$w444;
  5.         $image->save($w444);
  6.  
  7.         $image->resize(54,54);
  8.         $w54 = $ruta2.$foto_nombre. '_' .$i. '.' . $extension;
  9.         if (file_exists($w54))
  10.                 $w444 = rand(1000,9999).'_'.$w54;
  11.         $image->save($w54);
__________________
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 =)
  #3 (permalink)  
Antiguo 10/08/2013, 14:48
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Agregar fotos sin sobreescribir las que existen

Hola Nemutagk gracias por contestar, pero no funciona... Sigue reemplazando las fotos y no agrega nuevas ???????
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 10/08/2013, 21:52
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años, 6 meses
Puntos: 23
Respuesta: Agregar fotos sin sobreescribir las que existen

buenas!

se me ocurre que en lugar de tomar en cuenta el nombre unicamente tambien tomes en cuenta la hora, minutos y segundos para crear el nombre, porque es imposible que todo suba al mismo y eso hace que tu variable sea mas complicada de repetirse y asi evitar sobrescribirlo

saludos
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #5 (permalink)  
Antiguo 10/08/2013, 21:58
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Agregar fotos sin sobreescribir las que existen

Si estaba bien lo que me indicaste pero ya se porque no me funciona. Es porque tengo que incrementar en 1 y no se como. Yo las guardo asi P0001_1, P0001_2, P0001_3 que viene de:

$codigo = substr($id_foto,0,-4);
$extension = "jpg";
$w444 = $codigo. '_' .$i. '.' . $extension;

que va en:

Código PHP:
Ver original
  1. if (file_exists($ruta1)) {
  2. $extension = "jpg";
  3. $i = 1;
  4. foreach($_FILES as $value){
  5.    // Si la imagen fue subida correctamente
  6.    if ( $value['error'] == UPLOAD_ERR_OK ){
  7.         $image = new ResizePicture($value['tmp_name']);
  8.         $image->resize(444,420);
  9.        
  10.         $w444 = $codigo. '_' .$i. '.' . $extension;
  11.         $image->save($ruta1.$w444);
  12.  
  13.         $image->resize(54,54);
  14.         $w54 = $codigo. '_'  .$i. '.' . $extension;
  15.         $image->save($ruta2.$w54);
  16.          $i++;
  17.     }
  18. }
  19. }

Entonces la siguiente debería llamarse P0001_4 (por ejemplo) y no se como lograr esto

???
__________________
Caminando con el corazón partío
  #6 (permalink)  
Antiguo 10/08/2013, 22:10
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 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, AÍ
__________________
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 =)
  #7 (permalink)  
Antiguo 10/08/2013, 22:15
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Agregar fotos sin sobreescribir las que existen

Pero me funciona bien para guardarlas, solo no funciona para agregar nuevas. Que me sugieres que puedo hacer porque esto me esta volviendo loca. He tratado de buscar un tutorial para hacer un gestor galeria de fotos pero no he conseguido nada que sirva.
__________________
Caminando con el corazón partío
  #8 (permalink)  
Antiguo 10/08/2013, 22:32
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 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
  #9 (permalink)  
Antiguo 10/08/2013, 22:44
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Agregar fotos sin sobreescribir las que existen

Hola, muchas gracias. Lo probé y me da este error:

Warning: imagejpeg() [function.imagejpeg]: Unable to open '../../images/galeria/large/P0001/P0001_1.' for writing: No such file or directory in C:\AppServ\www\phpMyAdmin\vdv\func\ResizePicture.p hp on line 50

Warning: imagejpeg() [function.imagejpeg]: Unable to open '../../images/galeria/thumbnails/P0001/P0001_1.' for writing: No such file or directory in C:\AppServ\www\phpMyAdmin\vdv\func\ResizePicture.p hp on line 50
__________________
Caminando con el corazón partío
  #10 (permalink)  
Antiguo 10/08/2013, 22:47
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Agregar fotos sin sobreescribir las que existen

Upppsss, fíjate que eh puesto los mkdir() en la parte del if que indica que ya existe, cuando deben estar en el else!!! hay que cambiar de lugar >.<

Código PHP:
Ver original
  1. if (is_dir($ruta1)) {
  2.     // - 1 porque scandir agrega 2 items al array, el . y el .., así obtenemos el ID sigueinte!
  3.     $idFile = count(scandir($ruta1)) - 1;
  4. }else {
  5.     $idFile = 1;
  6.     mkdir($ruta1);
  7.     mkdir($ruta2);
  8. }
__________________
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 =)
  #11 (permalink)  
Antiguo 10/08/2013, 22:55
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Agregar fotos sin sobreescribir las que existen

Waoooo fabuloso, ahora si funciona. De verdad te lo agradezco mucho porque esta página web me ha dado muchos dolores de cabeza. Tengo varios años con php y sigo con un motón de lagunas que no me dejan avanzar en muchas cosas. Mil gracias.

__________________
Caminando con el corazón partío

Etiquetas: fotos, sobreescribir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:27.