lauinsane 0 Denunciar post Postado Fevereiro 11, 2010 Estou com um problema para deletar alguns registros em tabelas relacionadas e gostaria de uma ajuda se possivel. A estrutura do BD está assim: CREATE TABLE gvnews ( id int(5) unsigned NOT NULL auto_increment, titulo varchar(255) NOT NULL, data date NOT NULL, texto text, PRIMARY KEY (id) ); CREATE TABLE gvnews_img ( id int(5) unsigned NOT NULL auto_increment, id_news varchar(5) NOT NULL, imagem text, PRIMARY KEY (id) ); E o código que estou utilizando é este. Alguma coisa com certeza está feito errado na parte de deletar, pois o mesmo não funciona hehehehe. Ele tem que deletar o registro da noticia de GVNEWS e depois o registro relacionada a mesma noticia de GVNEWS_IMG e ai então remover a imagem que está armazenada em uma pasta. Qualquer ajuda ou diga será muito bem recebida :D <? include ("include/conecta.php"); require_once("verifica.php"); $id = $_GET["id"]; if($_GET["acao"] == excluir){ $consulta = mysql_query("SELECT * FROM gvnews WHERE id = '$id'"); $resultado = mysql_fetch_object($consulta); $sql = "DELETE FROM gvnews,gvnews_img WHERE gvnews.id=gvnews_img.id_news AND gvnews.id ='$id' "; $del = mysql_query($sql)or die(mysql_error()); if( $del ){ if(is_file('../' . $resultado->imagem)){ unlink('../' . $resultado->imagem); } } } ?> <!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"> <script language=javascript> function abrir (URL){ window.open(URL,"janela1","width=450,height=500,left=400,top=200,scrollbars=YES") } </script> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr> <tr> <td><table width="600" border="0" cellspacing="0" cellpadding="0"> <? $dados = mysql_query("SELECT * FROM gvnews ORDER BY data DESC"); $conta = mysql_num_rows($dados); if($conta == "0"){ echo "Sem noticias cadastradas"; } else { ?> <tr> <td width="47">ID</td> <td width="80">Data</td> <td width="338">Titulo</td> <td width="135">Status</td> </tr> <? while($linha=mysql_fetch_array($dados)){ $id = $linha["id"]; $titulo = $linha["titulo"]; $data = $linha["data"]; $imagem = $linha["imagem"]; $data_explode = explode('-',$data);// Remove a / da variavel data $data_explode[0];// Exibe somente o dia da data $data_explode[1];// Exibe somente o mes da data $data_explode[2];// Exibe somente o ano da data $data_formatada = $data_explode[2]."/".$data_explode[1]."/".$data_explode[0]; ?> <tr> <td><? echo "$id" ?></td> <td><? echo "$data_formatada" ?></td> <td><? echo "$titulo" ?></td> <td><table width="100" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> <td> </td> <td> </td> </tr> <tr> <td><a href="javascript:abrir('gvnews_view.php?id=<?php echo "$id"; ?>')">Visualizar</a></td> <td><a href="?cat=gvnews⊂=editar&id=<?php echo "$id"; ?>">Editar</a></td> <td><a href="?cat=gvnews&acao=excluir&id=<?php echo "$id"; ?>">Excluir</a></td> </tr> </table></td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <? } } ?> </table></td> </tr> </table> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 11, 2010 CREATE TABLE gvnews ( id int(5) unsigned NOT NULL auto_increment, titulo varchar(255) NOT NULL, data date NOT NULL, texto text, PRIMARY KEY (id) ) ENGINE = INNODB; CREATE TABLE gvnews_img ( id int(5) unsigned NOT NULL auto_increment, id_news varchar(5) NOT NULL, imagem text, PRIMARY KEY (id), INDEX (id_news), FOREIGN KEY (id_news) REFERENCES gvnews(id) ON DELETE CASCADE ) ENGINE = INNODB; Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 11, 2010 Mas a parte do DELETE na consulta SQL é que não estou conseguindo achar a formula. Fica me retornando o seguinte erro: "Você tem um erro de sintaxe no seu SQL próximo a 'WHERE gvnews.id=gvnews_img.id_news AND gvnews.id ='1'' na linha 1" Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 11, 2010 sua ID é INTEGER, deve ser passada fora das aspas ... WHERE ID = 1 se estruturar o banco com a FOREIGN KEY, não precisará fazer esta comparação de ID's, basta remover a notícia da tabela principal: DELETE FROM gvnews WHERE id = 1 Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 11, 2010 É, não funcionou, Ele deleta da tabela gvnews mas não da gvnews_img e nem remove o arquivo da pasta. Alguma outra dica que posso tentar? Pois meu conhecimento limitado está mais que esgotado. sua ID é INTEGER, deve ser passada fora das aspas ... WHERE ID = 1 se estruturar o banco com a FOREIGN KEY, não precisará fazer esta comparação de ID's, basta remover a notícia da tabela principal: DELETE FROM gvnews WHERE id = 1 O ID é passado para saber qual noticia é para excluir dentro da relação de noticias que é dada na página. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 11, 2010 eu só tinha adicionado a foreign key, agora que estudei suas tabelas e estão mal formadas =) CREATE TABLE gvnews ( id int(5) unsigned NOT NULL auto_increment, titulo varchar(255) NOT NULL, dia date NOT NULL, texto text, PRIMARY KEY (id) ) ENGINE = INNODB; CREATE TABLE gvnews_img ( id int(5) unsigned NOT NULL auto_increment, id_news int(5) unsigned NOT NULL, imagem text, PRIMARY KEY (id), INDEX (id_news), FOREIGN KEY (id_news) REFERENCES gvnews(id) ON DELETE CASCADE ) ENGINE = INNODB; agora sim TEM que funcionar. até testei aqui Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 12, 2010 eu só tinha adicionado a foreign key, agora que estudei suas tabelas e estão mal formadas =) CREATE TABLE gvnews ( id int(5) unsigned NOT NULL auto_increment, titulo varchar(255) NOT NULL, dia date NOT NULL, texto text, PRIMARY KEY (id) ) ENGINE = INNODB; CREATE TABLE gvnews_img ( id int(5) unsigned NOT NULL auto_increment, id_news int(5) unsigned NOT NULL, imagem text, PRIMARY KEY (id), INDEX (id_news), FOREIGN KEY (id_news) REFERENCES gvnews(id) ON DELETE CASCADE ) ENGINE = INNODB; agora sim TEM que funcionar. até testei aqui Ainda nada Evandro, ele deleta da tabela gvnews mas não da gvnews_im nem apaga as imagens da pasta. Vou postar como está o código da página para deletar os valores da tabela, se não for pedir demais, pode da uma verificada pra mim se está tudo certo? O bd alterei para esse último que você postou pra mim: <? include ("include/conecta.php"); require_once("verifica.php"); $id = $_GET["id"]; if($_GET["acao"] == excluir){ $consulta = mysql_query("SELECT * FROM gvnews_img WHERE id = '$id'"); $resultado = mysql_fetch_object($consulta); $sql = "DELETE FROM gvnews WHERE id = '$id'"; $del = mysql_query($sql)or die(mysql_error()); if( $del ){ if(is_file('../' . $resultado->imagem)){ unlink('../' . $resultado->imagem); } } } ?> <!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"> <script language=javascript> function abrir (URL){ window.open(URL,"janela1","width=450,height=500,left=400,top=200,scrollbars=YES") } </script> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr> <tr> <td><table width="600" border="0" cellspacing="0" cellpadding="0"> <? $dados = mysql_query("SELECT * FROM gvnews ORDER BY data DESC"); $conta = mysql_num_rows($dados); if($conta == "0"){ echo "Sem noticias cadastradas"; } else { ?> <tr> <td width="47">ID</td> <td width="80">Data</td> <td width="338">Titulo</td> <td width="135">Status</td> </tr> <? while($linha=mysql_fetch_array($dados)){ $id = $linha["id"]; $titulo = $linha["titulo"]; $data = $linha["data"]; $imagem = $linha["imagem"]; $data_explode = explode('-',$data);// Remove a / da variavel data $data_explode[0];// Exibe somente o dia da data $data_explode[1];// Exibe somente o mes da data $data_explode[2];// Exibe somente o ano da data $data_formatada = $data_explode[2]."/".$data_explode[1]."/".$data_explode[0]; ?> <tr> <td><? echo "$id" ?></td> <td><? echo "$data_formatada" ?></td> <td><? echo "$titulo" ?></td> <td><table width="100" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> <td> </td> <td> </td> </tr> <tr> <td><a href="javascript:abrir('gvnews_view.php?id=<?php echo "$id"; ?>')">Visualizar</a></td> <td><a href="?cat=gvnews⊂=editar&id=<?php echo "$id"; ?>">Editar</a></td> <td><a href="?cat=gvnews&acao=excluir&id=<?php echo "$id"; ?>">Excluir</a></td> </tr> </table></td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <? } } ?> </table></td> </tr> </table> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 13, 2010 Só uma pergunta pra quem manja do assunto, qual id eu teria que mandar ele apagar pra deletar em cascata? o id_news é? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 13, 2010 feita com o seu próprio código http://www.youtube.com/watch?v=l3ZqB39j05U Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 13, 2010 feita com o seu próprio código http://www.youtube.com/watch?v=l3ZqB39j05U Ok, o valor do ID já está pré definido como 1 no seu exemplo, mas e se você tem 4 noticias, com 3 imagens cadastradas em cada e quer deletar a noticia com ID 3. Pelo código que estou usando pode ver que passo essa id pelo link e depois é feito um GET para excluir exatamente a que quero. É isso que não consegui fazer, consegui apenas fazer depois que alterei para o código que estou postando abaixo, talvés destrui toda a funcionabilidade do BD que você fez, mas foi o unico jeito que consegui fazer funcionar. Outro problema que surgiu, é para excluir as imagens que estão no servidor relacionados com o registro selecionado para exclusão. UMA imagem ele exclui, mas as outras não. Dei uma reduzida no código para ficar só a lógica mesmo, o resto era desnecessário para o fórum. Uma coisa que notei, aind sobre excluir do BD os registro, é que estou passando pelo link o id apenas do gvnews, mas pelo seu exemplo no vídeo, excluindo a id do gvnews já provoca a cascata nas tabelas, então to mais perdido que cego em tiroteio hehehehe <? include ("include/conecta.php"); require_once("verifica.php"); $id = $_GET["id"]; if($_GET["acao"] == excluir){ $consulta = mysql_query("SELECT * FROM gvnews_img WHERE id_news = $id"); $resultado = mysql_fetch_object($consulta); $sql = "DELETE gvnews,gvnews_img FROM gvnews INNER JOIN gvnews_img WHERE gvnews.id=$id AND gvnews_img.id_news=$id"; $del = mysql_query($sql)or die(mysql_error()); if( $del ){ if(is_file($resultado->imagem)){ unlink($resultado->imagem); } } } ?> <!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=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td><table width="182" border="0" cellspacing="0" cellpadding="0"> <? $dados = mysql_query("SELECT * FROM gvnews ORDER BY data DESC"); $conta = mysql_num_rows($dados); if($conta == "0"){ echo "Sem noticias cadastradas"; } else { ?> <tr> <td width="47">ID</td> <td width="135">Status</td> </tr> <? while($linha=mysql_fetch_array($dados)){ $id = $linha["id"]; ?> <tr> <td><? echo "$id" ?></td> <td><a href="?cat=gvnews&acao=excluir&id=<?php echo $id; ?>">Excluir</a></td> </tr> <? } } ?> </table></td> </tr> </table> </body> </html> Deve ser o mesmo sistema do adicionar multiplas imagens utilizando loop, mas não estou achando a lógica novamente. Compartilhar este post Link para o post Compartilhar em outros sites
lauinsane 0 Denunciar post Postado Fevereiro 15, 2010 RESOLVIDO <? include ("include/conecta.php"); require_once("verifica.php"); $id = $_GET["id"]; if($_GET["acao"] == excluir){ $consulta = mysql_query("SELECT * FROM gvnews_img WHERE id_news = $id"); while($resultado = mysql_fetch_object($consulta)){ unlink($resultado->imagem); } $sql = "DELETE gvnews,gvnews_img FROM gvnews INNER JOIN gvnews_img WHERE gvnews.id=$id AND gvnews_img.id_news=$id"; $del = mysql_query($sql)or die(mysql_error()); } ?> Compartilhar este post Link para o post Compartilhar em outros sites