Ir ao conteúdo
  • Cadastre-se
rodrigofernandes1985

Botão excluir php

Recommended Posts

Bom dia a todos, estou desenvolvendo um sistema de upload, download, com opção de excluir arquivos. Bom ao efetuar o upload o arquivo é zipado para a pasta com o nome do usuário que esta dentro de uma outra pasta que contém todas as pastas de todos os usuários. O problema é que o botão excluir está excluindo todos os arquivos de uma vez.Sou novo na programação então peço ajuda aos amigos. Segue o código:

 <div class="js-upload-finished">
            <h3>Seus arquivos salvos em nosso sistema</h3>
            <div class="list-group">
            <table>
<?php
$pasta = "arquivos/".$logado."/";
if(is_dir($pasta))
{
$diretorio = dir($pasta);
while(($arquivo = $diretorio->read()) !== false)
{
if($arquivo != "." && $arquivo != "..")
{
?>
        <tr>
          <td>
           <br>
            </td>
             </tr>
              <tr>
                <div class="container">
                 <form name="arquivos" method="post" action="">
                  <div class="box"> 
                 <td><button type="" class="btn btn-xs btn-danger" name="excluir" class="btn btn-sm btn-danger" id=""><span class="glyphicon glyphicon-remove"></span>Excluir</button></td>
               <td><a href="../tcc/arquivos/<?php echo $logado."/".$arquivo ?>" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-save"></span>Baixar</a></td>
             <td><span class="badge alert-success pull-right"><?php echo $arquivo ?></span></td></span>
        
        </form>
           
          <?php
            
            if(isset($_POST['excluir'])){
            unlink("arquivos/".$logado."/$arquivo");
            }
        ?>    
           
        <?php
        }
                 }
            $diretorio->close();
           }
             else
            {
            echo 'A pasta nao existe.';
            }
             ?>
        </div>
         </table>
        </div>
    </tr>
            </div>

tcc.jpg

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigofernandes1985 Olá, seja bem vindo em nosso Fórum do Clube do Hardware.

Bom, o problema que está excluindo todos, é porque não há um controle por ID.

 

Crie uma tabela no banco de dados chamado de uploads. Nesta tabela você guarda o ID auto incrementado do registro, o nome do arquivo e o ID do usuário que enviou.

 

Quando for listar os arquivos como na sua imagem, o usuario precisa estar logado então ali na validação do usuário você já guarda por session o ID do usuario e o nome se quiser...

e no botão excluir você coloca um link  para um arquivo de exclusão mais ou menos assim:

 

href="excluir.php?id='<?php echo $id;?>'

onde você passa por GET o ID do registro do arquivo que quer apagar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigofernandes1985 Sim. o unlink serve para apagar um arquivo do servidor.

http://php.net/manual/pt_BR/function.unlink.php

 

Mas para que dê certo, nele você precisa receber o valor ID por GET, e resgatar do banco de dados o ID dele.

 

 

Editado por DiF

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei esse código mais esta dando erro

<?php

unlink("arquivos/".$logado."/$id_user");

?>     

 

Notice: Undefined variable: logado in C:\xampp\htdocs\tcc\deletar.php on line 3

Notice: Undefined variable: id_user in C:\xampp\htdocs\tcc\deletar.php on line 3

Warning: unlink(arquivos//): Permission denied in C:\xampp\htdocs\tcc\deletar.php on line 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigofernandes1985 Mas é só isso que tem no arquivo excluir.php?

 

Se for está errado.

Até porque o erro de variável não definida está ali porque não está na sessão.

Além disso, o terceiro erro é de permissão.  Não recomendo colocar os dados na mesma partição do sistema.

 

Eu costumo instalar o servidor em outra partição.

Por fim,  as vezes o xampp faz isso...  é por isso que eu gosto do EasyPHP.  nunca deu este tipo de problema!

Editado por DiF

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigofernandes1985 Não tem como eu te dar o código inteiro...  mas posso te dar um exemplo hipotético.

 

excluir.php

<?php
    $id_arquivo = $_GET["id"];

    $_session["ID_usuario"] = $ID;
    
    $confere = mysqli_query($conexao, "SELECT ID, nome_arquivo FROM arquivos Where ID_usuario =  $ID");

    $dados = mysqli_fetch_object($confere); 
    
    $apaga = mysqli_query($conexao,"DELETE FROM arquivos WHERE id_arquivo = $id_arquivo");
    if($apaga): 
        unlink("arquivos/".$logado."/$dados->nome_arquivo");      
    endif;
?>

Este código NÃO vai funcionar se copiar e colar. Como falei anteriormente é um exemplo hipotético. só para você entender como funciona.

 

Basicamente estou dizendo ali que:

o ID do arquivo passado pela URL é em GET.

A sessão, é onde você armazena o usuário logado. Neste exemplo eu coloquei ali mais para representação porque ele deve ser posto no arquivo que valida o usuário ao logar.

O $confere faz uma consulta ao bando de dados na tabela onde está armazenado o ID do registro, o nome do arquivo e o ID de quem fez o upload.

a variável $dados ali faz com que os dados sejam postos em um objeto.

A variável $apaga deleta do banco de dados o registro deste arquivo. 

Então o IF testa SE:  for deletado do banco de dados, apaga o arquivo na pasta arquivos com o nome do arquivo desejado.

 

Basicamente é isso..  isso é o melhor que posso fazer por você no momento. porque é um trabalho TCC, então você precisa pensar uma solução que envolva o meu exemplo. E claro, sempre pedir ajuda ao seu orientador para que ele diga se está no caminho certo ou se precisa mudar algo.

 

O que posso dizer também é: tudo é uma bola de neve...  se cometer algum erro de código, o resto não funciona e só vai acumulando erros.

 

Por isso eu recomendo que você revise, tudo desde o inicio.. começando pelo sistema de login até mostrar os arquivos na página restrita.. Nesta pagina restrita é preciso recuperar da sessão o usuário logado justamente para não dar este erro de variável indefinida.

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já revisei todo o código e fiz algumas alterações, antes estava listando os arquivos do diretório e agora quando o usuário loga no sistema seu id fica salvo, então toda vez que ele faz o upload já salva seu id na tabela arquivos (como você tinha me falado anteriormente) então quando vou listar os arquivos verifico se o id do arquivo é igual o id do usuário. Até ai tudo tranquilo, então ao clicar no botão excluir, mando o id via get para o formulário deletar.php. Ele está enviando direitinho o id pela url, mais não está excluindo e está dando os seguintes erros:

 

Warning: mysql_query() expects parameter 1 to be string, resource given in C:\xampp\htdocs\tcc\deletar.php on line 15

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\tcc\deletar.php on line 18

Warning: mysql_query() expects parameter 1 to be string, resource given in C:\xampp\htdocs\tcc\deletar.php on line 19

 

Segue o código do arquivo deletar.php


 

<?php
if (isset($_GET['id']))
    
{
$host = "localhost";
  $user = "root";
  $pwd  = "";
  $bd   = "server";
  $id = $_GET['id'];
  $conexao = mysql_connect($host, $user, $pwd);
 
  mysql_select_db($bd);
 
  $confere = mysql_query($conexao, "SELECT id, nome FROM arquivos Where id_user =  $id");
  
    $dados = mysql_fetch_object($confere); 
    $apaga = mysql_query($conexao, "DELETE FROM arquivos WHERE id = $id");
    
if($apaga): 
        unlink("arquivos/".$logado."/$dados->nome");      
    endif;
  
}
?>

 

Editado por DiF
Colocar o código com o botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigofernandes1985 Pode ser que o problema nesse caso é que estás utilizando o plugin mysql ele não suporta orientação a objetos como tem algumas coisas ali de OOP.

 

Faça as seguintes alterações para ver se resolve:

 

Primeiro crie um arquivo chamado conexao.php:

<?php 
  $conexao = mysqli_connect("localhost", "root", "", "server");
?>

Agora seu arquivo detela.php:

<?php 
  $id_arquivo = $_GET['id'];
   
  include 'conexao.php';
 
  //O $id_usuario é o valor do ID do usuário guardado na sessão.
  $confere = mysqli_query($conexao, "SELECT id, nome FROM arquivos Where id_user =  $id_usuario");
  
    $dados = mysqli_fetch_object($confere); 
    $apaga = mysqli_query($conexao, "DELETE FROM arquivos WHERE id = $id_arquivo");
    
if($apaga): 
        unlink("arquivos/".$id_usuario."/$dados->nome");      
    endif;
  

Alterei o nome de algumas variáveis para ficar mais fácil para entender. 

Basicamente alterei o plugin para mysqli  com i no final. Se o xampp não tiver esse plugin, salve sua pasta de projeto dentro do htdocs,  desinstale o xampp e instale o EasyPHP DEV-server 16.1.1.  depois de rodando, com o apache e o mysql ativado, copie e cole sua pasta de projeto dentro da pasta "eds-www" que fica dentro da pasta do easyphp. ele é seu root do servidor local.

 

Com o easyphp eu sei que funciona o plugin mysqli porque eu uso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema fiz assim:

<?php
if (isset($_GET['id']))
    
{
  session_start();
  $logado = $_SESSION['login'];
  
  $host = "localhost";
  $user = "root";
  $pwd  = "";
  $bd   = "server";
  $id = $_GET['id'];
  $conexao = mysql_connect($host, $user, $pwd);
 
  mysql_select_db($bd);
 
    $confere = mysql_query("SELECT id, nome FROM arquivos Where id =  $id");
    
    $dados = mysql_fetch_object($confere); 
    
    $apaga = "DELETE FROM arquivos WHERE id = $id";
    mysql_query($apaga) or die(mysql_error());
    
    
    if($apaga){
    
        unlink("arquivos/".$logado."/$dados->nome");      
    }
  header("location:site.php");
}
?>

 

Agora ta perfeito, valeu DiF pelo apoio.

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×