Developer

$_GET, $_POST, $_REQUEST onde, quando e como

27 Jan 2014
13:06 | por Adriano Lima

$_GET, $_POST, $_REQUEST onde, quando e como

Quem nunca se fez a pergunta $_GET ou $_POST ? E de repente vem alguém e pergunta e porque não $_REQUEST? Então vamos desmistificar este grande "segredo" e saber quando usar cada uma delas.

Em 99% dos casos quando um Dev for programar uma aplicação web certamente irá usar $_GET ou $_POST. Eu digo 99% dos caso porque há outras formas de recuperar dados get ou post.Há um artigo super interessante no Poliglota Binário que fala sobre isso, quem tiver interesse é só dar uma olhada. No entanto como nosso objetivo é falar das supers globais $_GET, $_POST, $_REQUEST vamos ao que interessa.

Como eu citei acima $_GET, $_POST, $_REQUEST são super globais do PHP, mas o que são super globais?
Super globais são variáveis pré definidas no PHP, e que estão disponíveis em toda a sua aplicação.


$_POST basicamente para resgatar dados vindo de um formulário, estes dados são enviados em background e não estão "visíveis" ao usuário.Então, se os dados do seu formulário são muito grande e/ou você precisa que estes dados não sejam visualizados exemplo um formulário de login esta é a melhor opção.

Exemplo:

Resultado:

<?php
echo 'Meu nome é: ' . $_POST['nome']; //Meu nome é SouDev

echo 'Meu email é: ' . $_POST['email']; //Meu email é email@soudev.com
?>
$_GET usado para resgatar dados vindo de formulário e/ou de query strings, seus dados são passados via url e estão visíveis para todos sendo exibidos na url.Então, se você precisa que os dados deste formulário seja passado na url, exemplo um formulário de busca use o $_GET.

Exemplo:

Resultado

<?php
echo 'Meu nome é: ' . $_GET['nome'] ; // Meu nome é SouDev

echo 'Meu email é: ' . $_GET['email'] ; // Meu email é email@soudev.com
?>

Exemplo 2:

http://soudev.com/?nome=SouDev&email=email@soudev.com

Resultado:

<?php
echo 'Meu nome é: ' . $_GET['nome'] ; // Meu nome é SouDev

echo 'Meu email é: ' . $_GET['email'] ; // Meu email é email@soudev.com
?>

O $_REQUEST é o tipo genérico de de $_GET, $_POST para ela tanto faz se seus dados estão vindo via $_GET ou $_POST ela resgata ambos, seu uso é pouco recomendado.

 

Por que seu uso não é recomendado?


O motivo maior é segurança, imagine que você tenha um formulário na página soudev.php que será enviado para soudev1.php. Se você utilizar o $_REQUEST os dados podem ser passados direto por querys string,  então sua aplicação estará sujeita a ataques.
Veja a nota que está no manual do PHP:
“As variáveis em $_REQUEST são providas para o script via mecanismos de entradas GET, POST, e COOKIE e portando poderia ser modificadas por um usuário remoto e não podem ser confiadas “. 

Então, se tanto faz se seus dados forem mandados via get ou post use $_REQUEST do contrário esquece-a.

Exemplo:

Resultado:

<?php
echo 'Meu nome é: ' . $_REQUEST['nome']; //Meu nome é SouDev

echo 'Meu email é: ' . $_REQUEST['email']; //Meu email é email@soudev.com
?>

Exemplo 2:

http://soudev.com/?nome=SouDev&email=email@soudev.com

Resultado:

<?php
echo 'Meu nome é: ' . $_REQUEST['nome'] ; // Meu nome é SouDev

echo 'Meu email é: ' . $_REQUEST['email'] ; // Meu email é email@soudev.com
?>


Muitos podem dizer que usar as super globais é uma falha de segurança, porém ao meu ver falha de segurança é não validar seus dados corretamente antes de usá-los,  então a decisão é do developer, use-as com sabedoria e não esqueça, validação sempre.

Então neste post  vimos onde, como e quando usar as superglobais  $_GET, $_POST, $_REQUEST e lembre-se:

$_POST: para dados que não podem ser visualizados pelo usuário e/ou grande quantidade de campos e dados.
$_GET: para dados que podem ser visualizados pelo usuário e pequena quantidade de campos e dados, ou valores vindos via query string.
$_REQUEST: Esqueça, nunca use :-p.
 

Referências:
http://php.net/manual/pt_BR/language.variables.superglobals.php
http://www.php.net/manual/pt_BR/reserved.variables.get.php
http://www.php.net/manual/pt_BR/reserved.variables.post.php
http://www.php.net/manual/pt_BR/reserved.variables.request.php

Adriano Lima

Adriano Lima

Adriano Lima é Bacharel em Sistemas de informação e trabalha como Analista Programador na  Ibaro.
Trabalha atualmente com PHP, MYSQL, PostgreSQL, JavaScript, JQuery e MVC.

Comentários

Poste aqui seu comentário, crítica, dúvida ou sugestão. .
Promovam um debate sadio pois comentários ofensivos serão removidos.