Ir para conteúdo
BomLogo

Como excluir multiplos arquivos de imagens

Recommended Posts

Olá, bom dia!

Estou parado em uma etapa e não consigo resolver. Já pesquisei bastante, usei o while e o foreach mas não consegui.

 

Funciona assim:

1 Eu crio um registro no banco com fotos e texto.

2 O internauta pode cadastrar um comentário naquele poste e pode ser feito com foto e texto.

Até ai tudo bem. Acontece que se eu for excluir esse registro, eu gostaria que o sistema excluísse todos os comentários relacionados ao ID daquele registro. Isso já funciona, ou seja, já relacionei as tabelas e os registros no banco são excluídos só que apenas uma imagem é excluída da pasta ficando perdidas as outras imagens que "possiveis" internautas subiram para vincular ao seu poste.

 

Veja a parte do código onde deveria excluir as imagens

// Captura o nome da foto para excluir da pasta os registros
            $sql = "SELECT blog_foto FROM blog_comentarios WHERE blog = :blog_id AND blog_foto <> 'padrao.jpg'";
            $stm = $conexao->prepare($sql);
            $stm->bindValue(':blog_id', $blog_id);
            $stm->execute();
            $cliente = $stm->fetch(PDO::FETCH_OBJ);
        


            // aqui eu gostaria que ele ficasse rodando a exclusão de todos os registros que tivessem o ID no BLOG igual ao blog_id mas ele só exclui 1
            if (!empty($cliente) && file_exists('../blog/'.$cliente->blog_foto)):
                unlink("../blog/" . $cliente->blog_foto);
            endif;

 

 

            // Aqui funciona perfeito, ou seja, ele exclui todos os registros que correspondem ao blog_id
            $sql = 'DELETE FROM blog_comentarios WHERE blog = :blog_id';
            $stm = $conexao->prepare($sql);
            $stm->bindValue(':blog_id', $blog_id);
            $retorno = $stm->execute();

 

Podem me ajudar como fazer esse loop?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente desta forma.

			$sql = "SELECT blog_foto FROM blog_comentarios WHERE blog = :blog_id AND blog_foto <> 'padrao.jpg'";
            $stm = $conexao->prepare($sql);
            $stm->bindValue(':blog_id', $blog_id);
            $stm->execute();
            $cliente = $stm->fetchAll();
        
			foreach( $cliente as $blog_fotos ){
				
// aqui eu gostaria que ele ficasse rodando a exclusão de todos os registros que tivessem o ID no BLOG igual ao blog_id mas ele só exclui 1
            if (!empty($cliente) && file_exists('../blog/'.$blog_fotos['blog_foto'])):
                unlink("../blog/" . $blog_fotos['blog_foto']);
            endif;


			}

Fazendo um foreach para fazer um laço de repetição em todos os dados vindo do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Gleyson Abreu disse:

Tente desta forma.


			$sql = "SELECT blog_foto FROM blog_comentarios WHERE blog = :blog_id AND blog_foto <> 'padrao.jpg'";
            $stm = $conexao->prepare($sql);
            $stm->bindValue(':blog_id', $blog_id);
            $stm->execute();
            $cliente = $stm->fetchAll();
        
			foreach( $cliente as $blog_fotos ){
				
// aqui eu gostaria que ele ficasse rodando a exclusão de todos os registros que tivessem o ID no BLOG igual ao blog_id mas ele só exclui 1
            if (!empty($cliente) && file_exists('../blog/'.$blog_fotos['blog_foto'])):
                unlink("../blog/" . $blog_fotos['blog_foto']);
            endif;


			}

Fazendo um foreach para fazer um laço de repetição em todos os dados vindo do banco de dados.

 

Show meu nobre.

Perfeito, rodou certinho. Eu estou estudando PHP e isso me consumiu todo o dia de hoje!

Parabéns pela ajuda e por explicar o que o laço faz.

Abs e muito sucesso!

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

  • Conteúdo Similar

    • Por JonasFloripa
      Boa tarde pessoal,
      Estou atualizando um sistema de comunicação interna e hoje ele primeiro cadastra a CI, depois abre e anexa todos os documentos pedidos. É feito desta forma por cada CI gera uma pasta como o ID dele e dentro desta pasta fica os arquivos anexados a esta CI.
      Eu gostaria de fazer pra que na hora que elaborar a CI eu pudesse anexar vários arquivos e uma única vez, mas esses arquivos deveriam ficar dentro de uma pasta com o id da CI como anterior.
      Os exemplos que estou achando, todos colocam todos os arquivos dentro de um único diretório. Minha preocupação é quando for abrir uma CI em meu nome, ele carregue arquivos de outra CI.
      Como faço isso, jogando todos os arquivos dentro desse diretório, sendo que o ID da CI não foi gerado ainda porque não realizei o cadastro da mesma ainda.
       
      Obrigado
    • Por marcossantana10
      Opa, to precisando muito de uma ajuda: estou tentando fazer o upload de arquivos de um app hibrido (rodando android) para um servidor. O código abaixo é executado sem erro, mas o upload não acontece. Será que alguem tem ideia de onde pode estar o erro?
       
      var images = []; var $imagesDiv; document.addEventListener("deviceready", init, false); function init() { $("#addPicture").on("touchend", selPic); $imagesDiv = $("#images"); $("#uploadPictures").on("touchend", uploadPics); } function selPic() { navigator.camera.getPicture(function(f) { var newHtml = "<img src='"+f+"'>"; $imagesDiv.append(newHtml); images.push(f); if(images.length === 1) { $("#uploadPictures").removeAttr("disabled"); } }, function(e) { alert("Error, check console."); console.dir(e); }, { quality: 50, sourceType: Camera.PictureSourceType.PHOTOLIBRARY, destinationType: Camera.DestinationType.FILE_URI }); } function uploadPics() { alert("Ok, going to upload "+images.length+" images."); var defs = []; var fd = new FormData(); images.forEach(function(i) { alert('processing '+i); var def = $.Deferred(); window.resolveLocalFileSystemURL(i, function(fileEntry) { alert('got a file entry'); fileEntry.file(function(file) { alert('now i have a file ob'); console.dir(file); var reader = new FileReader(); reader.onloadend = function(e) { var imgBlob = new Blob([this.result], { type:file.type}); fd.append('file'+(images.indexOf(i)+1), imgBlob); fd.append('fileName'+(images.indexOf(i)+1), file.name); def.resolve(); }; reader.readAsArrayBuffer(file); }, function(e) { alert('error getting file', e); }); }, function(e) { alert('Error resolving fs url', e); }); defs.push(def.promise()); }); $.when.apply($, defs).then(function() { alert("all things done"); var request = new XMLHttpRequest(); request.open('POST', 'url', true); request.send(fd); }); } Do lado do servidor, onde eu deveria receber a requisição e upar os arquivos, está conforme código abaixo:
      <?php header("Access-Control-Allow-Origin: *"); $imgFileName=date("Y").date("m").date("j")."_".$_POST['index']."_".rand(1000,9999).".jpg"; if(move_uploaded_file($_FILES['file']['tmp_name'], "anuncios/".$imgFileName)){ echo "upload ok"; //or anything you need } ?>  
    • Por bhconecta
      Olá Colegas,
      Estou apredendo programação. Essa postagem é para pedir ajuda.
       
      Iniciei a construção de uma sistema para fazer upload de arquivos pdf.
      O cliente faz o login e ver seus arquivos, postados pelo parceiro. O problema é que não faço a menor ideia de como esse parceiro irá selecionar varios arquivos e durante o processo de upload, e como o sistema irá detectar que aquele arquivo é de um cliente especifico.
       
      O sistema irá contar com aproximadamente 100 clientes e esse parceiro deve carregar seus arquivos de forma automatica para o repositorio de cada cliente.
       
      Vejo um grande desafio pra mim e aos colegas do imasters, na construção dessa função.
       
      Caso não tenham entendido, me pergunte.
       
      Abraços,
      Fernando
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.