Foros del Web » Programando para Internet » PHP »

A vueltas con eliminar varias imágenes del servidor a la vez

Estas en el tema de A vueltas con eliminar varias imágenes del servidor a la vez en el foro de PHP en Foros del Web. Hola a todos/as. me estoy volviendo loca. os cuento: tengo dos tablas relacionadas entre sí: en una meto los datos de una noticia y en ...
  #1 (permalink)  
Antiguo 02/07/2009, 00:32
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
A vueltas con eliminar varias imágenes del servidor a la vez

Hola a todos/as. me estoy volviendo loca. os cuento:

tengo dos tablas relacionadas entre sí: en una meto los datos de una noticia y en otra meto todas las imágenes que esa noticia lleva.

tabla noticias:

idnoticia -- autonumérico identificador de la noticia
noticia-- texto en sí

(Supongamos estos dos campos únicamente para simplificar)

tabla imagenes:

idimagen -- autonumérico identificador de cada imagen
idnoticiapk -- es el que relaciona esta tabla con la anterior. es el idnoticia de la noticia correspondiente.
imagen -- ruta en el servidor de la imagen
imagenth -- ruta en el servidor del thumbail de la imagen

bien. ahora supongamos que lo que deseo es eliminar una noticia. pues la lógica es:
1) identificar el idnoticia de la noticia que quiero eliminar
2) una vez que tengo ese idnoticia, irme a la tabla 'imagenes' y sacar las imágenes asociadas a esa noticia, sacar sus rutas.
3) obtenidas sus rutas, eliminar esas imágenes a través de unlink del servidor.
4) eliminadas las imágenes del servidor, entonces eliminar tanto las imágenes de la tabla 'imagenes' de la base de datos y posteriormente, eliminar la noticia de la tabla 'noticias'.

todo esto traducido a código es esto:

Código PHP:
//elimino las imágenes asociadas a esa noticia en el servidor
$sql="SELECT imagen,imagenth FROM imagenes WHERE idnoticiapk ='".$id."'";
    
$resultadoel=mysql_query($sql) or die (mysql_error()); 
    
$imagen=mysql_result($resultadoel,0,"imagen");
    
$imagenth=mysql_result($resultadoel,0,"imagenth");
    
unlink("$imagen");
    
unlink("$imagenth"); 
/////////
//eliminadas las imágenes, elimino los registros que tenían en la base de datos
//de la tabla 'imagenes'
    
mysql_query("DELETE FROM imagenes WHERE idnoticiapk ='$id");
//////////
//por último, elimino la noticia de la tabla 'noticias'
    
mysql_query("DELETE FROM noticias WHERE idnoticia ='$id"); 
bien. cuál es el problema? pues que hace todo correctamente pero si la noticia tiene asociada más de una imágen, del servidor sólamente elimina la primera, las otras que haya asociadas a esa noticia ahí las queda.

qué he de hacer para que me elimine todas las imágenes asociadas a esa noticia del servidor?

un beso,
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #2 (permalink)  
Antiguo 02/07/2009, 00:48
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: A vueltas con eliminar varias imágenes del servidor a la vez

Código PHP:
//elimino las imágenes asociadas a esa noticia en el servidor
$sql="SELECT imagen,imagenth FROM imagenes WHERE idnoticiapk ='".$id."'";
$resultadoel=mysql_query($sql) or die (mysql_error()); 

    while(
$imagenes mysql_fetch_row($resultadoel))
    {
          
unlink($imagenes[0]);    // path de la imagen normal
          
unlink($imagenes[1]);    // path del thumb
    
}
/////////
//eliminadas las imágenes, elimino los registros que tenían en la base de datos
//de la tabla 'imagenes'
    
mysql_query("DELETE FROM imagenes WHERE idnoticiapk ='$id");
//////////
//por último, elimino la noticia de la tabla 'noticias'
    
mysql_query("DELETE FROM noticias WHERE idnoticia ='$id"); 
y así?
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 18:14.