Jump to content
Fábio.info7

Como gravar dados de um formulário em duas tabelas diferentes do Postgres com PHP?

Recommended Posts

Possuo um formulário com os seguintes dados, nome, idade, cpf, sexo, logradouro, bairro, cidade, eu possuo 1 banco com as seguintes tabelas, TABELA PESSOA E TABELA ENDERECO, ao enviar o formulário eu preciso gravar os dados pessoais na tabela pessoa e os dados de endereço na tabela endereco, o banco é postgres, como fazer isso? Poderiam me dar um exemplo?

Só uma observação: Estou usando PDO e com relação as tabelas, elas estão relacionadas entre si pela chave primária. 

 

Acredito que a solução seja simples, mas sou iniciante em php, preciso dessa força para continuar meus estudos.

 

nome, idade ,cpf, sexo

Sege as tabelas do meu banco postgres:

create table pessoa(
codigo serial not null,
nome varchar(30) not null,
idade int not null,
cpf varchar(11) not null,
sexo varchar(20) not null
);

CREATE TABLE public.enderecos
(
    codigo integer NOT NULL DEFAULT nextval('enderecos_codigo_seq'::regclass),
    logradouro character varying(80) COLLATE pg_catalog."default" NOT NULL,
    bairro character varying(80) COLLATE pg_catalog."default" NOT NULL,
    cidade character varying(80) COLLATE pg_catalog."default" NOT NULL,
    uf character varying(2) COLLATE pg_catalog."default",
    cep character varying(9) COLLATE pg_catalog."default",
    pessoa integer,
    CONSTRAINT codigo_end PRIMARY KEY (codigo),
    CONSTRAINT enderecos_pessoa_fkey FOREIGN KEY (pessoa)
        REFERENCES public.pessoa (codigo) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.enderecos
    OWNER to postgres;

AQUI MEU FORMULÁRIO:

   <form action="grava.php" method="post">
    Nome: <input type="text" name="nome"><br>
    CPF:<input type="text" name="cpf"><br>
    Sexo: <input type="text" name="sexo"><br>
    Idade: <input type="text" name="idade"><br>
     
    Logradouro: <input type="text" name="logradouro"><br>
    Bairro: <input type="text" name="bairro"><br>
    Cidade: <input type="text" name="cidade"><br>
    Cep: <input type="text" name="cep"><br>
    <input type="submit" value="Cadastrar"> 
    
</form>


ERQUIVO enviar.php:


<?php

try {

    require_once "conexao.php";
    $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);

    // Gravando dados pessoais
    $sql = "insert into pessoa (cpf, nome, sexo, nascimentodata, email ) values (:cpf, :nome, :sexo, :nascimentodata, :email )";
    $inserir = $conn->prepare($sql);
    $inserir->bindParam(":cpf", $dados["cpf"]);
    $inserir->bindParam(":nome", $dados["nome"]);
    $inserir->bindParam(":sexo", $dados["sexo"]);
    $inserir->bindParam(":nascimentodata", $dados["nascimentodata"]);
    $inserir->bindParam(":email", $dados["email"]);
    $inserir->execute();

    // Gravando dados de endereço
    $sql_end = "insert into enderecos (logradouro, bairro, cidade, uf, cep )values(:logradouro,:bairro,:cidade,:uf,:cep)";
    $end = $conn->prepare($sql_end);

    $end->bindParam(":logradouro", $dados["logradouro"]);
    $end->bindParam(":bairro", $dados["bairro"]);
    $end->bindParam(":cidade", $dados["cidade"]);
    $end->bindParam(":uf", $dados["uf"]);
    $end->bindParam(":cep", $dados["cep"]);

    $end->execute();
    echo "Dados gravados com sucesso!";

} catch (Exception $e) {

    echo "Mensagem: " . $e->getMessage() . "<br/>";
    echo "Linha do Erro: " . $e->getLine() . "<br/>";

}

 

Share this post


Link to post
Share on other sites

Segundo a sua estrutura, as tabelas não possuem relacionamento nenhum. Para ter relacionamento precisa-se de FK - Foreigns Keys(chaves estrangeiras). As chaves primárias são para identificar as tuplas(linhas).

 

No meu ver, a melhor prática é ter apenas uma tabela que grave todos os dados da pessoa, fica mais fácil pra processar os dados posteriormente.

 

No seu caso, para ter relacionamento, na tabela pessoa teria que ter um campo id_endereco como FK) e na tabela tabela um campo id_pessoa como FK. Pois com a estrutura que está, você pode inserir normalmente, mas depois não conseguirá consultar, pois não saberá de quem são os dados.

 

Dê uma pesquisada sobre chaves estrangeiras, ou utilize apenas uma tabela(eu indico).

 

 

Share this post


Link to post
Share on other sites
8 horas atrás, marcosmarcolin disse:

Segundo a sua estrutura, as tabelas não possuem relacionamento nenhum. Para ter relacionamento precisa-se de FK - Foreigns Keys(chaves estrangeiras). As chaves primárias são para identificar as tuplas(linhas).

 

No meu ver, a melhor prática é ter apenas uma tabela que grave todos os dados da pessoa, fica mais fácil pra processar os dados posteriormente.

 

No seu caso, para ter relacionamento, na tabela pessoa teria que ter um campo id_endereco como FK) e na tabela tabela um campo id_pessoa como FK. Pois com a estrutura que está, você pode inserir normalmente, mas depois não conseguirá consultar, pois não saberá de quem são os dados.

 

Dê uma pesquisada sobre chaves estrangeiras, ou utilize apenas uma tabela(eu indico).

 

 

Marcos, erro meu, as tabelas estão relacionadas, eu corrigi lá o código acima, eu preciso saber como fazer um insert no php para gravar nas duas tabelas, eu até fiz um insert mas só grava na tabela pessoa, a tabela enderecos não grava nada.

Share this post


Link to post
Share on other sites

Certo, olhando por cima, você precisa inserir a pessoa na tabela de endereço, pois é sua chave estrangeira, certo? Então precisa pegar o id da pessoa que está sendo inserida, e inserir na pessoa da tabela endereço? Como, utilize lastInsertId().

 

Como está utilizando PDO, o que você precisa também é iniciar e terminar as transações, utilizando beginTransaction() e commit(). Veja aqui como utilizar, ou aqui no manual.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By JeanTDZ
      Olá pessoal!
       
      Estou com uma tremenda dificuldade.
      Tenho um formulário na qual está funcionando e cadastrando, porém preciso que o meu botão adicionar autorizado funcione e mostre o que foi digitado para o e-mail. As informações na vdd é enviada para o e-mail e o que será enviado é oque será digitado.
       
      Simplificando ->
      Tenho um botão que adiciona 2 inputs (NOME E SALDO) e conforme for clicando nesse botão, vai adicionando mais campos.
      Dúvida: Como posso fazer com que grave o que foi digitado nesses campos?
       
      Segue o que eu tentei fazer até agora:

      HTML
      <!DOCTYPE html> <html>     <head>         <title>Chame Taxi PrePago</title>                 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>         <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />         <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>         <link rel="icon" type="image/x-icon" href="https://www.flaticon.com/premium-icon/icons/svg/1361/1361253.svg" />         <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.min.js"></script>     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>     </head>     <body>         <br />         <div class="container" style="width:100%; max-width:600px">             <h2 align="center">Pré-Pago</h2>             <br />             <div class="panel panel-default">                 <div class="panel-heading"><h4>Registrar</h4></div>                 <div class="panel-body">                     <form method="post" id="register_form">                         <?php echo $message; ?>                         <div class="form-group">                             <label>Nome Completo</label>                             <input type="text" name="user_name" style="text-transform:uppercase" class="form-control" pattern="[a-zA-Z ]+" required />                         </div>                         <div class="form-group">                             <label>E-mail</label>                             <input type="email" name="user_email"  style="text-transform:uppercase" class="form-control" required />                         </div>                         <div class="form-group">                             <label>CEP</label>                             <input type="text" name="campob" id="cep" value="" maxlength="9" onblur="pesquisacep(this.value);" class="form-control">                         </div>                         <div class="form-group"> <table id="myTable" class="table"> <a class="btn btn-primary" onclick="myFunction()" href="#" role="button">Adicionar Autorizado</a>             <thead>                 <tr>                     <th>NOME</th>                     <th>SALDO</th>                 </tr>             </thead>         </table>                         <div class="form-group">                             <input type="submit" name="register" id="register" value="Validar" class="btn btn-info" />                         </div>                     </form>                 </div>             </div>         </div>     </body> </html> JAVASCRIPT 
       
          <script>         var incremento = -1;         function myFunction() {             incremento++;             var table = document.getElementById("myTable");             var row = table.insertRow(0);             var cell1 = row.insertCell(0);             var cell2 = row.insertCell(1);             var cell3 = row.insertCell(2);             var cell4 = row.insertCell(3);             cell1.innerHTML = "NOME";             cell2.innerHTML = '<input type="text" name="name1[${incremento}]" >';             cell3.innerHTML = "SALDO";             cell4.innerHTML = '<input type="text" name="saldo[${incremento}]" size="15px" >';         }     </script>  
    • By gramosiri2
      Oi estou tentando passar um valor através de uma variável em uma query, porém não está mostrando o resultado que eu quero.
       
      Aqui eu pego o ultimo id do pedido
      <?php while($row = $consulta_pedido2->fetch_assoc()){ echo $row['id_pedido']; }?> E aqui eu faço a query e passo variável...
      $query ="SELECT itempedido.id_itempedido, itempedido.valor, ... FROM itempedido INNER JOIN produto ON ... WHERE itempedido.pedido_id = '$row'"; No caso onde está a variável $row, se eu colocar o numero do pedido manualmente, me retorno os itens daquele pedido, agora com a variável não está mostrando, alguma ideia?
    • By gustavodubarbosa
      Estou criando uma página que realize monitoramento de atividades.
      No meu código PHP defini uma variável que busca a data atual, depois passei o parâmetro de conexão com o banco de dados, depois criei um while para buscar as informações, dentro do while criei um if, a condição if é que se a variável data for igual a data cadastrada na atividade, exiba toda a atividade cadastrada. Mas o problema é que o if não está controlando essa condição, está passando direto e exibindo tudo.
      <?php $number = ('23'); $data = date("Y-m-d"); echo "$data"; /*Aqui realizo a conexão com o banco de dados, passo os dados para conectar, caso dê algum erro, o sistema me retorna uma mensagem de erro*/ $conect = mysqli_connect('localhost','root','','projeto_pessoal') or die ('Erro na conexão com o banco de dados'); /*Aqui passo o comando para realizar a busca no banco de dados, aplicando o filtro de pesquisa*/ $result_pesquisa = "SELECT * FROM cadastrar_atividade"; /*Neste momento, mando a execução, preciso passar como parametro a variável com a conexão e a variável com o comando, caso dê erro, será exibido uma mensagem*/ $resultado_pesquisa = mysqli_query($conect, $result_pesquisa); /*Aqui é aberto um laço de repetição para fazer uma varredura no banco de dados, em seguida realizo a exibição do que foi encontrado*/ ?> <h1>Resultado da Pesquisa</h1> <?php while($rows_pesquisa = mysqli_fetch_array($resultado_pesquisa)){ if($rows_pesquisa['prazo'] == $data) echo '<p class="title">'.'ID da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['id'].'<br>'.'</p>'; echo '<p class="title">'.'Nome da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['nome_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Descrição da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['desc_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Prioridade: '.'</p>'.'<p class="result">'.$rows_pesquisa['prioridade'].'<br>'.'</p>'; echo '<p class="title">'.'Prazo: '.'</p>'.'<p class="result">'.$rows_pesquisa['prazo'].'<br>'.'</p>'; echo 'carregado'; echo '<hr></hr>'; } ?>  
    • By violin101
      Caros amigos, saudações...
       
      Por favor me perdoa por recorrer ao auxílio dos amigos, mas estou com uma pequena dúvida.
       
      Preciso passar uma Variável [_caminho de Imagem_] para a Modal mas infelizmente não estou conseguindo.
       
      Consigo passar as variáveis do ID e DESCRIÇÃO, mas não consigo passar a variável da IMAGEM.
      <?php <a href="#modalImagem" role="button" data-toggle="modal" class="btn btn-warning" codg="'.$r->idcodigo.'" descr="'.$r->descprd.'" image="'.$r->imgprd.'" style="margin-right: 1%">Ver </a> ?>  
      Como consigo passar essa variável para poder visualizar ?
       
      Grato,
       
      Cesar
    • By Robson Barros da Rocha
      Bom dia.
       
      Criei uma função que permite escrever quando a mesma é chamada, contudo, ela retorna que deu falha ao abrir o arquivo, mas, o arquivo existe e na própria função existe o recurso para checar se ela existe.
      <?php function escrever($file,$content) { $ftp_server = "ftp.meusite.com"; $conn_id = ftp_connect($ftp_server); $login = ftp_login($conn_id, 'admin', '050406'); if(file_exists($file)) { $arquivo = fopen($file,'r+'); if ($content) { if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.'); echo 'Arquivo atualizado com sucesso'; fclose($arquivo); } } } ?> Pela documentação do PHP eu entendo que não cometi erros. Será que alguém pode me dar um caminho neste sentido? O retorno é:
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.