quinta-feira, 11 de setembro de 2008

PHP: Utilizando GET e POST no mesmo formulário



Recuperando informações utilizando $_GET e $_POST no mesm formulário

No post recupenado 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.

Um comentário:

Anônimo disse...

Olá, que bom que encontrei seu blog!
Sou Carlos, faço faculdade de sistemas de informação e estou aprendendo PHP. Creio que seu blog irá me ajudar muito.
Abraço

Carlos Garcia