Foros del Web » Programando para Internet » PHP »

Eliminar registro en BD y foto en carpeta

Estas en el tema de Eliminar registro en BD y foto en carpeta en el foro de PHP en Foros del Web. Hola amigos. Lo que necesito es eliminar el registro en la BD, y también las fotos que corresponden a ese registro. El registro lo elimino ...
  #1 (permalink)  
Antiguo 15/04/2003, 20:06
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
Eliminar registro en BD y foto en carpeta

Hola amigos.

Lo que necesito es eliminar el registro en la BD, y también las fotos que corresponden a ese registro.

El registro lo elimino asi:

$query2="delete from fotos where cid =".$cid ."";
$result2 = mysql_query($query2);


Pero no se como eliminar las fotos en la carpeta que corresponden a este registro.

Ayuda. Gracias!
  #2 (permalink)  
Antiguo 15/04/2003, 20:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues tendrás que hacer una consulta a tu BD para obtener el campo donde guardes el nombre y/o path de la imagen a borrar ..

Osese, algo tipo.

Código PHP:
// antes de tu consulta DELETE .. obvio xD
$query="SELECT imagen_url FROM tabla WHERE cid='$cid'"
$imagen_url=mysql_result($query,"imagen_URL");

// y con ese $imagen_url .. componer el path donde tengas esa imgane para hacerle un unlink() 

if (unlink($imagen_url)){ // Esto sería el "delete" del archivo .. 
   
echo "se borro $imagen_url con exito";
} else {
   echo 
"No se pudo borrrar $imagen_url .. o no está ahí .. o no tengo permisos .. o vete a saber :P";

Cualquier duda con unlik() .. vista: www.php.net/unlink

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 15/04/2003, 21:11
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
Bueno, los usuarios antes de borrar tiene que ver lo que van a borrar con una formula llenada con la info de la BD, de modo que al dar click en borrar, esta info va la la pag que borra, eso significa que puedo pasar los nombres de la imagenes y recogerlos en la otra pagina para borrarlos de la carpeta, algo como:

aqui el borrado de la BD, despues el borrado de la carpeta:

unlink("../images/clients/$image1");
unlink("../images/clients/$image2");
unlink("../images/clients/$image3");


Que tal??
  #4 (permalink)  
Antiguo 15/04/2003, 21:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues a nivel de seguridad .. si vas paseando en el URL esos datos .. serán suceptibles de ser modificados (alterados)

Por eso yo te proponía el hacer una consulta por tu $cid para obtener las imagens que realmente son asociadas a ese registro(s) y no otras ...

Si quieres ahorrarte esa consulta (consulta bajo el cid condicion para obtener el nombre de la imagen asociada ..) propaga esos datos (esas $imagen) en una sesion al menos . .Por lo menos será más seguro que ir paseandolos por el URL ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/04/2003, 21:35
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
Cluster, segui tu consejo, hago un select con el ID.

en la pagina de borrado me manda
tengo:
$query3 = "Select * from `fotos` where username ='".$username."' and cid=".$cid;
$result3 = mysql_query($query3);
$row= mysql_fetch_array($result3);
$image1 = $row["image1"];
$image2= $row["image2"];
$image3 = $row["image3"];
$image4 = $row["image4"];
$image5 = $row["image5"];
$image6 = $row["image6"];
//aqui voy a borrar las fotos de la carpeta
unlink("../images/clients/$image1");
unlink("../images/clients/$image2");
unlink("../images/clients/$image3");
unlink("../images/clients/$image4");
unlink("../images/clients/$image5");
unlink("../images/clients/$image6");



me manda dos tipos de advertencias:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/dombeach/public_html/php/php/bdb3.php on line 213

Warning: unlink(../images/clients/) [function.unlink]: Is a directory in /home/dombeach/public_html/php/php/bdb3.php on line 221


eso son errores o advertencias??

he revisado el codigo, donde dice:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/dombeach/public_html/php/php/bdb3.php on line 213

apunta a esta parte del script:
$row= mysql_fetch_array($result3);

y no veo nada mal

y esto:

Warning: unlink(../images/clients/) [function.unlink]: Is a directory in /home/dombeach/public_html/php/php/bdb3.php on line 221
me lo apunta a:
unlink("../images/clients/$image1");


y el path del directorio est[a bueno. No sera que lo pregunta es si quiero borrar el directorio? o me advierte que esta funcion es para borrar archivos no directorios?

Tonces???

gracias!
Warning: unlink(../images/clients/) [function.unlink]: Is a directory in /home/dombeach/public_html/php/php/bdb3.php on line 221

Última edición por rashid; 15/04/2003 a las 21:50
  #6 (permalink)  
Antiguo 15/04/2003, 21:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Intenta usar rutas "absolutas" .. tipo:

/home/dombeach/public_html/a...aqui no se .../images/clients/archivo.tal

ó

./images/clients/archivo.tal

Y sobre todo .. asegurate que tu $image1 tenga valor antes de atacar tu unlink() (le haces un echo y lo miras) .. porqué ahí parace que hay problemas con la consulta que haces para obtener ese $imgen1 ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 15/04/2003, 21:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por cierto .. el mysql_query(con el DELETE) .. donde lo haces? .. Lo estas haciendo antes de ejecutar ese código que pusistes?

(parece que así lo estas haciendo . pues el primer error es de Msyql .. )

Y .. usa preferentemente:

Código PHP:
$result3 mysql_query($query3) or die(mysql_error());
$rowmysql_fetch_array($result3) or die(mysql_error()); 
Para detectar errores de SQL o de Mysql más exactos...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 15/04/2003, 22:15
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
reacomode todo, y ahora lo tengo
Código PHP:
        $query3 "Select * from `fotos` where cid=".$cid;
            
$result3 mysql_query($query3) or die(mysql_error());
            
$rowmysql_fetch_array($result3)or die(mysql_error());
            
$image1 $row["image1"];
            
$image2$row["image2"];
            
$image3 $row["image3"];
            
$image4 $row["image4"];
            
$image5 $row["image5"];
            
$image6 $row["image6"];
            
            echo 
"esta es la image1 ".$image1;
//aqui voy a borrar las fotos de la carpeta
unlink("www.dominical.biz/php/images/clients/$image1");
unlink("../images/clients/$image2");
unlink("../images/clients/$image3");
unlink("../images/clients/$image4");
unlink("../images/clients/$image5");
unlink("../images/clients/$image6");

        
$query="delete from Comercials where cid =".$cid ." and username = '"$username ."'";         
        
$result mysql_query($query)or die(mysql_error());

        
$query2="delete from fotos where cid =".$cid ."";         
        
$result2 mysql_query($query2)or die(mysql_error()); 
Y corre bien, el problema es cuando una foto no existe. entonces se pega ahi y me manda
Warning: unlink(../images/clients/) [function.unlink]: Is a directory in /home/dombeach/public_html/php/php/bdb3.php on line 222

debido a que la foto no existe.
  #9 (permalink)  
Antiguo 15/04/2003, 22:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues hazte un condicional .. revisando si la imagen existe (el archivo) usando file_exists()

Código PHP:
if (@file_exists("../images/clients/$image2")){
   
unlink("../images/clients/$image2"); //si existe .. se borra

Así con todas esas imagenes (campos) ..

Pero, si tan solo la imagen no existe porqué no se definió una imagen en ese campo concreto (cualquiera) .. tan solo podrías hacer:

Código PHP:
if (!empty($image2)){
   
unlink("../images/clients/$image2"); //si tiene algo la cadena .. se borra (se asume que el  nombre es correcto)

Eso irá muchooo mas rápido a la hora de borrar ya que no está mirando si está fisicamente en el HD del servidor .. sino que solo mira si la cadena del nombre de la imagen es o no es NULL (vacia ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 15/04/2003 a las 22:31
  #10 (permalink)  
Antiguo 16/04/2003, 11:52
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
Entiendo Cluster, la diferencia entre uno y otro es que el primero, if (@file_exists("../images/clients/$image2")){
unlink("../images/clients/$image2"); //si existe .. se borra
}

verifica la existencia de la imágen en la carpeta, el otro
if (!empty($image2)){
unlink("../images/clients/$image2"); //si tiene algo la cadena .. se borra (se asume que el nombre es correcto)
}

verifica si existe en la BD, por eso es más rápida la segunda que la primera. O me equivoco?

gracias.
  #11 (permalink)  
Antiguo 16/04/2003, 12:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La primera opción mira si está fisicamente creado ese archivo en el directorio que le indicas .. Ese acceso al sistema de archivos es un tiempo que tarda el proceso ..

La segunda opción tan solo mira si el campo de tu BD "imagen" (el que obtienes por tus $row['imagen'] ... ) tenga una cadena (string) "algo escrito" en el o no .. Si se supone que en ese campo va a existir siempre un dato si hay imagen referenciada .. pues podemos dar por "seguro" que si no hay nada .. es que no hay dato de la imagen y en consecuencia no existe la imagen ..

El primer método sería seguro 100% .. pero algo mas lento que el segundo vs seguridad .. Haz tus pruebas y te quedas con el que mas te guste.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 16/04/2003, 15:11
 
Fecha de Ingreso: enero-2002
Ubicación: Perez Zeledon Costa Rica
Mensajes: 1.009
Antigüedad: 22 años, 3 meses
Puntos: 11
Cluster, y en el caso donde los clientes hacen un update de una imagen, de modo que quedarán fotos en la carpeta que no corresponden a ningún item.
Hay alguna forma de eliminarlas con la seguridad de que no dejará items sin las fotos?
me explico?
  #13 (permalink)  
Antiguo 16/04/2003, 15:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues eso ya es cosa de tus scripts donde hagas el "update" .. Lo mismo que buscas una imagen para borrarla si así lo hace pasando por el script que aquí hicistes .. Lo mismo tiens que hacerte para el UPDATE que hagas .. SI hay algun campo q se "actualiza" sin imagen.. deberas lanzar tu rutina de borrado para esa imagen de ese campo concreto ..

Solo te pido que te sientes un momento .. y piensa como trabaja tu aplicación .. como es el proceso de borrado/etc .. y veras que no es tan dificil ... El procedimiento base lo tienes ya implementado ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 13/01/2004, 11:01
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 3 meses
Puntos: 0
componer el path con la consulta a BD no funciona

Hola estoy leyendo el ejemplo que pones aqui cluster y no va bien el tema de la ruta, si el nombre del archivo a borrar se encuentra dentro de un directorio, en mi caso : imagenes/archivo.jpg no lo encuentra.
la variable que me dice el nombre del archivo $imagen en mi caso me trae la ruta al archivo y es $imagen=imagenes/imagen.jpg ¿como se puede hacer para borrar con esta variable el archivo en cuestion?
Hace dias que estoy con esto y no logro darle la vuelta, espero que me puedas ayudar y garcias.
  #15 (permalink)  
Antiguo 13/01/2004, 14:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
midpunto .. lee el mensaje completo y fijate bien donde se hace mención a las rutas absolutas ...

La ruta absoluta de tu servidor la puedes obtener con la variable de servidor:

$_SERVER['DOCUMENT_ROOT']

así que si usas esa ruta como constante y "raiz" de tu sitio .. podrás usarla en conjunto con la que tienes en tu BD.

Código PHP:
$path_completo=$_SERVER['DOCUMENT_ROOT'].$imagen 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 11:53.