Inserindo registros pelo PHP

Comandos INSERT no PHP
O comando INSERT INTO é usado para inserir novos registros em uma tabela.

Syntaxe

É possível escrever o comando INSERT INTO em duas formas.

A primeira forma não especifica os nomes de colunas onde os dados serão inseridos. Somente os valores.

INSERT INTO nome_tabela VALUES (valor1, valor2, valor3, valor4,..., valorN)

O segundo formato especifica tanto os nomes de colunas e os valores a serem inseridos:

INSERT INTO nome_tabela (coluna1, coluna2, coluna2, ...) VALUES (valor1, valor2, valor3)

Para aprender mais sobre SQL visite o tutorial de SQL
Para que o PHP execute o comando acima nós usamos a função mysql_query().
Esta função é usada para enviar uma pesquisa ou comando para uma conexão do MySQL.

Exemplo

No post anterior nós criamos uma tabela chamada "pessoas" com três colunas: nome, nome_completo e idade. Nós vamos usar a mesma tabela neste exemplo. O próximo exemplo adiciona dois novos registros à tabela pessoas:

   1:<?php
2:$con = mysql_connect("localhost", "banco", "abc123") or
3: die('Não foi possível conectar');
4:
5:mysql_select_db("my_db", $con);
6:mysql_query("INSERT INTO pessoas (nome, nome_completo, idade) VALUES ('Pedro', 'Pedro Griffin', '35')");
7:mysql_query("INSERT INTO pessoas (nome, nome_completo, idade) VALUES ('Eduardo', 'Eduardo Quagmire', '33')");
8:mysql_close($con);
9:?>
Inserindo dados de um formulário em um banco de dados

Agora nos vamos criar um formulário HTML que pode ser usado para inserir novos registros na tabela "pessoas".

Aqui esta o formulário HTML
   1:<html>
2:<body>
3:<form action="pessoas.php" method="post">
4:Nome: <input type="text" name="nome" /><br />
5:Nome completo: <input type="text" name="nome_completo" /><br />
6:Idade: <input type="text" name="idade" /><br />
7:<input type="submit" />
8:</form>
9:</body>
10:</html>
Quando o usuário clica no botão "Enviar" no formulário HTML no exemplo acima, os dados do formulário são enviados para o script php "pessoa.php".

O script "pessoa.php" conecta com o banco de dados, e obtém os valores a serem inseridos a partir das variáveis $_POST.

Então a função mysql_query() executa o comando INSERT INTO e um novo registro é inserido na tabela "pessoas"

Abaixo temos a pagina "pessoa.php"
   1:<?php
2:$con = mysql_connect("localhost", "banco", "abc123") or
3: die('Não foi possível conectar');
4:
5:$nome = $_POST['nome'];
6:$nome_completo = $_POST['nome_completo'];
7:$idade = $_POST['idade'];
8:
9:mysql_select_db("my_db", $con);
10:mysql_query("INSERT INTO pessoas (nome, nome_completo, idade) VALUES ('$nome', '$nome_completo', '$idade')");
11:mysql_close($con);
12:?>

22 comentários:

  1. Respostas
    1. Luke muito bom o tutorial até aí eu consegui só gostaria de saber se vc pode me ajudar que no mesmo tempo que eu envio as informações ao bd eu gostaria que saisse em html os dados enviados ao bd exemplo quando clico enviar eu preciso da action para o banco de dados e esses mesmo dados eu preciso ver na hora em html pra preencher uma ficha de cadastro on line por exemplo ?

      Excluir
  2. Bom dia estou com um problema em meu código, eu tenho um formulario onde o usuario pode usar pra fazer anuncios em meu site, ele pode fazer 1 anuncio ou 10 anuncios sendo que acime de 1 o site apenas pega o formulario e repete em quantas vezes o usuario quiser de 1 até 10. então o que preciso é
    que o site exiba pra o usuario os links dos dados que foram salvos no banco de dados
    exemplo digamos que o usuario postou 1 anuncio e selecionou pra gerar 10... então serão salvos 10 registros no banco nesse caso eu preciso que seja consutado os ultimos 10 registros do banco essa consulta eu tou tentando fazer pelo ID que n0o meu caso estou usando como link exemplo... www.siteteste.com.br/ver_anuncio/link=200

    a consulta que estou usando é
    $sql="SELECT * FROM anuncio ORDER BY link desc limit 10";

    mas n esta me retornando os links diferentes e sim os mesmos lnks, a consuta feira direto no banco fica normal mas feita pelo PHP n da certo.
    poderiam me ajudar?

    ResponderExcluir
  3. tenho pouca noção de programação e banco de dados, mas vi que seus codigos parecem mesmo ser simples, como configuro o banco de dados?
    nessa linha:
    2:$con = mysql_connect("localhost", "banco", "abc123")
    o que significa cada valor? Obrigado

    ResponderExcluir
    Respostas
    1. Bem e o seguinte.
      A variavel $con, será atribuida a conexao do banco de dados, que é "mysql_connect". Dentro dos (), tem o nome do servidor "localhost", apos tem o nome do usuario "root", apos deve ter a senha do usuário "****", e por fim o nome do banco de dados "MyDb". Ficando assim
      $con = MySql_connect("localhost", "root", "****", "MyDb");
      Espero que entenda.

      Excluir
  4. Muito bom, me ajudou a solucionar um problema no meu código... Gosteeei muito! Parabéns!

    ResponderExcluir
  5. obrigado meu jovem ! salvou meu código.

    ResponderExcluir
  6. Não posso passar neste blog sem deixar de agradecer!
    Muito obrigado mesmo!

    ResponderExcluir
  7. Boa noite.
    Preciso da ajuda de voces.


    estou tentando criar uma pagina php de teste que receba valores quando eu colocar o link que tenh ja os valores fixos no mesmo, por exemplo:

    http:\\inserir.php?id=201<=(variavel)&lg=(variavel)&s=(variavel)
    por si só essa linha digitada em qualquer navegador já iria inserir os dados em um possivel banco de dados.

    o que gostaria e de criar a pagina e o banco que recebendo este link iria ja receber as informações contidas nele.

    desde ja agradeco pela atencao
    att
    douglas

    ResponderExcluir
    Respostas
    1. Douglas, dá uma olhada no post sobre a variavel $_GET. Quando os parâmetros são passados para uma pagina da forma como você descreveu, eles ficam guardados dentro desta variável.
      Depois disso, basta usar o que está neste post para inserir os dados no banco de dados.

      Excluir
  8. Boas,
    Estou com dificuldade em colocar num formulario enviar os dados para duas tabelas diferentes.

    if(($query=mysql_query($sqlinsert)) and ($query2=mysql_query($sqlinsert2))){

    }
    tenho este codigo mas ele nao enviar para a BD das respectivas tabelas

    ResponderExcluir
  9. Nossa vc salvou a minha vida hj com o comando select valeu!!!!

    ResponderExcluir
  10. cara, muito bom e bem didádico, só uma pergunta, como faço para enviar uma cópia deste registro que foi inserido no bd por e-mail como um formulário simples em php? muito obrigado.

    ResponderExcluir
  11. Muito bem explicado.
    Pena que não funciona mais assim.
    Seria bacana se atualizasse esse post.

    ResponderExcluir
  12. Muito bem explicado.
    Pena que não funciona mais assim.
    Seria bacana se atualizasse esse post.

    ResponderExcluir
  13. otimas dicas preciso que me diga como faço para inserir dados em duas tabelas no mysql pelo php

    ResponderExcluir
    Respostas
    1. Danilo, para inserir dados em mais de uma tabela, basta repetir o comando INSERT, (mysql_query("INSERT INTO p...") na proxima linha, passando os valores a serem inseridos.

      Excluir
    2. tiago temtei a tua dica mas não de veja ai
      include "conexao.inc";
      $nome=$_POST["nome"];
      $usuario=$_POST["usuario"];
      $senha=$_POST["senha"];
      $end=$_POST["end"];
      $tel=$_POST["tel"];
      $email=$_POST["email"];
      $ala=$_POST["ala"];
      $identificacao=$_POST["identificacao"];
      $sql="INSERT INTO info VALUES(null, '$nome', '$usuario', '$senha', '$end', '$tel', '$email')";
      "INSERT INTO ala VALUES(null, '$ala')";
      "INSERT INTO identificacao VALUES(null, '$identificacao')";
      $res=mysqli_query($con,$sql);
      $num=mysqli_affected_rows($con);
      echo"$num feito";
      mysqli_close ($con);
      onde estou errando?

      Excluir
    3. no sql e no php não da erro mas não insere

      Excluir
  14. quero saber a sintaxe correta em PHP para inserir dados em mais de uma tabela mysql

    ResponderExcluir
  15. Eu preciso da ajuda de vocês! Preciso fazer um algoritmo em PHP que seja executado de 60 em 60 segundos e que grave a data e hora completo, (hora, minutos e segundos), dentro de uma tabela no banco de dados! Alguém pode me ajudar?

    ResponderExcluir
    Respostas
    1. Olá Pedro. Normalmente este tipo de tarefa é feito por algum tipo de serviço de agendamento, tipicamente o cron em ambiente linux (que é o tipo de ambiente que roda na maioria dos servidores).
      De uma olhada neste artigo https://www.vivaolinux.com.br/artigo/Usando-cron-e-crontab-para-agendar-tarefas que explica um pouco sobre como usar o cron.

      Excluir