Ir ao conteúdo
  • Cadastre-se

Botão excluir php


Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

 

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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
Link para o comentário
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;
  
}
?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!