Curso de PHP: Recuperando informações utilizando $_GET e $_POST no mesmo formulário

No post recuperando informações via $_GET foi ensinado como pode ser feito para recuperar dados de um formulário pelo método get, e em recuperando informações via $_POST foi ensinado como pode ser feito para recuperar dados de um formulário pelo método POST.

Em ambos os casos, foram explicados os conceitos, as vantagens e as desvantagens de cada um. E como a programação está aí para facilitar a vida de todo mundo, é possível utilizar os dois métodos juntos, caso necessário. Porém, é necessário a separação das informações para seu uso correto.

Há duas formas de fazer isso, estaticamente, com o valor fixo para o parâmetro que será recuperado pelo $_GET, ou dinamicamente, utilizando uma função javascript para manipular o valor antes do envio do formulário.

1. Da forma estática:

- Montagem do formulário

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Teste de Formulário com $_GET e $_POST</title>
  </head>
  <body>
        <h1>Teste de Formulário com $_GET e $_POST</title></h1>
  <form name="formulario" action="pagina.php?acao=Cadastrar" method="post">
  <label>Nome:</label>
  <input type="text" name="txtNome" id="txtNome" /> <br />
            <label>Email:</label>
  <input type="text" name="txtEmail" id="txtEmail" /> <br />
            <label>Cidade:</label>
            <input type="text" name="txtCidade" id="txtCidade" /> <br />
            <input type="submit" name="cmdEnviar" id="cmdEnviar" value="Enviar" />
        </form>
  </body>
</html>

Veja que todos os campos (input, select, etc) do formulário serão enviados com o método POST, pois o atributo method do formulario contém o valor 'post'. Esses dados serão acessíveis em nossa página na variável $_POST.

O campo que será enviado pelo método GET é o atributo acao, que está configurado na url do atributo action da tag form. Tudo que estiver após o ponto de interrogação estará disponível em nossa página PHP na variável $_GET.

- Página PHP

<?php
    echo 'Acao: ' . $_GET['acao'] . '<br   />';
    echo 'Nome: ' . $_POST['txtNome'] . '<br   />';
    echo 'Email: ' . $_POST['txtEmail'] . '<br   />';
    echo 'Cidade: ' . $_POST['txtCidade'] . '<br   />';
?>

Veja que o valor de acao é recuperado por $_GET e os demais campos são recuperados por $_POST. E lembre-se,todos os campos poderiam ser utilizados por $_REQUEST, tanto o valor de acao, quanto os demais campos.

<html>
    <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Teste de Formulário com $_GET e $_POST</title>
  </head>
  <body>
  <h1>Teste de Formulário com $_GET e $_POST</title></h1>
  <form name="formulario" id="formulario" action="pagina.php" method="post">
  <label>Nome:</label>   <input type="text" name="txtNome" id="txtNome" /> <br />   <label>Email:</label>   <input type="text" name="txtEmail" id="txtEmail" /> <br />   <label>Cidade:</label>   <input type="text" name="txtCidade" id="txtCidade" /> <br />   <input type="button" name="cmdEnviar" id="cmdEnviar" onclick="doEnviar()" value="Enviar" />   </form>   </body> </html>

2. Da forma dinâmica:

- Montagem do formulário

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"   />
        <title>Teste de Formulário com $_GET e $_POST</title>
    </head>
    <body>
        <h1>Teste de Formulário com $_GET e $_POST</title></h1>
        <form name="formulario" id="formulario" action="pagina.php" method="post">
            <label>Nome:</label>
            <input type="text" name="txtNome" id="txtNome"   /> <br   />
            <label>Email:</label>
            <input type="text" name="txtEmail" id="txtEmail"   /> <br   />
            <label>Cidade:</label>
            <input type="text" name="txtCidade" id="txtCidade"   /> <br   />
            <input type="button" name="cmdEnviar" id="cmdEnviar" onclick="doEnviar()" value="Enviar"   />
        </form>
    </body>
</html>

Veja que o action do formulário contém apenas a página, não tem o sinal de interrogação.

Outra mudança é o botão de envio, que mudou o atributo type de submit para button. Essa alteração faz com que o botão não envie o formulário quando for acionado. Outra mudança foi a adição do atributo onclick como o valor doEnviar(). Isso faz com que quando esse botão for acionado por um click, a função doEnviar() sejá executada (em javascript)

- Função Javascript

  <script type="text/javascript">
  function doEnviar() { //inicio da funcao
   
      //pega o formulário como elemento
      var formulario = document.getElementById('formulario');
   
      //monta os parametros de get
      var parsGet = '?acao=cadastrar';
      parsGet = parsGet + '&txtNome=' + document.getElementById('txtNome').value;
   
      //muda o parâmetro action do formulário com os parmetros get
      formulario.action = formulario.action + parsGet;
   
      //envia o formulário
      formulario.submit();
  }  
  </script>

A função javascript acima deve ser copiada e colada antes do fechamento da tag header. Seu objetivo é montar os parâmetros da url que devem ser recuperadas por GET em nossa página PHP, adicionando os campos ao action do formulário e enviando o formulário com o comando submit.

- Página PHP

<?php
    echo 'Acao: ' . $_GET['acao'] . '<br   />';
    echo 'Nome: ' . $_GET['txtNome'] . '<br   />';
    echo 'Email: ' . $_POST['txtEmail'] . '<br   />';
    echo 'Cidade: ' . $_POST['txtCidade'] . '<br   />';
?>

Veja que o valor de acao e o nome (txtNome) são recuperados por $_GET e os demais campos são recuperados por $_POST. E lembre-se,todos os campos poderiam ser utilizados por $_REQUEST, tanto o valor de acao e nome, quanto os demais campos.