Jump to content
untz

Como elimino um ficheiro na base de dados php/mysql

Recommended Posts

untz

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

Share this post


Link to post
Share on other sites
tiago.f

Oi,

qual a estrutura da tabela "ficherio" ?

Para usares o unlink tens que lhe passar o caminho para o ficheiro...mas não vejo nenhum instrução "unlink" no teu código...

Share this post


Link to post
Share on other sites
untz

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

Share this post


Link to post
Share on other sites
tiago.f

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

Share this post


Link to post
Share on other sites
untz

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

Share this post


Link to post
Share on other sites
tiago.f

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

Share this post


Link to post
Share on other sites
tiago.f

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

Share this post


Link to post
Share on other sites
tiago.f

???

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!!!

Share this post


Link to post
Share on other sites
untz

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!

Share this post


Link to post
Share on other sites
tiago.f

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'];

Share this post


Link to post
Share on other sites
untz

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

Share this post


Link to post
Share on other sites
tiago.f

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

Share this post


Link to post
Share on other sites
untz

muito obrigado

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

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

Edited by untz

Share this post


Link to post
Share on other sites
tiago.f

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.

Share this post


Link to post
Share on other sites
untz

no ficheiro delete.php

<?php

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

e no index.php como button:

<?php echo "<a href='index.php?mod=delete&id=$row->id_ficheiro'><button type='button' class='btn btn-danger' onclick='myFunction()'> Eliminar</button></a>"; ?>

Edited by untz

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.