28 de nov. de 2008

Utilizando a variável global $_GET e $_POST

Quando comecei a programar em PHP, sempre quis saber porque algumas páginas apresentavam uma formatação estranha nos endereços do tipo http://www.sitetal.com/index.php?pagina=4&acao=postar.

Foi difícil achar mas encontrei na época, e por isso hoje vou postar aqui como isso funciona.

Se você já utiliza o $_POST sabe que você deve usá-lo para receber os dados do seu formulário de envio de dados. Sempre se usa POST em formulários porque os dados passam de maneira "escondida" através de headers, de forma que não há como se acessar esses dados, a não ser pela página que os recebe.

O $_GET é totalmente diferente, na verdade é exatamente o inverso, ele ao invés de pegar os dados enviados pelo header da página, pega tudo aquilo que for enviado pela url do seu site. Como no exemplo mostrado no início.

Por definição, $_POST e $_GET são consideradas variáveis SUPERGLOBAIS, ou seja, acessíveis em todo o escopo da seu código.

Vou fazer o exemplo dos dois para mostrar um comparativo.

No caso do método POST:

<form name="meuform" method="post" action="recebe.php">

<input type="text" name="meutexto">
<input type="submit" value="Enviar">

</form>

Temos o nosso formulário, salve-o como "form.php". Agora vejamos como fica o nosso arquivo "recebe.php" que irá receber os dados.

<?
///A variável global recebe os dados do header
$meutexto = $_POST['meutexto'];

echo $meutexto;
?>

Depois de salva, teste sua página, acesse a página "recebe.php" no seu browser, digitando http://localhost/getpost/form.php.

No seu formulário digite qualquer coisa no campo e clique em enviar. Se você fez tudo certo, deverá estar aparecendo no seu browser aquilo que você escreveu na caixa de texto.

E agora veremos como GET funciona, pra explicar é mais simples.

Crie um novo arquivo PHP, chame ele de "get.php" e digite código abaixo:

<?
$meuget = $_GET['nome'];
/*
O cifrão é o prefixo de todas as variáveis do php
neste caso atribuímos a variável recebida através da url para a variável $meuget.
Diferente das linguagens compiladas, o PHP sendo uma linguagem interpretada, não necessita de declaração de variáveis. Ou seja, para criar uma variável basta atribuir um valor.
*/

echo "Dado recebido através da url:". $meuget;
echo "<BR>*Dado recebido através da url: $meuget";
/*
echo é o comando do php que faz com que o texto seja impresso na tela.
Tudo que for string ou caractére simples, leia-se texto simples, vai entre aspas.

O ponto que está antes do $meuget serve de concatenação, ou seja, ele faz a ligação entre os dois lados, entenda o ponto de concatenação como o "+" para unir dois textos.

Abaixo tem outra forma de imprimir o valor de uma variável, ela é inserida dentro das aspas, o PHP interpreta as 2 strings da mesma forma. O método com concatenação é uma prática melhor pois facilita a leitura do código e deixando-o mais organizado.
*/

echo "<BR>Dado recebido através da url:". $_GET['nome'];
/*
Acima está outra forma de impressão, que é pegando diretamento o valor que está na url sem passar para uma variável
*/

?>

Agora no seu browser digite o caminho da página, se você seguiu o tutorial é http://localhost/getpost/get.php. A sua página será carregada mas não irá aparecer nada.

Agora, na caixa de endereço do browser acrescente ao final o código entre aspas "?nome=ornitorrinco" e pressione enter. O endereço deve ficar assim "http://localhost/getpost/get.php?nome=ornitorrinco".

Ao carregar a página deve aparecer a palavra que você escreveu depois do "=" (igual, símbolo de atribuição).

Digite o que você quiser ali e carregue a página, que a palavra irá aparecer.

Qual a utilidade dos dois?

$_GET serve para tornar uma página mais navegável, de forma que o usuário possa guardar o endereço e retornar à página com as variáveis ou dados já carregados.
Ex: www.site.com.br/index.php?secao=eletronicos&preco=barato

$_POST serve para enviar dados onde você não quer que o visitante da página, ou mesmo intrusos, tenham acesso. Por isso geralmente se usa o POST para enviar os dados de forma segura, para que o conteúdo não possa ser interceptado.

Caso o tutorial não tenha funcionado, poste o erro que ocorreu.

Nenhum comentário: