Aprenda a receber dados de Formulário com PHP

Existem três arrays associativos que podemos usar para receber dados de Formulários HTML em PHP. São eles: $_GET, $_POST e $_REQUEST. Os dois primeiros são usados de acordo com o método de envio de informações definido para o formulário. Já o array $_REQUEST recupera dados tanto de formulários que utilizam GET quanto POST.


Para exemplificar, crie uma pasta chamada forms na raiz do seu Ambiente de Desenvolvimento. No meu caso, como estou usando o Wamp, meu diretório raiz é C:\wamp\www.

Agora, abra um Editor de Textos simples (Bloco de Notas por exemplo) e digite o código abaixo:
<html>
<head>
<title>Recebendo dados do Formulário</title>
</head>
<body>
<form method="post" action="receber-form.php">
Digite seu nome:<br />
<input type="text" name="nome" />
<input type="submit" value="Enviar" />
</form>
</body>
</html>
Salve o arquivo com o nome form-teste.html dentro da pasta forms.

Repare que criamos um formulário que utiliza o método POST e que enviará dados para o arquivo receber-form.php que criaremos no mesmo diretório. O formulário possui apenas uma Caixa de Texto e um Botão de Envio. Observe também que o valor do parâmetro name da Caixa de Texto é nome.

Pra finalizar, abra um novo documento no Editor de Textos e digite o código abaixo:
<?php
$nome = $_POST['nome'];
echo "Olá " . $nome;
?>
Salve o arquivo com o nome receber-form.php na pasta forms.

Entenda que, na linha 2, criamos uma variável com o nome $nome (poderia ser outro nome) que recebe o texto digitado na Caixa de Textos do formulário. Isso porque utilizamos $_POST['nome'] onde a chave nome corresponde ao parâmetro name da Caixa de Texto do formulário.

É bom lembrar que se substituirmos a segunda linha do Arquivo PHP por:
$nome = $_REQUEST['nome'];
Teríamos o mesmo resultado.

Por fim, abra o navegador acesse o endereço: http://localhost/forms/form-teste.html

Observe o resultado:
Receber Dados do Formulário

Após preencher o nome e clicar em Enviar:
Receber Dados do Formulário

Obviamente que esse é um exemplo simples, apenas para mostrar como o PHP recebe dados de um Formulário. Em breve, explicarei como gravar esses dados em um Arquivo de Textos, em Bancos de Dados e até como enviar por E-mail.

Nota: Existe uma variável no Arquivo de Configuração do PHP (php.ini) chamada register_globals, essa variável pode receber dois valores: On e Off (Off é o padrão por segurança). Quando o valor está definido como On, nós não precisamos utilizar os arrays associativos $_POST, $_GET ou $_REQUEST para receber dados de formulários. Isso quer dizer que, caso o valor dessa variável esteja definido como On, o Código PHP do exemplo acima também funcionaria se tirasse-mos a segunda linha conforme abaixo:

<?php
echo "Olá " . $nome;
?>
Não sabe como alterar o Arquivo de Configuração do PHP? Expliquei isso no post: Conheça todas as formas de Abrir e Fechar Blocos de Código PHP.


Leia mais:

52 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Fiz ..deu tudo certo. Parabéns....

    ResponderExcluir
  3. nao funcionou...fiz e nao deu...Entao copiei o seu e guardei como disse e nao deu.

    ResponderExcluir
  4. Três detalhes que podem causar erro são:

    - Na tag "form" do arquivo "form-teste.html", o parâmetro "method" está definido como "post"?

    - Na tag "form" do arquivo "form-teste.html", o parâmetro "action" esta definido com o valor "receber-form.php"? Verifique se o nome do arquivo esta correto e se os dois arquivos ("form-teste.html" e "receber-form.php") estão no mesmo diretório.

    - Na tag "form" do arquivo "form-teste.html", verifique se o parâmetro "name" da caixa de texto esta definido como "nome" e se no arquivo "receber-form.php" esta recebendo como $_POST['nome'].

    Se ainda nada disso funcionar e estiver usando o Wamp conforme uso nos exemplos, reinicie todos os serviços do Wamp (Mostrei isso em: http://denecir.blogspot.com/2010/09/abrir-fechar-php.html) e teste novamente.

    Diz aí o que deu depois.


    Abração!

    ResponderExcluir
    Respostas
    1. código muito bom,de fácil entendimento!
      valeu, Abraços.

      Excluir
  5. adorei seu post!! muito bom mesmo...enviar os dados lidos para o email é muito difícil? adorava experimentar :)

    ResponderExcluir
  6. Olá Miguel! Obrigado pelo comentário no meu Blog!

    Mandar e-mail com PHP é super fácil. Com apenas uma linha de código a mais você consegue fazer isso. Basta usar a função mail conforme abaixo:

    mail($destinatario, $assunto, $mensagem, $cabecalho);

    Onde:

    $destinatario = E-mail do destinatário (quem vai receber a mensagem);

    $assunto = Assunto da mensagem;

    $mensagem = Mensagem em si;

    $cabecalho (opcional) = Cabeçalho da mensagem. Aqui você pode informar o Remetente (quem envia), o tipo de mensagem (Texto ou HTML), pode adicionar arquivos anexos, etc.

    O exemplo abaixo, ao ser executado, envia um e-mail pra mim (denecir@gmail.com) no formato "HTML" com o assunto "Teste de assunto" e com a mensagem "Teste de Mensagem". Veja só:

    mail("denecir@gmail.com", "Teste de assunto", "Teste de Mensagem", "From: DenecirPOP \r\n Content-Type: text/html \r\n");

    Como se trata de uma mensagem no formato HTML (Informado no cabeçalho), você pode utilizar TAGs para formatar.

    São várias opções e por isso, assim que possível, farei um POST para explicar mais recursos da função MAIL.

    Espero ter ajudado. Qualquer coisa, posta aí...


    Abração!

    ResponderExcluir
  7. Oi Denecir! gostei do seu blog. achei esse site sem querer, navegando e procurndo respostas sobre Dreamweaver. Eu tirei o curso de: Programação:(Visual Basic, Delphi_7, MS_Access)
    Programação WEB:(HTML, PHP, JavaScript, Flash, MySQL)
    Como sabe, os corsos comerciais são basicos, então nunca perco o tempo de procurar mais: Apostilas, Video aulas e informacão sobre assunto em questão.
    Achei esse site bem montado, simples navegar e achar informacão nele, se você mejmo montou ele, meus parabens!..
    (desculpe sobre erros gramaticos. Eu sou estrangeiro...)

    ResponderExcluir
  8. Eu gostaria de sua ajuda.
    Eu fiz um formulario, mas quando recebo o "comentário" da pessoa por email, o texto vem todo junto sem querbra de linhas...
    Como posso resolver isso?
    Obrigada!
    vava.abracado@gmail.com

    ResponderExcluir
  9. Usa o a função "nl2br" na mensagem:
    http://php.net/manual/pt_BR/function.nl2br.php

    ResponderExcluir
  10. Eu nao entendo quando salvo um arquivo .php ele coloca o arquivo em formato de texto e nao em linguagem web como deveria ser dai quando mando enviar meu nome ele abre a o aruivo receber-form.php no navegador mas com os codigos escritos como um texto("")e nao como um programa...o que estou fazendo de erradopoderia me ajudar?
    Obs.:Meu navegador eh o Google Chrome
    Meu editor de texto eh o bloco de notas
    Meu sistema operacional eh o Windows Vista

    ResponderExcluir
    Respostas
    1. nossa cara vishhh dica dica
      navegador mozila ou opera;
      seu editor notepad plus plus < ele é muito bom e da pra vc mudar a linguagem para html ou php ou salvar como arquivo html ou php >
      e o seu SO putz nem vou comentar...
      php.net

      Excluir
  11. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  12. O arquivo esta mesmo com a extensão ".php"? No Windows, vai em "Organizar" -> "Opções de Pasta e Pesquisa" -> Guia "Modo de Exibição" -> Desmarque a opção "Ocultar as extensões de Tipos de Arquivos conhecidos" -> Clique em "OK". Depois, vai na pasta onde esta o arquivo e verifique se a extensão esta correta.

    Se mesmo assim não estiver funcionando, verifique no código se você iniciou o mesmo com a abertura padrão do PHP assim: "<?php"

    Digo isso, porque as outras formas de iniciar um código ("<?", "<%" e "<?=") dependem de ajustes no php.ini.

    Se nada funcionar, me passa seu e-mail, msn ou skype para que eu possa te ajudar. Você fez comentário como anônimo e não tenho como entrar em contato para te ajudar.

    No aguardo. Abraço!

    ResponderExcluir
  13. Cara estou com um problema.
    quando clico em enviar parece o erro 403
    msg: You don't have permission to access...
    me ajuda por favor

    ResponderExcluir
    Respostas
    1. Caramba, você colocou o destino certo no parâmetro action da tag form? Me passa seu e-mail, msn, skype, etc. Algum contato. Assim, vou poder te ajudar. Abs!

      Excluir
    2. Eu que agradeço

      Excluir
  14. Muito bom sua explicação. Gostaria de saber de você como criar um formulário onde o usuário digita um username e senha já cadastrados no banco de dados para que ele possa acessar uma página onde ele interagem com as tabelas desse banco (insert, delete upadate, select).......valeu.

    ResponderExcluir
  15. Denecir, meu filho! Bora voltar a postar e quem sabe dicas de como conectar a banco de dados, hein? Muito bom o blog :D

    ResponderExcluir
  16. Ola Denecir,

    To passando ai pra dizer que seu tutorial é mt bom cara, parabéns.

    PS: Não deixa de fazer esses tutoriais, não, continua ai, blz.


    Antonio

    ResponderExcluir
  17. Boa tarde Denecir, Não sei se ira responder esse comentário, mas gostaria de expor minha dúvida.
    Gostaria e saber como "tratar" o resuldo do PHP. Exemplo: Tenho uma página formulário, o usuário preenche e envia, mas o resultado é uma nova página gerada como resposta pelo PHP. Queria saber se tem como receber só uma variável por exemplo e minha página ficasse intacta.

    ResponderExcluir
    Respostas
    1. Oi Marcone, obrigado por ler meu blog!

      Pelo que entendi, o que você quer é submeter o formulário (fazer uma requisição http do tipo post) sem recarregar a página, certo?

      Isso é possível utilizando uma tecnologia chamada AJAX. AJAX nada mais é do que JavaScript.

      É possível utilizar ajax com JavaScript puro, mas o código fica enorme. Para facilitar, costumamos utilizar bibliotecas prontas para diminuir a quantidade de código nos sistemas e aumentar o tempo de produção. A biblioteca JavaScript mais popular hoje em dia é o JQuery. É muito fácil.

      Fiz um exemplo simples e estou mandando para seu e-mail: marconesr@gmail.com


      Abraço!

      Excluir
  18. Boa noite, gostaria de saber sobre o caminho entre
    o formulário php e o formulário html.

    ResponderExcluir
    Respostas
    1. Fala Marcelo,

      Na verdade, o formulário é sempre gerado a partir de um código HTML (mesmo que esteja contido em um arquivo com extensão PHP).

      Só que o HTML não processa as informações preenchidas pelos usuários (não manda e-mail ou grava no banco de dados por exemplo). Aí vem a necessidade de usarmos uma linguagem como PHP, ASP, JAVA, etc. Para trabalhar em conjunto com HTML e armazenar e/ou enviar os dados. Entendeu?

      Obrigado por usarei blog!

      Abraço Amigão!

      Excluir
    2. Bom dia, muito obrigado pela dica.

      Excluir
  19. Consegui criar o formulário em html, mas quando carrego para enviar o resultado para o ficheiro em php apenas aparece uma página em branco, o que posso fazer para corrigir este erro?
    Cumprimentos.

    ResponderExcluir
    Respostas
    1. É difícil dizer o que deu errado sem ver o código. Mas faz assim: dentro do bloco PHP no arquivo que recebe os dados do formulário, coloca a seguinte linha:

      error_reporting(E_ALL);

      Isso força a exibição dos erros e warnings.

      Depois, posta aqui qual mensagem deu.

      Abraço!

      Excluir
  20. Boa tarde, estou tentando construir um código PHP para receber os dados do formulário em HTML, mais estou tendo muita dificuldade, por favor mi de uma dica.

    ResponderExcluir
    Respostas
    1. Oi Marcelo, obrigado por utilizar o blog.

      Não consegui entender sua dúvida. Neste post, explico exatamente como receber dados de um formulário HTML.

      Talvez sua pergunta seja pelo fato de não ter o PHP configurado em sua máquina. Se for isso, sugiro que dê uma lida neste link:
      http://denecir.blogspot.com.br/2010/09/instalacao-php-apache-mysql-no-windows.html

      Outra coisa que acontece também é que não adianta receber dados de um formulário e não fazer nada com eles. Normalmente esses dados são enviados para um e-mail e/ou gravados em um banco de dados. Essas dicas pretendo futuramente publicar aqui no blog, mas se quiser ver algo agora, sugiro dar uma estudada por este site:
      http://w3schools.com/php/default.asp

      Espero ter ajudado!

      Abraço amigão!

      Excluir
  21. cara eu quebrei a cabeça tentando fazer o php receber dados do formulario HTML e tu em menos de 2 minutos conseguiu me fazer enteder muito mas muuuito obrigado mesmo já dei ctrl+d pra favoritos e vou divulgao o blog sempre que possivel valeu mano

    ResponderExcluir
  22. Cara, gostei muito do seu blog,

    estou com uma dificuldade aqui e preciso de uma ajudinha.

    é o seguinte, preciso fazer um form que envia dois valores para um banco mysql, e criar uma tabela com apenas uma linha e três coluna (celulas), essa tabela a primeira e a segunda celula da tabela deve mostrar o primeiro e o segundo valor que foi cadastrado no banco, a terceira célula deve mostrar a soma desses valores.

    bom consegui enviar os bados para o banco atraves do form e mostrar esses valores no primeiro e segundo campo da tabela html, só não estou conseguindo somar esses valores na terceira célula da tabela, pode me ajudar?

    confesso que em php eu não sei como fazer, tentei e javascrip através do getElementById(), mas a soma aparece e some rapidinho, não fica na tela, mas gostaria mesmo de fazer isso em php.

    desde já agradeço, e parabéns pelo blog, está show!

    ResponderExcluir
    Respostas
    1. Obrigado por usar o blog,

      É possível fazer isso tanto com PHP quanto direto no MySQL.

      Em ambos os casos não é necessário criar 3 campos, basta apenas criar os dois que terão os valores usados para fazer a soma. Exemplo: "valor1" e "valor2", ou seja, não precisa de um terceiro campo para gravar o resultado da soma.

      No caso do MySQL, você pode fazer usando uma query assim:

      $query = "SELECT valor1, valor2, (valor1 + valor2) AS soma FROM nome_da_tabela;";

      Pronto, depois é só varrer o resultset como você já deve estar fazendo considerando como se existisse um campo na tabela chamado "soma".

      Agora, se você quer mesmo fazer a soma no PHP (e não no MySQL), também é fácil. Você dá um SELECT na tabela para pegar os dois campos (valor1 e valor2), varre o resultset colocando cada valor em uma variável e, por fim, faz a soma. Dá uma olhada no exemplo:

      $query = "SELECT valor1, valor2 FROM nome_da_tabela;";

      $resultset = mysql_query($query);
      while($registro=mysql_fetch_array($resultset))
      {
      $valor1 = $registro['valor1'];
      $valor2 = $registro['valor2'];
      $soma = $valor1 + $valor2;
      echo $valor1.' - '.$valor2.' - '.$soma.'
      ';
      }


      Espero ter ajudado!

      Excluir
  23. Fala Denecir, tudo bem?
    Eu estou com uma duvida que até hoje não consegui resolver.
    Como faço para através de uma variavel enviada pelo flash ('nome' por exemplo) eu consiga receber do banco de dados outras variáveis relacionadas(telefone,email,endereço,....por exemplo).
    Obrigado!

    ResponderExcluir
    Respostas
    1. Olá,

      Isso é uma dúvida muito comum. Primeiro é importante lembrar que o Flash roda na máquina do cliente e, por isso, não possui acesso ao banco de dados, ou seja, será necessário o uso de uma linguagem que fará esse papel (PHP por exemplo).

      Existem vários tutoriais que explicam como fazer isso. Segue um:
      http://ajuda.uolhost.com.br/index.php?p=resposta&res=904#rmcl

      Antes de finalizar, acho importante lembrar que o flash não esta sendo muito utilizado para aplicações desse tipo. Além de ser mais trabalhoso trabalhar desta forma, acredito que outro motivo seja o aumento de acessos por dispositivos móveis (como tablets e smartphones) pois o flash gasta muito mais bateria desses aparelhos.

      Abraço!

      Excluir
  24. Great post! We will be linking to this great article on our site.

    Keep up the good writing.

    my web site :: google

    ResponderExcluir
  25. A gente tá sempre aprendendo !
    Parabéns, suas explicações são fáceis de compreender.

    ResponderExcluir
  26. Muito bom, básico! Responde as perguntas com exemplos práticos.

    ResponderExcluir
  27. Olá Denecir! Para receber um post de uma página asp, seria da mesma forma?

    ResponderExcluir
    Respostas
    1. Não, em ASP seria assim:

      ---------------------------------
      dim nome, idade

      nome = request.form("nome")
      idade = request.form("idade")

      response.write "Seu nome: " & nome & "
      "
      response.write "Sua idade:" & idade
      ---------------------------------

      Acima, considero que o formulário que envia informações usa o método POST e nele, existem dois campos com os atributos "name" com os valores "nome" e "idade".

      Espero ter ajudado!

      Excluir
  28. Denecir, você foi simples, direto e...perfeito. Esta sua lição inicial preencheu uma semana de buscas. Valeu. Deus te abençoe e proteja.
    Lima/30-11-2016.

    ResponderExcluir

O que você achou do post? Faça um comentário.

Aprenda a receber dados de Formulário com PHP

Existem três arrays associativos que podemos usar para receber dados de Formulários HTML em PHP. São eles: $_GET , $_POST e $_REQUEST . O...