jappa 0 Denunciar post Postado Abril 16, 2010 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
Henrique Flausino 0 Denunciar post Postado Abril 16, 2010 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
Jaime_Pinheiro 0 Denunciar post Postado Abril 16, 2010 função unlink vem sempre bem acompanhada de file_exists: $file = "d:\www\img.jpg"; if (file_exists($file)) unlink($file); Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Salles 1 Denunciar post Postado Abril 17, 2010 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