Ir para conteúdo

POWERED BY:

Arquivado

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

tozmor

2 forms, 2 tabelas

Recommended Posts

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

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

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

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

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

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

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

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

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

<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

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 UPDATE

echo ('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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.