Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

andrelimaverde

Salvar formulário PHP PDO Banco de Dados

Recommended Posts

Pessoal desde já agradeço a todos, e vamos lá.

Primeiro esclareço que meu conhecimento em PHP é básico e em MYSQL praticamente nulo...

Meu objetivo é: Salvar dados do formulário (3 páginas) no mesmo ID (mesma linha) do banco de dados.

Tenho:

<!-- PÁGINA INDEX.PHP -->
<?php
    session_start();
?>
<html>
  <form method="POST" action="1.php">
    <input type="text" name="namenome" placeholder="Nome">
    <input type="text" name="namesobrenome" placeholder="Sobrenome">
    <input type="radio" name="radio" value="Masculino">
    <input type="radio" name="radio" value="Feminino">
    <input type="submit" name="namebtn" value="Próximo Passo">
  </form>
</html>

E assim são as outras duas páginas, exemplificando, muito simples...

No Index o FORM tem action="1.php

Na Pagina2 o FORM tem action="2.php" e assim sucessivamente.

 

1.php funcionando perfeitamente:

<?php
session_start();
include_once 'conexao.php'; 
//conexao.php somente faz a conexão com banco de dados, define as credenciais e atrubi a variável $conn
//$conn = new PDO('mysql:host=' . HOST . ';dbname=' . DBNAME . ';', USER, PASS);

$btn = filter_input(INPUT_POST, 'namebtn', FILTER_SANITIZE_STRING);

if($btn){
    //Recebe os dados do form
    $nom = filter_input(INPUT_POST, 'namenome', FILTER_SANITIZE_STRING);
    $sob = filter_input(INPUT_POST, 'namesobrenome', FILTER_SANITIZE_STRING);
    $rad = filter_input(INPUT_POST, 'radio', FILTER_SANITIZE_STRING);

    //Insere os dados no banco
    $get_data = "INSERT INTO info_tabela (nome, sobrenome, sexo) VALUES (:namenome, :namesobrenome, :radio)";

    $insert_data = $conn->prepare($get_data);
    $insert_data->bindParam(':namenome', $nom);
    $insert_data->bindParam(':namesobrenome', $sob);
    $insert_data->bindParam(':radio', $rad);

    if($insert_data->execute()){
        header("Location:pagina2.php"); //Se enviar corretamente redireciona para segunda página
    }else{
        $_SESSION['msg'] = "<p style='color:tomato;background:#fff;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>";
        header("Location:index.php"); //Se não apresenta o erro
    }
}else{
    $_SESSION['msg'] = "<p style='color:tomato;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>";
    header("Location:index.php"); 
}

Até ai tudo bem, insere corretamente os dados nas respectivas colunas da tabela ID=1, NOME= 'nome', SOBRENOME= 'sobrenome', SEXO= 'sexo'.

No Banco de Dados ainda temos as colunas a serem preenchidas no mesmo ID(mesma linha) --> CIDADE= ' ', ENDEREÇO= ' ', CEP= ' ', 

Que referem-se à pagina2.php:

<!-- PÁGINA PAGINA2.PHP -->
<?php
    session_start();
?>
<html>
  <form method="POST" action="2.php"> <!-- ACTION 2.PHP RESPECTIVAMENTE -->
    <input type="text" name="namecidade" placeholder="Cidade">
    <input type="text" name="nameendereco" placeholder="Endereço">
    <input type="tex" name="namecep" placeholder="Cep">
    <input type="submit" name="namebtn" value="Próximo Passo">
  </form>
</html>

O problema, é que ao enviar o formulário com action="2.php" cujo arquivo possui o mesmo código que o "1.php" mudando somente os dados recebidos,

No Banco de Dados é criado um novo ID(2) ou seja, uma nova linha, com os dados atuais nas colunas (cidade, endereço, cep) preenchidos, e as colunas anteriores (nome, sobrenome, sexo) vazias...

 

Pessoal esta é a minha dúvida, como resolver, salvar todos os dados num mesmo id, mesma linha. O código do arquivo 2.php é o mesmo pois não faço ideia de como implementar isso, como em soluções anteriores tais dados costumava enviar com PhpMailer para e-mail então não entendo de MYSQL.

 

Código simplificado e resumido ao máximo...

Obrigado.

Share this post


Link to post
Share on other sites

No primeiro arquivo normalmente você vai fazer o INSERT, salvando os dados e tal.

 

Já na página 2 você terá que resgatar qual foi o último registro salvo pode usar no caso $insert_data->lastInsertId.

Onde você terá o último ID registrado.

Então nesse segundo arquivo você pode tanto criar um input hidden com essa informação ou armazenar esse valor em cessão.

Para que quando submeter novamente possa usar o valor do input ou da cessão para fazer UPDATE.

 

No caso de um terceiro segue o mesmo conceito, bastando continuar usando a informação do último ID que foi dada no INSERT.

 

 

No entanto acho melhor que apenas registre o usuário, e coloque uma opção já com o usuário logado para alterar as demais coisas que forem necessárias.

 

Além de usar o ID do usuário você pode criar um hash para cada usuário salvando esse valor em uma coluna. E usar a info do hash ao invés do ID (Eu sempre adoto esse recurso, para evitar conflitos no SQL)

Share this post


Link to post
Share on other sites
12 minutos atrás, Omar~ disse:

No primeiro arquivo normalmente você vai fazer o INSERT, salvando os dados e tal.

 

Já na página 2 você terá que resgatar qual foi o último registro salvo pode usar no caso $insert_data->lastInsertId.

Onde você terá o último ID registrado.

Então nesse segundo arquivo você pode tanto criar um input hidden com essa informação ou armazenar esse valor em cessão.

Para que quando submeter novamente possa usar o valor do input ou da cessão para fazer UPDATE.

 

No caso de um terceiro segue o mesmo conceito, bastando continuar usando a informação do último ID que foi dada no INSERT.

 

 

No entanto acho melhor que apenas registre o usuário, e coloque uma opção já com o usuário logado para alterar as demais coisas que forem necessárias.

 

Além de usar o ID do usuário você pode criar um hash para cada usuário salvando esse valor em uma coluna. E usar a info do hash ao invés do ID (Eu sempre adoto esse recurso, para evitar conflitos no SQL)

Certo Omar, vou testar essa função, estava tendo problemas pois estava usando o UPDATE com WHERE id=LAST_INSERT_ID(); não fazia idéia de como implementar, agora vou ver como armazeno esse valor e retorno com resultado.

Share this post


Link to post
Share on other sites
2 horas atrás, Omar~ disse:

No primeiro arquivo normalmente você vai fazer o INSERT, salvando os dados e tal.

 

Já na página 2 você terá que resgatar qual foi o último registro salvo pode usar no caso $insert_data->lastInsertId.

Onde você terá o último ID registrado.

Então nesse segundo arquivo você pode tanto criar um input hidden com essa informação ou armazenar esse valor em cessão.

Para que quando submeter novamente possa usar o valor do input ou da cessão para fazer UPDATE.

 

No caso de um terceiro segue o mesmo conceito, bastando continuar usando a informação do último ID que foi dada no INSERT.

 

 

No entanto acho melhor que apenas registre o usuário, e coloque uma opção já com o usuário logado para alterar as demais coisas que forem necessárias.

 

Além de usar o ID do usuário você pode criar um hash para cada usuário salvando esse valor em uma coluna. E usar a info do hash ao invés do ID (Eu sempre adoto esse recurso, para evitar conflitos no SQL)

Omar, teria uma dica de como implementar esse código de uma melhor maneira. Por exemplo, já estou usando o UPDATE perfeitamente, mas estou com dificuldades no WHERE id= . Não consegui usar a função lastInsertId, como na primeira página fazemos o INSERT teria uma maneira de fazer o UPDATE no último ID inserido no caso pela sessão atual? Pode exemplificar?

Share this post


Link to post
Share on other sites

  • Similar Content

    • By violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • By violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • By violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • By violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • By violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
×

Important Information

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