Ir para conteúdo

POWERED BY:

Arquivado

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

MBarros

[Resolvido] Deletar imagens de uma pasta referente ao ID

Recommended Posts

Pessoas, boa noite! MBarros de volta!!

 

Como o titulo e a descrição dizem, tenho uma entrada com um ID gerado e nela possuo 4 imagens dentro de uma pasta. Para enviar as imagens para a pasta determinada e outras infos para o mysql, fiz o seguinte:

 

<?php
	$numeroCampos = 4;
	$caminho = "../uploads/";
	$substituir = FALSE;
	$id = $_REQUEST['id'];
	$nomeArquivo = ($_FILES['imagens']['name']);
  $titulo = $_REQUEST['titulo'];
  $resumo = $_REQUEST['resumo'];
  $producao = $_REQUEST['producao'];
  $detalhes = $_REQUEST['detalhes'];

  mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor.");
  mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados");
	
  for ($i = 0; $i < $numeroCampos; $i++)
  {
		$nomeArquivo = $_FILES["imagens"]["name"][$i];
    $nomeTemporario = $_FILES["imagens"]["tmp_name"][$i];   
		$imagens = implode(', ', $_FILES["imagens"]["name"]);
		
		if (!empty($nomeArquivo)) 
    {
			$erro = false;
			if (file_exists($caminho . $nomeArquivo) AND !$substituir)
      {
				$erro = "O arquivo <strong>".$nomeArquivo."</strong> já existe";
      }
      
			if (!$erro) 
      {                               
				move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
      }
    }
    else
    {
			echo "Problema";
    }
	}
	
	mysql_query("UPDATE `teste` SET id = '$id', imagens = '$imagens', titulo = '$titulo', resumo = '$resumo', producao = '$producao', detalhes = '$detalhes' WHERE id=".$_GET['id']);
	echo "Arquivos enviados!";
?>

Para exibir as 4 imagens no BD, utilizei: $imagens = implode(', ', $_FILES["imagens"]["name"]);

 

A questão: como deletar as 4 imagens referentes à um ID utilizando unlink?

 

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

liste o diretório, você receberá um array() contendo todos os documentos

aplique um foreach() no array() e utilize o unlink() nos $values vindos do array()

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou postar um exemplo aqui... que eu tenho dáiii é só você Ajustar como você queira.!'

 

 

1. Banco de dados

Vamos criar nossa tabela de usuários:

CREATE TABLE `usuarios` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`foto` VARCHAR( 100 ) NOT NULL
) ENGINE = MYISAM ;
2. Formulário de cadastro

Agora vamos desenhar nosso formulário e apontar a action para o mesmo arquivo:

IMPORTANTE: nunca se esqueça que quando se trata de arquivos, precisamos adicionar ao nosso form a seguinte propriedade: enctype=”multipart/form-data”

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cadastro de usuário</title>
</head>
 
<body>
<h1>Cadastro de Usuário</h1>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="cadastro" >
Nome:<br />
<input type="text" name="nome" /><br /><br />
Email:<br />
<input type="text" name="email" /><br /><br />
Foto de exibição:<br />
<input type="file" name="foto" /><br /><br />
<input type="submit" name="cadastrar" value="Cadastrar" />
</form>
</body>
</html>
3. Cadastrando Usuário

Como a action está apontando para o próprio arquivo, nosso código vai nele mesmo:

<?php
// Conexão com o banco de dados
$conn = @mysql_connect("localhost", "usuario", "senha") or die ("Problemas na conexão.");
$db = @mysql_select_db("banco", $conn) or die ("Problemas na conexão");
 
// Se o usuário clicou no botão cadastrar efetua as ações
if ($_POST['cadastrar']) {
 
	// Recupera os dados dos campos
	$nome = $_POST['nome'];
	$email = $_POST['email'];
	$foto = $_FILES["foto"];
 
	// Se a foto estiver sido selecionada
	if (!empty($foto["name"])) {
 
		// Largura máxima em pixels
		$largura = 150;
		// Altura máxima em pixels
		$altura = 180;
		// Tamanho máximo do arquivo em bytes
		$tamanho = 1000;
 
    	// Verifica se o arquivo é uma imagem
    	if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
     	   $error[1] = "Isso não é uma imagem.";
   	 	} 
 
		// Pega as dimensões da imagem
		$dimensoes = getimagesize($foto["tmp_name"]);
 
		// Verifica se a largura da imagem é maior que a largura permitida
		if($dimensoes[0] > $largura) {
			$error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
		}
 
		// Verifica se a altura da imagem é maior que a altura permitida
		if($dimensoes[1] > $altura) {
			$error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
		}
 
		// Verifica se o tamanho da imagem é maior que o tamanho permitido
		if($foto["size"] > $tamanho) {
   		 	$error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
		}
 
		// Se não houver nenhum erro
		if (count($error) == 0) {
 
			// Pega extensão da imagem
			preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
 
        	// Gera um nome único para a imagem
        	$nome_imagem = md5(uniqid(time())) . "." . $ext[1];
 
        	// Caminho de onde ficará a imagem
        	$caminho_imagem = "fotos/" . $nome_imagem;
 
			// Faz o upload da imagem para seu respectivo caminho
			move_uploaded_file($foto["tmp_name"], $caminho_imagem);
 
			// Insere os dados no banco
			$sql = mysql_query("INSERT INTO usuarios VALUES ('', '".$nome."', '".$email."', '".$nome_imagem."')");
 
			// Se os dados forem inseridos com sucesso
			if ($sql){
				echo "Você foi cadastrado com sucesso.";
			}
		}
 
		// Se houver mensagens de erro, exibe-as
		if (count($error) != 0) {
			foreach ($error as $erro) {
				echo $erro . "<br />";
			}
		}
	}
}
?>
Resumindo, nós pegamos a imagem enviada, verificamos se ela está dentro dos limites permitidos, depois jogamos essa foto na pasta fotos/ do servidor e na tabela de usuários do banco de dados adicionamos as informações do usuário juntamente com o nome da foto.

OBS: não esqueça de dar pemissão de gravar na pasta onde serão gravadas as fotos.

4. Exibindo a imagem

Agora é simples. Vamos supor que queremos exibir as informações de todos os usuários, incluindo a foto:

<?php
// Seleciona todos os usuários
$sql = mysql_query("SELECT * FROM usuarios ORDER BY nome");
 
// Exibe as informações de cada usuário
while ($usuario = mysql_fetch_object($sql)) {
	// Exibimos a foto
	echo "<img src='fotos/".$usuario->foto."' alt='Foto de exibição' /><br />";
	// Exibimos o nome e email
	echo "<b>Nome:</b> " . $usuario->nome . "<br />";
	echo "<b>Email:</b> " . $usuario->email . "<br /><br />";
}
?>
5. Excluindo imagem

E se for necessário excluir um usuário? Simples, utilizamos o comando delete e tudo certo, porém a foto dele vai continuar lá na pasta fotos/ do nosso servidor. A solução é simples, utilizamos a função unlink(). Vamos supor que queremos remover o usuário de ID = 1 e sua respectiva foto:

<?php
// ID de exemplo
$id = 1;
 
// Selecionando nome da foto do usuário
$sql = mysql_query("SELECT foto FROM usuarios WHERE id = '".$id."'");
$usuario = mysql_fetch_object($sql);
 
// Removendo usuário do banco de dados
$sql = mysql_query("DELETE FROM usuarios WHERE id = '".$id."'");
 
// Removendo imagem da pasta fotos/
unlink("fotos/".$usuario->foto."");
?>
6. Conclusão

Podemos concluir que é muito simples fazer upload de uma imagem para o servidor, e não só apenas imagem, poderia ser qualquer outro arquivo, só mudaria o modo de validação. Espero que vocês tenham entendido, até o próximo artigo. Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal.

 

Cheguei à um outro ponto do meu problema:

 

Ao utilizar o seguinte para remover as 4 fotos referentes ao id:

 

<?php
  $id = $_GET['id'];
  
  mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor.");
  mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados");
	
  $sql = mysql_query("SELECT imagens FROM testes WHERE id= '".$id."'");
  $trabalhos = mysql_fetch_object($sql);
		
  unlink("../uploads/".$trabalhos->imagens."");
?>

O seguinte erro aparece:

 

Warning: unlink(../uploads/img1.jpg, img2.jpg, img3.jpg, img4jpg) [function.unlink]: No such file or directory in D:\Projetos\mbarros\admin\excluir.php on line 10

 

Para enviar as 4 imagens para a pasta e seus nomes para o DB eu utilizei implode (daí talvez a virgula entre as img*.jpg). Por algum acaso eu teria que utilizar a função explode para separar as informações -- imagens -- e depois apaga-las? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para enviar as 4 imagens para a pasta e seus nomes para o DB eu utilizei implode (daí talvez a virgula entre as img*.jpg). Por algum acaso eu teria que utilizar a função explode para separar as informações -- imagens -- e depois apaga-las? :huh:

 

 

não é meio contraditório utilizar implode e depois explode??

se você seguir a dica que eu dei no outro post quem sabe funcione

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moderação: tópico resolvido

 

Agradeço a todos pela ajuda, mas acabei seguindo um caminho totalmente diferente:

 

Alterei meu script para que o grupo de imagens referente ao Título fosse agrupado em pastas separadas dentro de uma central.

 

Feito isso, remodelei meu script de exclusão de dados para que apagasse os dados do BD, excluisse os arquivos da pasta referente ao título e em seguida apagasse a referida pasta.

 

simples! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

enviar.php

<?php
	$numeroCampos = 4;
	$titulo = $_POST["titulo"];
	$resumo = $_POST["resumo"];
	$producao = $_POST["producao"];
	$detalhes = $_POST["detalhes"];
	$caminho =  "../uploads/" . $titulo;
	$nomeArquivo = ($_FILES["imagens"]["name"]);
	$imagens = implode(", ", $_FILES["imagens"]["name"]);
	
	mysql_connect("localhost", "root", "") or die("Não foi possível conectar ao Servidor.");
	mysql_select_db("lab") or die("Não foi possível selecionar a Base de Dados.");
	
	for($i = 0; $i < $numeroCampos; $i++)
	{
		$nomeArquivo = $_FILES["imagens"]["name"][$i];
		$nomeTemporario = $_FILES["imagens"]["tmp_name"][$i];
		
		if(file_exists($caminho) == FALSE)
		{
			@mkdir($caminho, 0777);
		}
		
		if(move_uploaded_file($nomeTemporario, $caminho .'/'. $nomeArquivo))
		{
		}
		else
		{
			echo "Erro ao enviar os arquivos.";
		}
	}
	echo "Arquivos enviados com sucesso.";
	mysql_query("INSERT INTO `trabalhos` (imagens, titulo, resumo, producao, detalhes) VALUES('$imagens', '$titulo', '$resumo', '$producao', '$detalhes')");
?>

excluir.php

<?php
	mysql_connect("localhost", "root", "") or die("Não foi possível conectar ao Servidor.");
	mysql_select_db("lab") or die("Não foi possível selecionar o Banco de Dados.");
	
	$sql = "SELECT * FROM trabalhos WHERE id=".$_GET['id'];
	
	$resultado = mysql_query($sql) or die("Não foi possível realizar a consulta.");
	
	while($linha = mysql_fetch_array($resultado))
	{		
		$titulo = $linha['titulo'];
		$caminho = "../uploads/" . $titulo;
		
		if($abre = @opendir($caminho))
		{
			while(false !== ($arquivo = readdir($abre)))
			{
				@unlink("$caminho/$arquivo");
			}
			@closedir($abre);
			@rmdir($caminho);
			echo "O diretório $caminho foi limpo e excluído.";
		}
		else
		{
			"O diretório $caminho não existe.";
		}
	}
	mysql_query("DELETE FROM trabalhos WHERE id=".$_GET['id']);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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