Jump to content

Como elimino um ficheiro na base de dados php/mysql


untz
 Share

Recommended Posts

boa tarde a todos,

eu tenho um problema no meu site que estou fazendo, e gostaria de ter uma ajuda se fosse possivel

no ficheiro delete.php eu tenho isto:

<?php
$id=$_GET['id'];
$result = mysql_query("delete from ficherio where id_ficheiro=$id");
if($result){
header("Location: index.php?true=1");
} else {
echo "ERROR";
}
?>

isto faz com que eu consiga apagar o registo, mas o que gostaria tambem que apagasse era o ficheiro que contem o registo, eu tento utilizar o unlink mas eu não percebi muito bem do que li, se alguem podesse ajudar ficaria muito agradecido

Edited by thoga31
GeSHi
Link to comment
Share on other sites

eu retirei-o. eu coloquei-o assim

if($result){
$path = 'img/'.$row->Ficheiro;
unlink($path);
header...

}

ficherio:

id_ficheiro
nome_ficheiro
Ficheiro   ->leva no nome do ficheiro uploaded
dataa
descricao
documentos_relacionados
id_area
id_assunto
id_tipo_de_ficheiro
Edited by thoga31
Tags code + GeSHi
Link to comment
Share on other sites

Qq do género disto devia dar:

<?php
   $id=$_GET['id'];
   $result = mysql_query("delete from ficherio where id_ficheiro=$id");
   if($result){
       $row = mysql_fetch_assoc($result);
       $path = 'img/'.$row['Ficheiro'];
       unlink($path);
       header("Location: index.php?true=1");
   } else {
       echo "ERROR";
   }
?>

Assumindo que:

- $row['Ficheiro'] tem o nome completo (com extensão) do ficheiro.

- que $path aponta para um ficheiro existente.

Testa o retorno do comando 'unlink' para ver se foi bem sucedido.

Se não foi (false) então tenta colocar o caminho completo...talvez o path relativo não seja relativo ao que tu pensas que é...

Edited by thoga31
GeSHi
  • Vote 1
Link to comment
Share on other sites

obrigado, mas eu tentei com o mas não consegui, na base de dados o campo Ficheiro aparece lá a extenção do ficheiro

tentei com o caminho completo xampp/htdocs/... e nada não consigo eliminar :s

Link to comment
Share on other sites

Mostra as permissões do ficheiro e do directório onde este está.

cd /xamp/htdocs/img

ls -la

um screenshot to terminal era excelente...

Edited by tiago.f
Link to comment
Share on other sites

Ok, as minhas desculpas, assumi que estavas a linux mas olhando melhor, estás a usar o xamp por isso deves estar em windows.

Em vez de

header("Location: index.php?true=1");

põe

echo $path;

e coloca aqui o resultado

Depois navega no explorador do windows até esta pasta e mostra as permissões do ficheiro que tás a tentar apagar.

Algo semelhante a isto, para o teu ficheiro.

SecurityPane.png

Link to comment
Share on other sites

???

Esse $path está mal, obviamente e, depois desta conversa toda, tem um valor "impossível".

Como é que a instrução

$path = 'img/'.$row->Ficheiro;

faz com que o path fique com

"\img"

?

De onde vem a '\' ??

Para resolveres isto tens que garantir que o que é passado no comando unlink é um caminho válida para o ficheiro que queres apagar...

"\img" nem sequer tem o nome do ficheiro!!!

Link to comment
Share on other sites

eu alterei o caminha do path,

$path = '\img'.$row['Ficheiro'];

caminho do ficheiro é este C:\xampp\htdocs\estagio\img

logo eu só coloquei \img, acho que assim está certo.

, no campo na base de dados aparece lá o nome do ficheiro, logo, no $row['Ficheiro'] está o nome do ficheiro!

Link to comment
Share on other sites

se

echo $path

resultou em

'\img"

então $row['Ficheiro'] está vazio.

Põe mesmo

unlink("C:\xampp\htdocs\estagio\img\exame3.pdf");

A ver se ele apaga.

Já agora, se queres caminho relativo, retira a barra do inicio e tb acho que falta uma barra entre o directorio e o nome do ficheiro.

Poe assim

$path = 'img/' . $row['Ficheiro'];

Link to comment
Share on other sites

com o unlink("C:\xampp\htdocs\estagio\img\exame3.pdf"); o ficheiro é apagado!

ao usar $path = 'img/' . $row['Ficheiro'];

não apaga o ficheiro, não sei porque, o nome do campo na base de dados está correcto!

Edited by untz
Link to comment
Share on other sites

cambada de cegos.

O teu query é um delete, logo não traz resultado/linha nenhuma.

1º tens que fazer o select para obteres o $row['Ficheiro']

2º fazer o delete da BD

3º fazes o delete do ficheiro com a info que tiraste do 1º

<?php
   $id=$_GET['id'];
   $result = mysql_query("select * from ficherio where id_ficheiro=$id");
   if($result){
    $row = mysql_fetch_assoc($result);
    $path = 'img/'.$row['Ficheiro'];
    if(unlink($path) && mysql_query("delete from ficherio where id_ficheiro=$id")) {
	    header("Location: index.php?true=1");
	    exit;
    }
   }
   echo "ERROR";

?>
Edited by tiago.f
Link to comment
Share on other sites

muito obrigado

já está funcionando, desculpe lá a massada!

eu fiz diferente do seu código, e funciona.. obrigado!

Coloca aqui como ficou o resultado final para que os próximos possam aprender.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.