Ir ao conteúdo

Posts recomendados

Postado

Olá a todos


No meu cadastro ele chama o arquivo delete.php que mostro logo abaixo. Quando eu quero deletar um cadastro. Ele deleta normalmente o caminho da imagem no banco de dados, mas do jeito que está, ele apaga no banco de dados o caminho, mas não o arquivo da pasta, que no meu caso fica na pasta "uploads". Dessa forma sempre que eu deleto um cadastro no sistema, ele apaga o caminho mas mantém o arquivo na pasta, fazendo apenas que fiquem arquivos desnecessários lá. Alguém que possa ver onde no código abaixo eu possa adicionar uma função para deletar o arquivo da pasta também?

 

O campo no BD que fica o caminho se chama "image_path"

<?php
session_start();
include_once("conexao.php");
 
if (isset($_GET["id"])) {
    $Id = $_GET["id"];
}
 
$sql = "DELETE FROM images_info WHERE id='" . $Id . "'";
mysqli_query($conn, $sql);
 
header("index.php");
?>

 

Postado
10 minutos atrás, Diego FSTI disse:

Boa noite sr @Marxrj,,

 

Sim, podemos,, de imediato o sr pode nos mostrar o arquivo em que contém o código para exclusão do arquivo?

Só para comentar, o código para excluir arquivos via php-script é "unlink"

Boa noite, 

Então, esse que coloquei acima e agora aqui novamente é o arquivo que faz a exclusão. Ele deleta o cadastro no BD. Só que o arquivo continua na pasta.

A pasta se chama "uploads" e o campo que fica o caminho no BD "image_path"

<?php
session_start();
include_once("conexao.php");
 
if (isset($_GET["id"])) {
    $Id = $_GET["id"];
}
 
$sql = "DELETE FROM images_info WHERE id='" . $Id . "'";
mysqli_query($conn, $sql);
 
header("index.php");
?>

Acrescentando, aqui em anexo o arquivo completo, já pronto com o BD, bem simples do dropzone para quem quiser testar e ver se consegue. 

 

Na verdade eu peguei esse cadastro do dropzone e incrementei no meu sistema,

dropzone.rar

Postado

Então, sr @Marxrj,,

 

A tua solicitação eu entendi perfeitamente..

Porém,, o que quis comentar o código "unlink", pudesse estar em outro arquivo,,

 

Mas tudo bem,,

Quanto ao caso do sr seria conveniente primeiro fazer a leitura dos dados,, segundo a exclusão dos arquivos e pós a exclusão da tabela,,

 

Ex:

 

<?php

$sql = "Select local_arquivo FROM images WHERE id='" . $Id . "'";
$path_local = mysqli_query($conn, $sql);
if(unlink("./uploads/".$path_local)) {
  $sql = "DELETE FROM images WHERE id='" . $Id . "'";
  if(mysqli_query($conn, $sql)) {
    header("index.php");
  } else {
    echo "Não foi possivel realizar a exclusão do Banco de Dados";
} else {
  echo "Não foi possivel excluir o arquivo " .$path_local;
  }
  
  
?>

 

Postado

Entendi,,


Neste caso,, a partir do código que lhe passei,, já não teria muito o que fazer mesmo,, agora é só você adaptar o código que lhe passei ao seu código ...

 

Uma sugestão para compreender melhor o comando unlink

<form action="?" method="get">
<table>
  <tr>
    <td colspan="3" align="center">Comandos</td>
  </tr>
  <tr>
    <td width="50"><input type="submit" name="act" value="criar" /></td>
    <td width="50"><input type="submit" name="act" value="ler" /></td>
    <td width="50"><input type="submit" name="act" value="apagar" /></td>
  </tr>
</table>
</form>
<hr>      
<?php
if($_GET['act'] == "criar") {
  $file = fopen("arquivo.txt","w");
  fwrite($file,"Hello World. Testing 1! \nHello World. Testing 2! \nHello World. Testing 3!");
  fclose($file);
/************************************************************/    
} else if($_GET['act'] == "ler") {
  $linhas = file ('arquivo.txt');  
  foreach ($linhas as $linha => $line) {
    echo "Linha #<b>{$linha}</b> : " . htmlspecialchars($linha) . "<br>";
  }
/************************************************************/  
} else if($_GET['act'] == "apagar") {
    if(unlink("arquivo.txt")) { echo "Arquivo apagado com sucesso"; } else { echo "Não foi possível apagar o arquivo"; }
}
?>

 

Postado

Tentei aqui de várias maneiras com o unlink e não consegui, por isso deixei o cadastro em anexo para ver se alguém consegue trabalhando diretamente no sistema.

dropzone.rar

Postado

Então sr @Marxrj,,

 

Acredito que o sr deva melhorar um pouco mais quanto a lógica de programação.

>> Não digo como insulto,, pois,, não tenho interesse em perder meu tempo com futilidades..

 

Acredito que o sr está na classe de entusiastas,, e por isto o meu interesse em lhe ajudar,, talvez não em lhe deixar tudo pronto,, mas apontar onde o sr pode melhorar...

 

>> Alguns apontamentos

>>>> pasta "uploads"

>>>>>> arquivo "image-edit.php"

 

Linha #2

>> require_once ("../conexao.php");

>>>> Está correto

 

Linha #8

>> $targetPath = "uploads/";

>>>> Está denunciando que o trajéto é dentro da pasta uploads atual,, então,, seria [localsite]/uploads/uploads/

 

adicionado 19 minutos depois

Bloco #21 ao #31

>> você move o arquivo pronto para exclui-lo

 

E dentro do bloco na linha #24 associado a linha #19 que realiza a consulta sob a linha #16

  • #16 >> $selectQuery = "select image_path from images_info where image_id='" . $_GET["image_id"] . "'";
  • #19 >> $image = mysqli_fetch_array($resultSelectQuery, MYSQLI_ASSOC);
  • #24 >> if (! unlink($image[image_path])) {

O Sr deve ao invés de solicitar a exclusão do arquivo, realizar uma inserção no banco de dados.

E da mesma forma que o sr fez no bloco #34 ao #38, deve ser inserido o unlink

 

Até então, o projeto está caminhando bem,, e aos poucos o sr mesmo conseguirá monitorar o seu próprio código,, assim como aqueles que muito quebraram a cabeça por causa de uma única virgula no lugar errado...

Postado

Então  DHB,  eu deixei o cadastro anterior e o depois que fiz a mudança  na criptografia das imagens. Não sou entusiasta de programação e nem quero me aprofundar nela.

 

Apenas esse código do dropzone baixei e fiz adaptações ao que precisava. Se for ver no primeiro projeto o sistema cadastrava normalmente na pasta e no segundo fiz adaptações para criptografia das imagens. Então quanto a deletar as imagens em nada alterou a mudança.

 

O problema é que muitos nesse assunto dizem que é usar o unlink.  Isso eu sei,  mas não consegui adaptar ali. Acontece que muitos nos fóruns também não sabem,  e colocam isso só para ganhar joinha. Copiam e colam a resposta. Na verdade não sabem também como fazer. Por isso deixei o cadastro para ver se alguém que saiba realmente possa fazer mexendo diretamente no sisteminha.

 

Se alguém em outro tópico perguntar a mesma coisa,  é  simples eu ir lá e falar a ele: VOCÊ TEM DE USAR O UNLINK, sendo que a pessoa que respondeu nem sabe usar a função.  Mas acaba que a pessoa copia e cola porque sabe que tem de se fazer isso. Mas na prática nem ela as vezes sabe fazer.

 

Mas agradeço pelo esforço. 

  • Moderador
Postado

@Marxrj Caro,  existem muitas pessoas que se dizem programadoras, mas que na verdade são "fuçadores de fóruns", vivem no stackoverflow, copiam e colam.

 

Mas também existem aquelas que realmente são programadores e sabem do que falam. Aqui no Clube do Hardware, não é diferente. Há todos os tipos. Portanto, a melhor forma de atrair desenvolvedores que sabem, é primeiramente elaborar um tópico com o máximo de informações possíveis, claras e objetivas, isso vale também para o título do tópico.

Dito isso,  vendo o desenrolar do tópico, resolvei postar.

 

Eu geralmente uso algo bem simples. Assim:

session_start();
	$gallery = $_GET["gallery"]; 
	$img 	 = $_GET["img"];
	
	//define a pasta onde vai ser jogada as imagens
	$diretorio = "../../media/portfolio/";
	
	//importa a conexao com o banco de dados
	require '../../conexao/conexao.php';	
 
	//seleciona o registro da imagem do banco de dados
	$seleciona = mysqli_query($conexao, "SELECT idProjeto, foto FROM portfolio WHERE idProjeto = '$gallery' AND foto ='$img'");
	$foto = mysqli_fetch_object($seleciona);
	
    //deleta o registro da imagem do banco de dados
	$deleta = mysqli_query($conexao,"DELETE FROM portfolio WHERE idProjeto = '$foto->idProjeto' AND foto ='$foto->foto'");
	
    //testa se foi feito a instrução SQL acima
	if($deleta):
   
        //dá permissão de diretório
		chmod($diretorio.$img, 0777);

        //deleta de fato a imagem no diretório do servidor
		unlink($diretorio.$img);

        //simplesmente mostra um alert informando que deletou e volta para a página anterior
		echo"<script>alert('Imagem Deletada'); history.go(-1);</script>";
	endif;

Como pode ver, é bem simples e funcional. Claro, se quiser pode implementar mais funcionalidades ali.. repare que o unlink foi usado dentro do teste de IF, ou seja,  se o registro com o nome da foto foi apagado do banco de dados, o sistema dará permissão de alteração no diretório e remove o arquivo da imagem apontada.

 

 

Postado

Bom, eu estou aqui tentando no código que postei. e a solução de início para o código postado que é o original.

<?php
session_start();
include_once("conexao.php");
 
if (isset($_GET["id"])) {
    $Id = $_GET["id"];
}
 
$sql = "DELETE FROM images_info WHERE id='" . $Id . "'";
mysqli_query($conn, $sql);
 
header("index.php");
?>

Então a princípio fiz a função unlink para isso:

<?php
session_start();
include_once("conexao.php");
 
if (isset($_GET["id"])) {
    $Id = $_GET["id"];
}
 
$sql = "DELETE FROM images_info WHERE id='" . $Id . "'";
mysqli_query($conn, $sql);

unlink("image_path");
	
unlink("uploads/15847243575e74f985ceb78.jpg");
	
header("Location:../index.php");
?>

Assim ele apaga a imagem da pasta, claro que aqui estou chamando ele diretamente pelo nome, e só tenho de mudar para ela chamar direto do banco de dados para se fazer automaticamente, mas estou no caminho. Não adianta eu pegar soluções de outros exemplos que são torados de outras fontes, eu tenho é de acertar e trabalhar no meu código.

 

Eu não sou programador, estou tentando apenas fazer uma solução para o programinha que tenho, e mesmo assim ainda pareço saber mais que muita gente.

Postado
Image-add.php
Image-edit.php



Linha #10
>> $targetFile = $targetPath = $imagePath = time().uniqid(md5()).$extensao;
>> $targetFile = $targetPath . md5(uniqid(time())).$extensao;



Image-add.php
>> print $sql = "INSERT INTO images_info (image_path) VALUES ('" . $imagePath . "')";
>> $sql = "INSERT INTO images_info (image_path) VALUES ('" . $targetFile . "')";



Image-edit.php
$sql = "UPDATE images_info SET image_path ='" . $imagePath . "' WHERE id ='" . $_GET["id"] . "'";
$sql = "UPDATE images_info SET image_path ='" . $imagePath . "' WHERE image_id='" . $_GET["image_id"] . "'";

 

 

 

Digo por mim,,

Eu sou um destes entusiastas em PHP,, não consegui me tornar profissional da área,, pois,, minha classificação profissional se voltou para eletricista e manutenção de desktops notebook e redes..

 

Normalmente,, aos códigos que ainda não consegui decorar como emprega-las,, visito fórums para copiar seus scripts ou para pedir ajuda somente em último caso..

 

Upei este código para um servidor particular e fui testando e arrumando cada erro que eu encontrava,, tentei editar o mínimo possível para não fugir de seu interesse..

 

Como o sr diz que não tem interesse em se especializar,, o anexo consta o código pronto..

dropzone.zip

  • Curtir 1
Postado

Fiz os testes aqui, porém o código repassado está apresentando vários erros, e não deleta nem agora o cadastro do banco de dado.

 

Mas agradeço a ajuda, vou continuar tentando aqui na linha que já estava, pois a ideia não é gravar com o o caminho da pasta, mas somente o nome do arquivo com a extensão.

 

Como coloquei acima, só preciso ajustar o arquivo imagem-delete.php

Ele assim está funcionando, mas só preciso agora trazer a informação do nome e extensão do BD

 

<?php
session_start();
include_once("conexao.php");
 
if (isset($_GET["id"])) {
    $Id = $_GET["id"];
}
 
$sql = "DELETE FROM images_info WHERE id='" . $Id . "'";
mysqli_query($conn, $sql);
	
unlink("uploads/15847243575e74f985ceb78.jpg");
	
header("Location:../index.php");
?>

Então no unlink ali preciso de algo tipo isso:

unlink("uploads/$image_path");

// ou isso

unlink("uploads/".$image_path);

 

adicionado 25 minutos depois

Acertei aqui, na verdade, o seu image-delete.php veio sem o caminho da pasta, sendo assim ele tenta apagar somente como se só tivesse o nome e extensão do arquivo e dava os erros, porém no banco ele vem gravado com o uploads/

Mas para mim ficou ok, pois eu inseri o arquivo dentro da pasta junto com os outros, e eles estão gravando somente o nome do arquivo e a extensão, passando agora a deletar.ambos.

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!