tozmor 0 Denunciar post Postado Janeiro 22, 2014 Boa tarde! Estou tendo dificuldade em gravar dados em 2 tabelas, com 2 forms, vou enviar o código dos 2 ficheiros que estou usando: formulário: <? $hostname = "localhost"; $login = "root"; $password = "MTwebserver"; $bd = "escolas"; $conectar = mysql_connect($hostname, $login, $password); mysql_select_db ($bd, $conectar) or die ("Não foi possível realizar a ligação à Base de Dados! Tente Novamente!"); $sql = "SELECT * from detalhes where esc_id=".$_GET['esc_id']; $resultado = mysql_query($sql); while ($registo=mysql_fetch_array($resultado)){ $esc_id = $registo["esc_id"]; $nome_escola = $registo["nome_escola"]; $morada = $registo["morada"]; $gepe = $registo["gepe"]; $telefone = $registo['telefone']; $rede =$registo['rede']; ?> <table with="65%" border="1" align="center"> <form action="alt_inf.php?esc_id=<? echo $esc_id ?>" method="POST" enctype="multipart/form-data" id="form1" name="form1"> <tr> <td colspan="3"><div align="center"><h2>DETALHES DA ESCOLA</h2></div> </td> </tr> <tr> <td colspan="3">Escola <input name="escola_novo" type="text" size="50" value="<? echo $nome_escola ?>" /> </td> </tr> <tr> <td colspan="3">Morada <textarea name="morada_novo" id="morada" cols="45" rows="5"><? echo $morada ?></textarea></td> </tr> <tr> <td colspan="3">Código GEPE <input name="gepe_novo" type="text" size="50" value="<? echo $gepe ?>" /> </td> </tr> <td colspan="3">Telefone <input name="telefone_novo" type="text" size="50" value="<? echo $telefone ?>" /> </td> </tr> <tr> <td colspan="3">Rede <textarea name="rede_novo" cols="50" rows="5"><? echo $rede ?></textarea> </td> </tr> <tr> <td>Equipamento <table width=50% align=center text-align=center"> <form action="alt_inf.php?esc_equi=<? echo $esc_equi ?>" method="POST" enctype="multipart/form-data" id="form2" name="form2"> <tr> <td colspan="3">Tipo</td > <td colspan="3">Marca</td> <td colspan="3">Modelo</td > <td colspan="3">Nº Série</td> <td colspan="3">Ano</td> <td colspan="3">Fabricante</td > <td colspan="3">Fatura</td> </tr> <? $sql1 = "SELECT equipamento.esc_id, equipamento.tipo, equipamento.marca, equipamento.modelo, equipamento.n_serie, equipamento.ano, equipamento.fabricante, equipamento.fatura FROM equipamento INNER JOIN detalhes on equipamento.esc_id=detalhes.esc_id where equipamento.esc_id=".$_GET['esc_id']; $resultado1=mysql_query($sql1) or die(mysql_error()); while($reg=mysql_fetch_array($resultado1)){ $esc_equi=$reg["esc_equi"]; $esc_id=$reg["esc_id"]; $tipo=$reg["tipo"]; $marca=$reg["marca"]; $modelo=$reg["modelo"]; $n_serie=$reg["n_serie"]; $ano=$reg["ano"]; $fabricante=$reg["fabricante"]; $fatura=$reg["fatura"]; //echo "<tr> //<td>$tipo</td> //<td>$marca</td> //<td>$modelo</td> //<td>$n_serie</td> //<td>$ano</td> //<td>$fabricante</td> //<td>$fatura</td> //</tr>"; ?> <tr> <td colspan="3"><input name="tipo_novo" type="text" size="15" value="<? echo $tipo ?>" /></td> <td colspan="3"><input name="marca_novo" type="text" size="15" value="<? echo $marca ?>" /></td> <td colspan="3"><input name="modelo_novo" type="text" size="15" value="<? echo $modelo ?>" /></td> <td colspan="3"><input name="n_serie_novo" type="text" size="15" value="<? echo $n_serie ?>" /></td> <td colspan="3"><input name="ano_novo" type="text" size="15" value="<? echo $ano ?>" /></td> <td colspan="3"><input name="fabricante_novo" type="text" size="15" value="<? echo $fabricante ?>" /></td> <td colspan="3"><input name="fatura_novo" type="text" size="15" value="<? echo $fatura ?>" /></td> </tr> <? } // echo '</table>'; ?> </table> <tr> <td><input id="form2" name="form2" type="submit" value="Gravar Equi"/> <input id="form1" name="form1" type="submit" value="Gravar" /> <a href="alt_equi.php?esc_id=<? echo $esc_id ?>">Acrescentar Equipamento</a></td> </tr> </form> </form> <tr> </table> <? } ?> Até aqui em qualquer dos botões que eu carregue ele atualiza apenas a tabela detalhes, agora vai o ficheiro com os dados de update: <? $hostname = "localhost"; $login = "root"; $password = "MTwebserver"; $bd = "escolas"; $conectar = mysql_connect($hostname, $login, $password); mysql_select_db ($bd, $conectar) or die ("Não foi possível realizar a ligação à Base de Dados! Tente Novamente!"); $nome_escola = $_POST["escola_novo"]; $morada = $_POST["morada_novo"]; $telefone = $_POST["telefone_novo"]; $gepe = $_POST["gepe_novo"]; $rede = $_POST["rede_novo"]; $esc_id = $_POST["esc_id"]; $tipo = $_POST["tipo_novo"]; $marca = $_POST["marca_novo"]; $modelo = $_POST["modelo_novo"]; $n_serie = $_POST["n_serie_novo"]; $ano = $_POST["ano_novo"]; $fabricante = $_POST["fabricante_novo"]; $fatura = $_POST["fatura_novo"]; $sql = "UPDATE detalhes SET nome_escola = '".$nome_escola."', morada = '".$morada."', telefone = '".$telefone."', gepe = '".$gepe."', rede = '".$rede."' WHERE esc_id=".$_GET['esc_id']; $sql1 = "UPDATE equipamento SET esc_id = '".$esc_id."', tipo = '".$tipo."', marca = '".$marca."', modelo = '".$modelo."', n_serie = '".$n_serie."', ano = '".$ano."', fabricante = '".$fabricante."', fatura = '".$fatura."' INNER JOIN detalhes on equipamento.esc_id=detalhes.esc_id WHERE equipamento.esc_equi=".$_GET['esc_equi']; mysql_query($sql); mysql_query($sql1); echo ('Informação alterada com sucesso'); ?> Qualquer botão que eu carregue ele apenas passa o esc_id, nunca passa o esc_equi como eu queria no segundo form... Agradecia ajuda urgentemente... Agradeço a todos pela atenção Cumprimentos, Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 22, 2014 Olá tozmor td bem? seguinte cara, a grosso modo(existem soluções bem melhores do que estou sugerindo), sugiro que vc faça um if de uma das queries, e depois, caso feito o update, execute a outra dentro do if da primeira. vou mostrar: <?php $update1 = "query de atualização1"; $update2 = "query de atualização2"; //executar $exec1 = mysql_query($update1); if($exec1){ $exec2 = mysql_query($update2); if($exec2){ echo "atualização feita com sucesso"; }else{ echo "problemas na query 2"; } }else{ die('problemas na execução, tente novamente'); } ?> Ah cara, só uns toques de melhores práticas: - faça um só ficheiro de conexão com o banco, exemplo: BD.php, onde lá conterá, unicamente, informações de acesso ao banco; - faça um ficheiro único para processar os forms, exemplo forms.php com uma estrutura switch-case, ex: <?php include("BD.php"); //script de banco $acao = $_REQUEST['acao']; //estrutura switch-case switch($acao){ case 'atualizar': // procedimento atualizar break; case 'cadastrar': // procedimento cadastrar break; } ?> neste exemplo, tem uma simples estrutura chaveada que irá, em um único arquivo, processar suas requisições( de maneira organizada). como vou acionar este arquivo? tá vendo que existe uma variavel com o método de resgate "$_REQUEST", então ela vai ser referenciada atraves de um form, ou passada por get(URL), ex: <form action= "forms.php" method="POST"> <input type="hidden" name="acao" value="atualizar"> -> isso que vai determinar em que bloco vai ocorrer a "magia" </form>; Uma coisa, cara, tá vendo o que está em negrito? então, esse alt_inf ... NÃO PRECISA colocar parametros adicionais, desssa maneira, apenas faça isso com um campo comum. Se o metodo é POST <form action="alt_inf.php?esc_id=<? echo $esc_id ?>" method="POST" enctype="multipart/form-data" id="form1" name="form1"> <tr> <td colspan="3"><div align="center"><h2>DETALHES DA ESCOLA</h2></div> </td> </tr> É cara mais tarde, amanhã, vou ver uma maneira mais legal de popular essas duas tabelas. Espero ter ajudado, se tiver dúvidas dê um grito :D Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 23, 2014 Obrigado pela resposta, não ligue para a conexão à BD, é para integrar em joomla depois :) O meu problema é mesmo gravar na tabela equipamento :) Muito obrigado e se puder dar então uma olhada abraço Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 24, 2014 Gravou?! Olá tozmor, como prometido ontem, tenho uma sugestão para otimizar o processo: a solução tá no próprio comando UPDATE, pois nele é possível fazer alterações de várias tabelas independetemente, ou seja- sem ter vinculos-, vou mostrar um exemplo: $alt = "UPDATE detalhes as d, equipamento as eSET d.nome_escola = '".$nome_escola."', d.morada = '".$morada."', d.telefone = '".$telefone."', d.gepe = '".$gepe."', d.rede = '".$rede."', e.esc_id = '".$esc_id."', e.tipo = '".$tipo."', e.marca = '".$marca."', e.modelo = '".$modelo."', e.n_serie = '".$n_serie."', e.ano = '".$ano."', e.fabricante = '".$fabricante."', e.fatura = '".$fatura."' INNER JOIN detalhes on equipamento.esc_id=detalhes.esc_idWHERE e.esc_id=".$_GET['esc_id'] and d.equipamento.esc_equi=".$_GET['esc_equi']; Seria algo mais ou menos assim em teu exemplo. maiore sinformações confira em: http://dev.mysql.com/doc/refman/5.0/en/update.html Espero ter ajudado e se esse método der certo desconsidere o outro :D Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 24, 2014 Olá GCAS, antes de mais obrigado por tudo, mas não está funcionando, aliás a linha de código do update tem qualquer coisa a falhar porque na linha a seguir o $mysql_query($alt) fica a cinza ( estou a usar o notepad++) o que significa que não executa a query, já tentei algumas alterações mas não funciona, parece-me que o erro é a partir de and d.equipamento.esc_equi=".$_GET['esc_equi']; Se precisar de mais informações sobre os ficheiros diga por favor, agradeço imenso a sua ajuda, estou à dias nisto e não consigo resolver. Mais uma vez muito obrigado Abraço Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 24, 2014 Olá tozmor! tem como me enviar as estruturas de suas tabelas?! Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 27, 2014 pode-me enviar seu e-mail por favor??? por aqui não consigo enviar imagens Boas amigo GCAS aqui vai minha estrurura das tabelas Tabela Equipamento Campo Tipo Nulo Extra esc_equi int(11) Não AUTO_INCREMENT (chave primária) esc_id int(11) Não tipo varchar(255) Não marca varchar(255) Não modelo varchar(255) Não n_serie varchar(255) Não ano int(11) Não fabricante varchar(255) Não fatura varchar(255) Não Tabela Detalhes esc_id int(11) Não AUTO_INCREMENT (chave primária) nome_escola varchar(255) Não morada varchar(255) Não gepe int(11) Não telefone int(11) Não rede varchar(30) Não abraço Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 27, 2014 Olá meu amigo Tozmor, só mais uma pergunta: essas tabelas tem vínculo uma com a outra?! tipo... a tabela equipamento tem vínculo(é pai) da tabela detalhes(é filha), explico - um equipamento tem um ou vários detalhes. Se for o caso, pode fazer uma só tabela com essas colunas; ou equipamento tem vários detalhes Campo Tipo Nulo Extra esc_equi int(11) Não AUTO_INCREMENT (chave primária) -> 1 esc_id int(11) Não -> 1 tipo varchar(255) Não -> eletronico marca varchar(255) Não -> semp toshiba modelo varchar(255) Não -> SP001 n_serie varchar(255) Não -> 11111111 ano int(11) Não -> 2014 fabricante varchar(255) Não -> semp toshiba fatura varchar(255) Não -> 233b4 dados do equipamento esc_id int(11) Não AUTO_INCREMENT (chave primária) ->1 nome_escola varchar(255) Não -> escola criança feliz morada varchar(255) Não -> rua 03 bairro consolação gepe int(11) Não -> 222222 telefone int(11) Não -> 33332222 rede varchar(30) Não -> www.escola.com.br Pelo que eu entendendo pelo contexto e, também, pelo campo em negrito (esc_id), que há uma relação de dependência(pai e filho) de uma tabela com a outra. E isso?! Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 28, 2014 Boas amigo. Sim as tabelas tem relação, a tabela equipamento é filha da tabela detalhes, eu explico melhor. Estou a criar uma base de dados em que temos os dados de várias escolas (tabela detalhes) e em cada escola tem vários equipamentos, tabela equipamento, deu para perceber? mais uma vez obrigado Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 28, 2014 Olá tozmor assim fica fácil, é simples. Primeiro, nesse caso só se faz um update se tiver o código do equipamento, certo? ex: uma escola, escola criança feliz, que tenha um equipamento X, vou precisar apenas do código do código do equipamento, nesse exemplo o equipamento tem o código 1. $alteração = "update detalhes set tipo='tablet', marca='compaq', modelo='lv500', n_serie='000001', fabricante='compaq', ano='2005', fatura='3r4fda' where esc_equi='1'"; Já as demais informações da escola já consta em outra tabela. Então no form vc irá colocar um campo hidden( se for method POST) com a informação do item a ser alterado, ou um link (se for method GET). Vou dar um exemplo: pag escola.php Nome item: computador[LINK = com o código do produto] Nome item: tablet[LINK = com o código do produto] ao clickar no link irá para uma página, form de edição, com as especificações do produto e com o botão de confirmar e só fazer essa query(ou pelo menos aplicar a ideia, sim usei dados ficticios) e pronto. Acho que isso, qualquer coisa reporte espero ter ajudado :D Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 28, 2014 desculpa mas não percebi, sim o método do form é Post mas como faço para colocar o campo hidden??? Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 28, 2014 <form name="formulario" action="#" method="post"> <!--Veja abaixo a sintaxe--> <input type="hidden" name="cmpo_cod" value="<?php echo $var_cod;?>"> </form> como visto, so se muda o atributo hidden(escondido) e tem que ter um valor, nesse caso, o codigo da escola. como assim não percebeu? alguma dúvida?! :D pode falar :) Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Janeiro 28, 2014 nesse caso essa variavel $var_cod que colocou seria o meu esc_id??? é isso??? o action do meu form está a ir para este ficheiro ai: <?$hostname = "localhost";$login = "root";$password = "MTwebserver";$bd = "escolas";$conectar = mysql_connect($hostname, $login, $password);mysql_select_db ($bd, $conectar) or die ("Não foi possível realizar a ligação à Base de Dados! Tente Novamente!");$nome_escola = $_POST["escola_novo"];$morada = $_POST["morada_novo"];$telefone = $_POST["telefone_novo"];$gepe = $_POST["gepe_novo"];$rede = $_POST["rede_novo"];$esc_id = $_POST["esc_id"];$tipo = $_POST["tipo_novo"];$marca = $_POST["marca_novo"];$modelo = $_POST["modelo_novo"];$n_serie = $_POST["n_serie_novo"];$ano = $_POST["ano_novo"];$fabricante = $_POST["fabricante_novo"];$fatura = $_POST["fatura_novo"];AQUI TENHO QUE COLOCAR O UPDATEecho ('Informação alterada com sucesso');?> Se voce me puder dar seu e-mail eu envio todos os ficheiros para voce ter ideia do que a aplicação tem que fazer e mando tb a base de dados. Obrigado amigo Compartilhar este post Link para o post Compartilhar em outros sites
GCAS 11 Denunciar post Postado Janeiro 28, 2014 Olá tozmor sim, $var_cod é o seu esc_id, essa variavel é ficticia, pode colocar o nome que for mais conveniente, e é nela onde é guardado o código da escola. sim cara, é ai mesmo onde vc coloca a query de alteração. creio eu que vc apenas precise resgatar os dados do equipamento e não da escola. mas na query de uptade, faça a seguinte coisa: $update = "update ..."; // a mesma query que te passei $exec_upt = mysql_query($update); e após... if($exec_upt){ echo "equipamento alterado com sucesso"; }else{ echo "problemas ao alterar"; } este if serve para "tratar a operação efetuada". meu e-mail, anota aí: gibran.cas@gmail.com. qualquer coisa de um toque Compartilhar este post Link para o post Compartilhar em outros sites
tozmor 0 Denunciar post Postado Fevereiro 4, 2014 Boas amigo. Não sei se já viu mas enviei-lhe um e-mail com os meu ficheiros. O meu mail é toz.moreira@gmail.com e foi em nome de Tó-Zé Moreira. Se puder dar uma olhada nisso agradeço imenso. Um abraço Compartilhar este post Link para o post Compartilhar em outros sites