Páginas

sexta-feira, 29 de abril de 2011

Métodos GET e POST

Olá pessoal, esta é a minha primeira postagem no blog. Pretendo fazer daqui um lugar de ajuda para os programadores web, com o uso de uma linguagem simples para facilitar a vida dos que tem necessidades básicas até as mais avançadas.
Bem, vamos ao que interessa. Hoje vou falar sobre os métodos GET e POST.

Imagine que você tenha na seguinte página um formulário:
<form name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
<label for="txtNome">Nome:</label>
<input type="text" name="txtNome" value="Julio">
<label for="txtSobreNome">Sobrenome:</label>
<input type="text" name="txtSobreNome" value="Bernardo">
<button type="submit">Enviar</button>
</form>


O atributo 'action' da tag <form> está dizendo que ao enviar este formulário, os dados contidos nele ('value' dos inputs neste caso) serão enviados para a própria página (atual), então, o código PHP ao invés de ser escrito numa página a parte, será escrito no fim da própria página. O atributo 'method' da tag <form> diz qual método usaremos para envio dos dados. Neste caso, usaremos primeiro o método GET.

Com o HTML pronto, façamos agora o código PHP.
<?php
    if ( isset($_GET["txtNome"]) && $_GET["txtSobreNome"] ) {
        echo "Nome: ".$_GET["txtNome"]."<br>";
        echo "Sobrenome: ".$_GET["txtSobreNome"];
    }
?>


a função isset() verifica se a variável $_GET está setada (com qualquer valor). Essa verificação é mais usada para validação de campos via PHP, pois caso o campo esteja vazio, nada vai ser impresso no código interno do IF. Em seguida, imprimo os valores na tela contidos no 'form1' ('value' dos inputs neste caso) enviados anteriormente.

Então, o código PHP vai imprimir:
Nome: Julio
Sobrenome: Bernardo

Pronto, você passou dados de um formulário para uma página PHP. Você pode notar também que, os dados enviados, agora estão visíveis na sua barra de endereços (?txtNome=Julio&txtSobreNome=Bernardo). Isso pode ser um problema, principalmente quando você precisa passar algo sigiloso (senha, id de tabela) com segurança.

A melhor solução para tanto é usarmos o método POST:
<form name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<label for="txtNome">Nome:</label>
<input type="text" name="txtNome" value="Julio">
<label for="txtSobreNome">Sobrenome:</label>
<input type="text" name="txtSobreNome" value="Bernardo">
<button type="submit">Enviar</button>
</form>


Note que apenas o método do <form> mudou, para POST.
<?php
    if ( isset($_POST["txtNome"]) && $_POST["txtSobreNome"] ) {
        echo "Nome: ".$_POST["txtNome"]."<br>";
        echo "Sobrenome: ".$_POST["txtSobreNome"];
    }
?>


E agora mudamos para $_POST ao invés de $_GET as variáveis PHP e está feito! O PHP recebe os dados via método POST e os valores na barra de endereços agora já não são mais exibidos.
Como você pode ver, o método POST é seguro para envio de formulários, mas o método GET também se faz necessário, por exemplo em casos de envio de variáveis via URL diretamente chamando a sua página PHP. Neste caso deve ser recuperada com a variável $_GET. Outra coisa interessante é que as variáveis $_GET / $_POST são arrays, e sendo assim, quando se possuir muitos campos em um formulário, pode ser melhor fazer um loop para se recuperar os valores, mas vamos deixar isso para uma próxima oportunidade.

Um abraço a todos.