Ir para conteúdo

POWERED BY:

Arquivado

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

formigoni

[Resolvido] Deleção

Recommended Posts

Olá, boa tarde pessoal.

Tenho um script deleção mas o mesmo não está funcionando legal, tenho que deletar o produto e as fotos desse produto removendo as imagens da pasta.

A deleção dos dados do banco ele faz legal, mas não estou conseguindo remover as imagens, vejam o script:

 

<?php 
/*
----------------------------------------------------------------------
Arquivo .............: PHP - Formulário de deleção de produtos           
Criado em  ..........: Agosto/2008                                     
----------------------------------------------------------------------
*/ 

	require_once('../Connections/conexao.php');
		
	// resgata a variável do formulário
	$id_produto = $_POST['mudar'];

	// início do for
	for($i = 0; $i<count($id_produto); $i++) {
	
		// seleciona o nome da imagem do produto
		$sql = "SELECT foto FROM sup_fotos_produtos WHERE id_produto = '$id_produto[$i]' ";
		$reg = mysql_query($sql) or die(mysql_error());
		$registro = mysql_fetch_assoc($reg);
		$total = mysql_num_rows($reg);
		
		// resgata nome do produto para remove-lo do banco de dados
		$imagem_nome[] = $registro["foto"];
	
		// deleta o produto e a imagem da tabela que contém as fotos
		$sql_deleta = mysql_query("DELETE FROM sup_fotos_produtos WHERE id_produto = '$id_produto[$i]' ");

		if ( $imagem_nome != "" ) {
			// removo a(s) imagen(s) do diretório
			unlink("../produtos_img/$imagem_nome[$i]");
		}
		
                // deleta o produto da tabela 	
		$sql_deleta_produto = mysql_query("DELETE FROM sup_produtos WHERE id_produto = '$id_produto[$i]' ");
		// fim do for
	
	}
	
	echo "<meta http-equiv='refresh' content='0; url=seleciona_produtos.php'>";


?>

Se puderem me ajudar, agradeço.

Fiquem na paz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para efeito de debug, troque isto

 

if ( $imagem_nome != "" ) {
                        // removo a(s) imagen(s) do diretório
                        unlink("../produtos_img/$imagem_nome[$i]");
                }

Por isto

 

if ( $imagem_nome != "" ) {
                        echo 'O nome da imagem que vai ser excluída é esta - ../produtos_img/'.$imagem_nome[$i];
                        // removo a(s) imagen(s) do diretório
                        unlink("../produtos_img/$imagem_nome[$i]");
                }

Veja se o que aparece é realmente o caminho da foto.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá matias_rezende,

 

Seguinte, o endereço aparece normal, mas o script está excluindo somente a última imagem da pasta.

Já vasculhei o script de baixo acima e nada de conseguir.

Fica na paz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ele só está entrando no if na última imagem... Faz um debug.

 

echo '$imagem_nome tem o valor de '.$imagem_nome;
if (!empty($imagem_nome)) {
                        // removo a(s) imagen(s) do diretório
                        unlink("../produtos_img/$imagem_nome[$i]");
                }

Para testar se está vazio, use empty().

http://br.php.net/empty

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a lógica que você usou está errada.

 

Tente assim:

 

<?php 
        require_once('../Connections/conexao.php');
                
        // resgata a variável do formulário
        $id_produto = $_POST['mudar'];

        // seleciona o nome da imagem do produto
        $sql = "SELECT foto FROM sup_fotos_produtos WHERE id_produto = '.$id_produto.' ";
        $reg = mysql_query($sql) or die(mysql_error());
        $registro = mysql_fetch_assoc($reg);
        $total = mysql_num_rows($reg);

        // início do for
        for($i = 0; $i < total; $i++) {
                
                // resgata nome do produto para remove-lo do banco de dados
                $imagem_nome = $registro[$i]["foto"];

                if ( $imagem_nome != "" ) {
                        // removo a(s) imagen(s) do diretório
                        unlink("../produtos_img/".$imagem_nome);
                }
        }

        // deleta o produto e a imagem da tabela que contém as fotos
        mysql_query("DELETE FROM sup_fotos_produtos WHERE id_produto = '.$id_produto.' ");

        // deleta o produto da tabela   
        mysql_query("DELETE FROM sup_produtos WHERE id_produto = '.$id_produto.' ");

       //use o header para ir para outra URL
       header("Location: seleciona_produtos.php");
?>

Acho que assim vai dar.

 

Antes de executar isso, faça um backup (hehe).

 

Uma dica, evite de usar os comandos SQLs dentro do FOR se você pode usar fora dele. O script fica mais rápido e o banco menos ocupado.

 

Qualquer dúvida posta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá webruno, bom dia.

 

Segui a sua dica, mas agora não está excluindo nada, nem os dados do banco e nem a as fotos da pasta.

Estranho, pois na forma original ao menos os dados do banco eram excluídos.

 

Fica na paz e obrigado por ter respondido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte. Coloca este código no início. Poste aqui o que imprimir.

 

echo '<pre>';
print_r($_POST);
die('</pre>');

 

E volte a lógica do primeiro post. Aparentemente ela está correta.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bom dia matias_rezende.

Veja o resultado impresso:

 

 Parse error: parse error, unexpected T_VARIABLE in F:\servidor\www\supply2\painel\excluir_produtos_lista.php on line 17

Valeu e fica na paz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí cara,

 

essa variável $id_produto = $_POST['mudar']; é um array? Se sim, me desculpa, achei que era um id só, aí não funciona como te disse mesmo.

 

O que o matias falou sobre o print_r($_POST) é interessante para saber sobre os dados enviados. Se você colocar esse código logo após o <?PHP acho que não dará o erro.

 

Qualquer coisa volta aí.

Falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai webruno,

nem precisa se desculpar, eu também não disse nada a respeito da variável.

 

Aproveitando, vou explicar melhor.

Tenho uma página onde mostro todos os produtos que tenho cadastrado, ai se o administrador desejar excluir determinado produto ele seleciona o checkbox correspondente, a variável tem esse nome no meu form:

 

  mudar[]

A página de exclusão recebe a variável e exclui os dados do banco mas não está excluindo as imagens da pasta, já tentei todas as possiblidades passadas por vocês aqui e nada tem dado resultado.

Mudei a posição do código passado pelo Matias e mesmo assim ainda está acusando o seguinte erro:

 

 Parse error: parse error, unexpected T_VARIABLE in F:\servidor\www\supply2\painel\excluir_produtos_lista.php on line 11

Valeu a força e fiquem na paz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ô Matias, me perdoe, na correria aqui não tinha atualizado a página corretamente, agora sim, ai está o resultado do script que você me passou:

 

 Array
(
    [selall] => on
    [mudar] => Array
        (
            [0] => 112
        )

    [button] => Exclui Selecionados

O id do produto vem corretamente.

 

Valeu e obrigado pela paciência.

Fica na paz

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, o ID está certo, é o 112 que você quer deletar né?

 

Faz essa tentativa então:

 

<?php
        require_once('../Connections/conexao.php');
                
        // resgata a variável do formulário
        $ids = implode(", ", $_POST['mudar']);

        // seleciona o nome da imagem do produto
        $sql = "SELECT foto FROM sup_fotos_produtos WHERE id_produto IN (". $ids .") ";
        $reg = mysql_query($sql) or die(mysql_error());
        $registro = mysql_fetch_assoc($reg);
        $total = mysql_num_rows($reg);

	echo "Resultado do SELECT: <br />";
	print_r($registro);
	echo "<br />";

        // início do for
        for($i = 0; $i < total; $i++) {
			
			// resgata nome do produto para remove-lo do banco de dados
			$imagem_nome = $registro[$i]["foto"];
			
			echo "Imagem a ser deletada: ".$imagem_nome."<br />";
			
			/*if ( $imagem_nome != "" ) {
					// removo a(s) imagen(s) do diretório
					unlink("../produtos_img/".$imagem_nome);
			}*/
        }

        // deleta o produto e a imagem da tabela que contém as fotos
        //mysql_query("DELETE sup_fotos_produtos WHERE id_produto IN (". $ids .") ");

        // deleta o produto da tabela   
        //mysql_query("DELETE sup_produtos WHERE id_produto IN (". $ids .") ");

       //use o header para ir para outra URL
       //header("Location: seleciona_produtos.php");
?>

Perceba que os comandos que deletam as imagens e os registros do banco estão comentados. Execute o script e veja se o que aparecer na tela é o que você espera. Se for, descomente os comandos e teste de novo.

 

Falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Matias, veja o resultado:

 

 Resultado do SELECT: 
 Array ( [foto] => 005.jpg ) 

No script só está sendo mostrado a última foto de 3 que tenho cadastrado e é realizada a exclusão dessa última foto da pasta ficando ainda outras 2.

 

Valeu a força e fica na paz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Matias,

 

Sim, as fotos que estão armazenadas no meu banco fazem parte desse id 112, veja:

 

Estrutura da tabela de produtos

 

id_produto id_categoria id_subcategoria produto situacao status

 

 112 14 25 Alinhador de Embalagem 1 1 

Estrutura da tabela de imagens

 

id_foto id_produto id_categoria id_subcategoria foto descricao_foto

 

 151 112 14 25 005.jpg 5 
 149 112 14 25 003.jpg 3 
 150 112 14 25 004.jpg 3  

Fica na paz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual dos 2 código é o que veio do print_r do post?

 

Este?

Olá Matias, veja o resultado:

 

Resultado do SELECT:

Array ( [foto] => 005.jpg )

 

 

 

No script só está sendo mostrado a última foto de 3 que tenho cadastrado e é realizada a exclusão dessa última foto da pasta ficando ainda outras 2.

 

Valeu a força e fica na paz.

 

Ou este?

Ô Matias, me perdoe, na correria aqui não tinha atualizado a página corretamente, agora sim, ai está o resultado do script que você me passou:

 

Array

(

[selall] => on

[mudar] => Array

(

[0] => 112

)

 

[button] => Exclui Selecionados

 

 

 

 

O id do produto vem corretamente.

 

Valeu e obrigado pela paciência.

Fica na paz

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

O resultado do print_r do post é o segundo, esse aqui:

 

 Array
(
[selall] => on
[mudar] => Array
(
[0] => 112
)

[button] => Exclui Selecionados

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.