Foros del Web » Programando para Internet » PHP »

PHP OO Problemas con un simple unlink()

Estas en el tema de Problemas con un simple unlink() en el foro de PHP en Foros del Web. Buenas, llevo hoyas sin conseguir borrar un archivo mediante php (de forma dinamica), así que os voy a mostrar el código para ver si vosotros ...
  #1 (permalink)  
Antiguo 03/02/2011, 03:01
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Problemas con un simple unlink()

Buenas, llevo hoyas sin conseguir borrar un archivo mediante php (de forma dinamica), así que os voy a mostrar el código para ver si vosotros os dais cuenta de que está mal:

Código PHP:
<?

//recibimos la variable 
$id=$_GET[id];
//conectamos a la base 
 
$connect=mysql_connect("LOCALHOST","USUARIO","CLAVE");
 
//Seleccionamos la base
 
mysql_select_db("BD",$connect);
//borramos los registros pertenecientes a la id 
mysql_query("delete from temas where id_tema='$id'",$connect);

$archivo='$row["imagen"]'//   Aquí creo la variable con la ruta...
 
@unlink("../images/temas/$archivo");

header("location: http://mundowarhammero.comlu.com/administrar/index.php?panel=temas"); 
?>
Estoy intentando borrar junto con una fila de la base de datos, un archivo .jpg

El caso es que poniendo:

@unlink("../images/temas/foto.jpg");

Si que funciona y borra el archivo, pero si pongo la variable o llamo al nombre del archivo directamente desde el unlink, no funciona, y lo que más me desconcierta es que no me da errores de sintaxis :S

¿Alguna idea?

Un saludo y gracias
  #2 (permalink)  
Antiguo 03/02/2011, 09:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problemas con un simple unlink()

a ver, intenta quitar la @ de unlink() y ejecuta tu script de nuevo, pero ahora pasale la variable que dices te da problemas...

es cierto que no es un error de sintaxis, pero el @ te impide ver el verdadero error...

¿que resulta?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 03/02/2011, 16:15
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

Pues, quitándole la @ sigue sin funcionarme, pero tampoco me muestra error en la sintaxis...
  #4 (permalink)  
Antiguo 03/02/2011, 16:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problemas con un simple unlink()

Cita:
Iniciado por Malekith Ver Mensaje
Pues, quitándole la @ sigue sin funcionarme, pero tampoco me muestra error en la sintaxis...
te repito de nuevo, no tienes errores de sintaxis, es mas... ¿si sabes lo que es un error de sintaxis?

pero seguramente ocurre algo mas.... y no lo sabes, intenta agregar esto al inicio de tu script:
Código PHP:
error_reporting(E_ALL);
ini_set('display_errors'1); 
¿que sucede?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 03/02/2011, 18:32
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

Hombre claro que sé lo que es un error de sintaxis Oo

He hecho lo que me dijistes, y pasa exactamente lo mismo, borra los registros de la tabla, pero el archivo aguanta ahí sin problemas.
  #6 (permalink)  
Antiguo 03/02/2011, 18:59
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problemas con un simple unlink()

$archivo='$row["imagen"]'

Este código está rarito por un par de razones, en primer lugar no aparece de donde sacaste $row, pero talvez quieras que asumamos que es por una consulta. Si la consulta se da después de borrar el registro pues vaya torpeza de novato, obviamente el valor no aparecerá porque se ha borrado antes, en ese caso deberías hacer la consulta antes de eliminar el registro, por otra parte qué hace esas comillas simples? talvez lo hayas copiado mal el código aquí, pero esas comillas por nada del mundo debe aparecer, sino eso haría que tu variable $archivo contenga literalmente lo que encierra las comillas simples y no el valor del array $row, revisa ese par de cosas. Suerte!
  #7 (permalink)  
Antiguo 03/02/2011, 20:16
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

He probado con ésto, y nada...

Código PHP:
<?
error_reporting
(E_ALL);
ini_set('display_errors'1);  

//recibimos la variable 
$id=$_GET[id];
//conectamos a la base 
include('../conexion.php');

$row=mysql_query("select * from temas where id_tema='$id'",$connect); 
$archivo=$row["imagen"];

unlink("../images/temas/$archivo");

//borramos los registros pertenecientes a la id 
mysql_query("delete from temas where id_tema='$id'",$connect);
 
header("location: administrar/index.php?panel=temas"); 
?>

Última edición por Malekith; 03/02/2011 a las 20:23
  #8 (permalink)  
Antiguo 03/02/2011, 20:32
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

También probé así y nada:


Código PHP:
<?
error_reporting
(E_ALL);
ini_set('display_errors'1);  

//recibimos la variable 
$id=$_GET[id];
//conectamos a la base 
include('../conexion.php');

$archivo=mysql_query("select imagen from temas where id_tema='$id'",$connect); 

unlink("../images/temas/$archivo");

//borramos los registros pertenecientes a la id 
mysql_query("delete from temas where id_tema='$id'",$connect);
 
header("location: administrar/index.php?panel=temas"); 
?>
  #9 (permalink)  
Antiguo 03/02/2011, 20:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con un simple unlink()

1- mysql_query() te devuelve un identificador para acceso al juego de resultados generado por ejecutar la consulta. Si la consulta falla, entonces devuelve falso.
2- Despues de ejecutar la consulta debes usar mysql_fetch_xxx() (Donde xxx = array, assoc, row) para leer cada registro del juego de resultados.
3- Dependiendo de la funcion usada para leer el registro podras asignar el valor a tu variable $archivo y solo entonces eliminar la imagen.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 03/02/2011, 21:00
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

Hice ésto:

Código PHP:
<? 
error_reporting
(E_ALL); 
ini_set('display_errors'1);   

//recibimos la variable  
$id=$_GET[id]; 
//conectamos a la base  
include('../conexion.php'); 

$archivo=$row[imagen];
$result=mysql_query("select imagen from temas where id_tema='$id'",$connect);  
while(
$row=mysql_fetch_row($result)) 

unlink("../images/temas/$archivo"); 

//borramos los registros pertenecientes a la id  
mysql_query("delete from temas where id_tema='$id'",$connect); 
  
header("location: administrar/index.php?panel=temas");  
?>
como lo ves?
  #11 (permalink)  
Antiguo 03/02/2011, 21:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con un simple unlink()

Mal, porque la asignacion de $archivo seguramente te va a dar un error de variable/indice no definido, ademas de que no necesitas un while() si vas a leer solamente un registro, aunque ese punto realmente no seria problema, pero si esta de sobra.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 03/02/2011, 21:27
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problemas con un simple unlink()

Parece que no supieras lo que haces, la función mysql_query no devuelve el array asociativo con el resultado, devuelve un identificador de la consulta al cual se le tiene que procesar para que devuelva el resultado deseado. Prueba con esto:

Código PHP:
<?php  
error_reporting
(E_ALL);  
ini_set('display_errors'1);    

//recibimos la variable   
$id=$_GET['id'];  
//conectamos a la base   
include('../conexion.php');  

$result=mysql_query("select imagen from temas where id_tema='$id'",$connect);   
$row=mysql_fetch_row($result);

$archivo "../images/temas/" $row['imagen'];

if (
file_exists($archivo)) unlink($archivo);
else echo 
"El archivo no existe";  
  
//borramos los registros pertenecientes a la id   
mysql_query("delete from temas where id_tema='$id'",$connect);  
   
//header("location: administrar/index.php?panel=temas");   // Si haces esto no verás ningún posible error.
?>
A ver qué te resulta.
  #13 (permalink)  
Antiguo 03/02/2011, 22:07
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

Gracias por vuestras respuestas.

He probado este código y sigue sin funcionarme, me da el siguiente error:

Código:
PHP Error Message

Notice: Undefined index: imagen in /home/a1919488/public_html/administrar/borrar_tema.php on line 13

PHP Error Message

Warning: unlink(../images/temas/) [function.unlink]: Is a directory in /home/a1919488/public_html/administrar/borrar_tema.php on line 15
¿Será porque hay que poner la direccion completa del servidor? voy a probarlo y os cuento
  #14 (permalink)  
Antiguo 03/02/2011, 22:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con un simple unlink()

No, solo cambia mysql_fetch_row por mysql_fetch_assoc, porque la primera te devuelve una matriz de indices numericos y la segunda una matriz asociativa, eso es todo.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 03/02/2011, 22:13
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Respuesta: Problemas con un simple unlink()

Siiiiiiiiiiiiii, por fin!!!!!!! muchísimas gracias Triby, y también a Artificium, y a pateketrueke.

Es decir, que la función para sacar un dato específico es mysql_fetch_assoc, guardaré la información bajo llave :D
  #16 (permalink)  
Antiguo 03/02/2011, 22:28
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Problemas con un simple unlink()

Claro, copie el código y no me percaté de ese error, que bueno que hayas aprendido algo.

Etiquetas: simple, unlink
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 00:13.