formigoni 0 Denunciar post Postado Agosto 20, 2009 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
Matias Rezende 50 Denunciar post Postado Agosto 20, 2009 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
formigoni 0 Denunciar post Postado Agosto 20, 2009 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
Matias Rezende 50 Denunciar post Postado Agosto 20, 2009 mas o script está excluindo somente a última imagem da pasta. Mas ele imprime todas ou só a última? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
formigoni 0 Denunciar post Postado Agosto 20, 2009 Olá Matias, Desculpa, ele imprime somente a última. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Agosto 20, 2009 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
webruno 0 Denunciar post Postado Agosto 20, 2009 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
formigoni 0 Denunciar post Postado Agosto 21, 2009 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
Matias Rezende 50 Denunciar post Postado Agosto 21, 2009 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
formigoni 0 Denunciar post Postado Agosto 21, 2009 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
webruno 0 Denunciar post Postado Agosto 21, 2009 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
formigoni 0 Denunciar post Postado Agosto 21, 2009 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 Rezende 50 Denunciar post Postado Agosto 21, 2009 Este erro não tem nada a ver com o que eu mandei. Procura que tem um erro de escrita no restante do código. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
formigoni 0 Denunciar post Postado Agosto 21, 2009 Ô 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
webruno 0 Denunciar post Postado Agosto 21, 2009 É, 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
formigoni 0 Denunciar post Postado Agosto 21, 2009 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
webruno 0 Denunciar post Postado Agosto 21, 2009 Mas no seu banco de dados as outras fotos que não tão aparecendo pertecem ao ID_PRODUTO = 112? Compartilhar este post Link para o post Compartilhar em outros sites
formigoni 0 Denunciar post Postado Agosto 21, 2009 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
Matias Rezende 50 Denunciar post Postado Agosto 21, 2009 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
formigoni 0 Denunciar post Postado Agosto 21, 2009 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