Jump to content
Fábio.info7

Como Recuperar id do banco usando nextval() na aplicação php e depois fazer um insert em duas tabelas relacionadas do Postgres?

Recommended Posts

Olá pessoal, estou precisando de uma grande ajuda, tenho duas tabelas no postgres, são elas: PESSOA e a outra é  ENDERECOS, elas estão relacionadas, oq acontece é que no php eu preciso recuperar o valor do id através da função nextval('nome_da_sequnce'), e não estou sabendo fazer, preciso recuperar o ultimo id e depois realizar o insert nas tabelas relacionadas, poderiam me dar um exemplo de como implementar isso? abaixo deixo o meu codigo php, acredito que esteja errado pois não esta gravando no banco.

 

Minhas tabelas do banco:

CREATE TABLE public.pessoa
(
    codigo_aluno integer NOT NULL DEFAULT nextval('pessoa_codigo_aluno_seq'::regclass),
    cpf character varying(11) COLLATE pg_catalog."default" NOT NULL,
    nome character varying(30) COLLATE pg_catalog."default" NOT NULL,
    sexo character varying(30) COLLATE pg_catalog."default" NOT NULL,
    nascimentodata date NOT NULL,
    email character varying(50) COLLATE pg_catalog."default" NOT NULL,
    endereco integer,
    CONSTRAINT pessoa_pkey PRIMARY KEY (codigo_aluno),
    CONSTRAINT pessoa_endereco_fkey FOREIGN KEY (endereco)
        REFERENCES public.enderecos (codigo_endereco) 
)

CREATE TABLE public.enderecos
(
    codigo_endereco integer NOT NULL DEFAULT nextval('enderecos_codigo_endereco_seq'::regclass),
    logradouro character varying(200) COLLATE pg_catalog."default" NOT NULL,
    bairro character varying(80) COLLATE pg_catalog."default" NOT NULL,
    cidade character varying(100) COLLATE pg_catalog."default" NOT NULL,
    uf character varying(2) COLLATE pg_catalog."default" NOT NULL,
    cep character varying(20) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT enderecos_pkey PRIMARY KEY (codigo_endereco)
)


****** ABAIXO O PHP ***************************************


<?php

try {

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

    $sql = "select nextval('pessoa_codigo_aluno_seq')";
    $seq = $conn->prepare($sql);
    $id = $seq->execute();
    $id = $seq->fetchAll(PDO::FETCH_ASSOC);


    $sql = "insert into pessoa (cpf, nome, sexo, nascimentodata, email, endereco ) values (:cpf, :nome, :sexo, :nascimentodata, :email, :fk_endereco )";
    $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->bindParam(":fk_endereco", $id['codigo_endereco']);
    $inserir->execute();

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

    $end->bindParam(":codigo_endereco", $id['codigo_endereco']);
    $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/>";

}

PRECISO CONSEGUIR INSERIR OS DADOS NAS DUAS TABELAS INSERINDO OS IDS RECUPERADOS PELO NEXTVAL()

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 LisRaf
      Olá Pessoal!
       
      Estou tendo um problema com um link no site do meu cliente...esse link envia o usuário para pagina de acesso a um ambiente online do aluno... entretanto, o endereço para essa pagina só pode ser acessado quando os estudante estão fora do wifi da escola, do contrario eles não conseguem acessar pelo link que eu implementei na imagem que esta no site. Existe outro endereço para quem está conectado no wifi da escola, como sou iniciante, só sei que tenho que ter um código que quando o usuário clicar no link vai verificar se está conectado no servidor interno, se não, ele joga para o servidor externo, porem... Não faço a minima ideia de como estruturar esse código e linkar ele junto a imagem do site... se alguém puder me ajudar please!!! já pesquisei tudo e não consigo sozinha!
    • By ppanetony
      Olá!
       
      Estou com um sistema em php onde alguns código estão duplicados.
      São códigos pequenos, simples, de no máximo umas 3 linhas.
      Esses código se repetem por vários arquivos.
      Qual a melhor maneira de eu extrair esses códigos para deixa-los como funções?!
      Um arquivo com várias funções, uma classe deixando essas funções como static, ..., ... ?!
       
       
      Valeu!
       
    • By drx
      Bom dia pessoal!
      Primeiramente, me perdoem a ignorância se minha pergunta for cabeluda, beleza pessoal?
      Me tirem uma dúvida aqui se possível.
      Eu envio a divulgação de um produto via e-mail a um cliente e ele recebe  uma pagina em php certo? É óbvio que ele receberá em html e suas tags.
      Quando o cliente clicar na imagem, então ele é redirecionado para uma loja virtual, correto?
      Esta página, pode interagir com um código php embutido nesta página tal como, identificar origem, link de quem enviou ?
       
      Aguardo.
    • By marcosberaldo
      Boa noite.
       
      Estou criando um ranking de pontuação e preciso colocar uma paginação nesse ranking mas não posso fazer a paginação pelo select, pois a select tem que somar os pontos de cada jogador informados em cada registro no banco, se eu limito a select ele só vai somar os pontos dos registros da página e não todos os pontos do jogador.
       
      Dessa forma optei por fazer a select normalmente e criar um array onde eu pretendo exibir somente parte dos dados.
       
      Em resumo, consegui fazer da seguinte forma:
      $dados = mysqli_query($conn, "SELECT *, sum(Pontos) as TotalPontos, sum(Acerto_Exato) as Acertos FROM placares INNER JOIN jogadores ON placares.JogadorID = jogadores.id WHERE campeonato='$campeonato' GROUP BY JogadorID ORDER BY TotalPontos DESC, Acertos DESC "); for($a = 0; $a < 9; $a++ ) { $row = mysqli_fetch_array($dados); echo $row['JogadorID']. " - " .$row['nome']; } Esse código me retorna 10 registros do array, até ai tudo bem, mas eu gostaria de exibir apenas um intervalo, por exemplo do registro 5 ao 9. 
      Tentei da seguinte forma:
      $dados = mysqli_query($conn, "SELECT *, sum(Pontos) as TotalPontos, sum(Acerto_Exato) as Acertos FROM placares INNER JOIN jogadores ON placares.JogadorID = jogadores.id WHERE campeonato='$campeonato' GROUP BY JogadorID ORDER BY TotalPontos DESC, Acertos DESC "); for($a = 5; $a < 9; $a++ ) { $row = mysqli_fetch_array($dados); echo $row['JogadorID']. " - " .$row['nome']; } Dessa forma ele me mostra apenas 5 registros, mas ele sempre me mostra os 5 primeiros e eu preciso carregar os últimos 5.
       
      Como faço???
    • By Matheus Jollyl da Silva
      Estou fazendo um cadastro simples usando CRUD, comecei a programar a pouco tempo e está sendo minha primeira experiencia com CRUD.
      fiz um pequeno cadastro e estou alterando para implementar aos poucos. Com uma dessas alterações os botões que eu adicionei perderam suas funcionalidades.
       
      Segue o código: 
       
       
      <?php
      // Verificar se foi enviando dados via POST
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
          $id = (isset($_POST["id"]) && $_POST["id"] != null) ? $_POST["id"] : "";
          $nome = (isset($_POST["nome"]) && $_POST["nome"] != null) ? $_POST["nome"] : "";
          $email = (isset($_POST["email"]) && $_POST["email"] != null) ? $_POST["email"] : "";
          $celular = (isset($_POST["celular"]) && $_POST["celular"] != null) ? $_POST["celular"] : NULL;
          $cidade = (isset($_POST["cidade"]) && $_POST["cidade"] != null) ? $_POST["cidade"] : NULL;
          $estado = (isset($_POST["estado"]) && $_POST["estado"] != null) ? $_POST["estado"] : NULL;
      } else if (!isset($id)) {
          // Se não se não foi setado nenhum valor para variável $id
          $id = (isset($_GET["id"]) && $_GET["id"] != null) ? $_GET["id"] : "";
          $nome = NULL;
          $email = NULL;
          $celular = NULL;
          $cidade = NULL;
          $estado = NULL;
      }
      try {
          $conexao = new PDO("mysql:host=localhost;port=3307;dbname=crudsimples", "root", "usbw");
          $conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $conexao->exec("set names utf8");
      } catch (PDOException $erro) {
          echo "Erro na conexão:" . $erro->getMessage();
      }
      if (isset($_REQUEST["act"]) && $_REQUEST["act"] == "save" && $nome != "") {
          try {
              $stmt = $conexao->prepare("INSERT INTO contatos (nome, email, celular, cidade, estado) VALUES (?, ?, ?, ?, ?)");
              $stmt->bindParam(1, $nome);
              $stmt->bindParam(2, $email);
              $stmt->bindParam(3, $celular);
              $stmt->bindParam(4, $cidade);
              $stmt->bindParam(5, $estado);
               
              if ($stmt->execute()) {
                  if ($stmt->rowCount() > 0) {
                      echo "Dados cadastrados com sucesso!";
                      $id = null;
                      $nome = null;
                      $email = null;
                      $celular = null;
                      $cidade = null;
                      $estado = null;
                  } else {
                      echo "Erro ao tentar efetivar cadastro";
                  }
              } else {
                     throw new PDOException("Erro: Não foi possível executar a declaração sql");
              }
          } catch (PDOException $erro) {
              echo "Erro: " . $erro->getMessage();
          }
      }
      if (isset($_REQUEST["act"]) && $_REQUEST["act"] == "upd" && $id != "") {
          try {
              $stmt = $conexao->prepare("SELECT * FROM contatos WHERE id = ?");
              $stmt->bindParam(1, $id, PDO::PARAM_INT);
              if ($stmt->execute()) {
                  $rs = $stmt->fetch(PDO::FETCH_OBJ);
                  $id = $rs->id;
                  $nome = $rs->nome;
                  $email = $rs->email;
                  $celular = $rs->celular;
                  $cidade = $rs->cidade;
                  $estado = $rs->estado;
              } else {
                  throw new PDOException("Erro: Não foi possível executar a declaração sql");
              }
          } catch (PDOException $erro) {
              echo "Erro: ".$erro->getMessage();
          }
      }
      if ($id != "") {
          $stmt = $conexao->prepare("UPDATE contatos SET nome=?, email=?, celular=? cidade=?, estado=? WHERE id = ?");
          $stmt->bindParam(5, $id);
      } else {
          $stmt = $conexao->prepare("INSERT INTO contatos (nome, email, celular, cidade, estado) VALUES (?, ?, ?, ?, ?)");
      }
      ?>
      <!DOCTYPE html>
      <html>
          <head>
              <meta charset="UTF-8" />
              <link rel="stylesheet" type="text/css" href="cadastro.css" />
              <title>Cadastro em reforma.</title>
          </head>
          <body>
          <h1>Cadastro Simples.</h1>
                  
              <form action="?act=save" method="POST" name="form1" >
                  <hr>
                  <input type="hidden" name="id" <?php
                  // Preenche o id no campo id com um valor "value"
                  if (isset($id) && $id != null || $id != "") {
                      echo "value=\"{$id}\"";
                  }
                  ?> />
                  <table>
                      <tr>
                          Nome:
                          <input type="text" name="nome" <?php
                          // Preenche o nome no campo nome com um valor "value"
                          if (isset($nome) && $nome != null || $nome != ""){
                              echo "value=\"{$nome}\"";
                          }
                          ?> />
                      </tr>
                  </table>
                          
                  <table>
                      <tr>
                          E-mail:
                          <input type="text" name="email" <?php
                          // Preenche o email no campo email com um valor "value"
                          if (isset($email) && $email != null || $email != ""){
                              echo "value=\"{$email}\"";
                          }
                          ?> />
                      </tr>
                  </table>
                  
                  <table>
                      <tr>
                          Celular:
                          <input type="text" name="celular" <?php
                          // Preenche o celular no campo celular com um valor "value"
                          if (isset($celular) && $celular != null || $celular != ""){
                              echo "value=\"{$celular}\"";
                          } 
                          ?> />
                      <table>
                          <tr>
                              Cidade:
                              <input type="text" name="cidade" <?php
                              // Preenche a cidade no campo nome com um valor "value"
                              if (isset($cidade) && $cidade != null || $cidade != ""){
                                  echo "value=\"{$cidade}\"";
                              }
                          ?> />
                      
                          Estado:
                          <input type="text" name="estado" <?php
                          // Preenche o estado no campo nome com um valor "value"
                          if (isset($estado) && $estado != null || $estado != ""){
                              echo "value=\"{$estado}\"";
                          }
                          
                  
                  
                  if (isset($_REQUEST["act"]) && $_REQUEST["act"] == "del" && $id != "") {
          try {
              $stmt = $conexao->prepare("DELETE FROM contatos WHERE id = ?");
              $stmt->bindParam(1, $id, PDO::PARAM_INT);
              if ($stmt->execute()) {
                  echo "Registo foi excluído com êxito";
                  $id = null;
              } else {
                  throw new PDOException("Erro: Não foi possível executar a declaração sql");
              }
          } catch (PDOException $erro) {
              echo "Erro: ".$erro->getMessage();
          }
      }
                  ?> />
                <br> <input type="submit" value="Salvar" />
                 <input type="reset" value="Novo" />
                </br>
                 <hr>
              </form>
              <table border="1" width="100%">
                              <tr>
                                  <th>Nome</th>
                                  <th>E-mail</th>
                                  <th>Celular</th>
                                  <th>Cidade</th>
                                  <th>Estado</th>
                                  <th>Ações</th>
                              </tr>
                              <?php
                      try {
                   
                      $stmt = $conexao->prepare("SELECT * FROM contatos");
                   
                          if ($stmt->execute()) {
                              while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) {
                                  echo "<tr>";
                                  echo "<td>".$rs->nome."</td>
                                        <td>".$rs->email."</td>
                                        <td>".$rs->celular."</td>
                                        <td>".$rs->cidade."</td>    
                                        <td>".$rs->estado."</td>
                                        <td>
                                          <center>
                                              <a href=\"?act=upd&id=" . $rs->id . "\">[Alterar]</a>"
                                              ."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                                              ."<a href=\"?act=del&id=" . $rs->id . "\">[Excluir]</a>
                                          </center>
                                        </td>";
                              echo "</tr>";
                              }
                          } else {
                              echo "Erro: Não foi possível recuperar os dados do banco de dados";
                          }
                  } catch (PDOException $erro) {
                      echo "Erro: ".$erro->getMessage();
                  }
                  ?>
              </table>
              
          </body>
      </html>
       
      Por algum motivo minha tabela no Phpmyadmin também mudou e não consigo mais editar. Exclui a "id" e depois adicionei novamente e começou os problemas. Agradeço a ajuda desde já.
×

Important Information

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