Ir para conteúdo

POWERED BY:

Arquivado

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

jappa

excluir arquivo do servidor com comandos php

Recommended Posts

Bom dia,

 

É o seguinte estou desenvolvendo uma loja virtual, e tem a parte de produtos. Quando eu insiro o produto tem as fotos dele até aqui sussegado. Mas ao excluir os dados da tabela gostaria que excluise do servidor tambem. Tem outro problema pode ser incluida ate 4 fotos so que nenhuma é obrigatório ou seja quando eu uso a funcao unlink ele exclui mas se nao tiver foto ele gera um erro pois nao acha o arquivo no servidor para excluir.

 

Fiz o código da seguinte maneira para ele varrer o banco puxar as informações e armazenar as informações em variável ae fiz um IF para validar as váriaveis (ver se retorna valor). da seguinte maneira exemplo: se a váriavel tiver algum valor exclua a foto do servidor se não segue em frente em outro if mas da foto2 e assim por diante.

 

Agora o meu problema ele exclui os dados da tabela mas não exclui a foto no servidor e tambem nao gera nenhum erro. :(

 

Vejam o código de exclusão, sou inciante na linguagem e não tenho muita noções se alguem souber o erro me ajuda por favor.

 


if($_GET['funcao'] == "excluir"){

$id = $_GET['id'];

$sql_exc = "SELECT * FROM produtos WHERE id_produto = '$id'";
$query = mysql_query($sql_exc);
while ($linha = mysql_fetch_array($query)){
	
	$foto1=$linha['foto1'];
	$foto2=$linha['foto2'];
	$foto3=$linha['foto3'];	
	$foto4=$linha['foto4'];	
	$foto5=$linha['mininhatura'];
	
}
	
	if($foto1 == ""){
		
		echo "Sem foto nº1";
				
	}else{
			
		unlink("../images/$foto1");

	}

	if($foto2 == ""){
		
		echo "Sem foto nº2";
				
	}else{
			
		unlink("../images/$foto2");

	}

	if($foto1 == ""){
		
		echo "Sem foto nº3";
				
	}else{
			
		unlink("../images/$foto3");

	}

	if($foto4 == ""){
		
		echo "Sem foto nº4";
				
	}else{
			
		unlink("../images/$foto4");

	}

	if($foto5 == ""){
		
		echo "Sem foto nº5";
				
	}else{
			
		unlink("../images/$foto5");

	}

	$sql = mysql_query ("DELETE FROM produtos WHERE id_produto = '$id'");
	echo "<META HTTP-EQUIV=REFRESH CONTENT='0; URL=index.php?pg=produtos'>";	
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso depende muito de como você está usando o unlink, pois eu uso ele assim e executo ele sempre que tenho um arquivo fantasma em meu sistema.

if ($acao == "del"){
	unlink("arquivos/.php");
	echo '<script>window.location="admin.php"</script>';
}
Veja se te ajuda.

 

 

Att.

Henrique Flausino

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, boa noite.

 

O tipo de verificação que você fez está certa, e o uso da função file_exists() também ajuda pra caramba... mas pra ficar melhor ainda pra você, talvez seja mais interessante trabalhar com uma tabela no banco só pras fotos dos produtos.

 

Cria a seguinte tabela, ou algo parecido:

--
-- Estrutura da tabela `fotos_produtos`
--

CREATE TABLE IF NOT EXISTS `fotos_produtos` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `produto_id` int(10) NOT NULL,
  `url_foto` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Daí, a cada produto que você salvar, salve também as fotos associadas. Na hora de deletar as fotos do banco, você tem duas alternativas:

1) Executar a query manualmente, do jeito que você está fazendo atualmente na sua tabela de produtos.

2) Defina produto_id da tabela de fotos como uma chave estrangeira da tabela produtos, e coloque ON DELETE: CASCADE. Isso vai fazer com que todas as fotos associadas a um determinado produto sejam apagadas (do banco) quando esse produto for excluído da sua respectiva tabela.

 

OBS: Eu voto pela opção número 2.

 

Bom, mas antes de fazer tudo isso, ou seja, excluir o produto e deletar as fotos correspondentes, você terá de apagar as fotos do servidor. Daí você pode fazer assim:

 

<?php

// buscando as fotos de determinado produto no banco
$consulta = mysql_query("SELECT url_foto FROM fotos_produtos WHERE produto_id = '".$produto_id."'");

// vamos verificar se há fotos no banco, ou seja, se há fotos no servidor para serem excluídas
if (mysql_num_rows() > 0) {
    // como pode ser mais de uma, melhor fazermos isso dentro de um loop.
    while($foto = mysql_fetch_assoc($consulta)) {
        unlink($foto['url_foto']);
    }
}

?>

Aí, depois disso, você pode excluir o produto e as fotos no banco serão também excluídas (se definida a chave estrangeira).

 

OBS: Note que não é necessário verificar se o array $foto está vazio, porque a função mysql_num_rows() já faz isso, ou seja, se entrou na condicional (se é maior do que zero), é porque existem fotos a serem deletadas e, portanto, o array $foto não está vazio.

 

Espero ter ajudado, nem que seja com uma luz no fim do túnel... rsrss..

 

Abraço, cara.

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.