Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

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