$_GET em PHP

Nenhum produto encontrado nessa seleção.

Em nossa última aula, vimos como manipular os dados da supervariável $_POST, que é muito utilizada em formulários HTML. Hoje vamos falar sobre $_GET, que é um array associativo que trata os dados recebidos através de HTTP GET.

$_GET recebe os dados diretamente de uma URL após um ponto de interrogação, exemplo:

  • www.site.com.br/index.php?variavel=valor

Quando queremos passar mais de um valor, eles devem ser separados por um "E" comercial (&), veja outro exemplo:

  • www.site.com.br/index.php?variavel=valor&variavel2=valor2&variavel3=valor3

Este método também pode ser utilizado em formulários que utilizam o method igual a get, exemplo:

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

Se você criar um arquivo PHP com este formulário, verá que, ao enviar o formulário, a sua URL irá mudar. Um ponto de interrogação será adicionado junto da palavra "nome", um sinal de igual (=) e o valor postado. Por exemplo, se eu digitar meu nome, a minha URL ficou assim:

http://127.0.0.1/Cursos/php/aula_22/?nome=Luiz+Ot%E1vio

Perceba que o valor é codificado para um formato de URL. Toda vez que você for enviar um valor diretamente para criar uma URL utilizando este método, também terá que codificar o mesmo com a função urlencode ou rawurlencode.

Na página de recebimento dos dados, utilize urldecode ou rawurldecode. Você vai ver isso mais adiante no artigo.

Vamos ver como receber os dados de $_GET em PHP.

Manipulando $_GET em PHP

Da mesma maneira que vimos em $_POST, $_GET também é um array associativo com todos os valores que estiverem presentas na URL. Por exemplo, se pegarmos aquele formulário que criamos anteriormente e colocarmos o seguinte no arquivo PHP (trecho abaixo), vamos ver o valor postado no input com atributo name igual a nome na tela do navegador.

<?php
/* Verifica se $_GET['nome'] existe e não está vazio */
if (   isset( $_GET['nome'] ) && 
     ! empty( $_GET['nome'] ) 
) {
	/* Mostra o valor de $_GET['nome'] concatenado a uma frase */
	echo 'O valor de $_GET['nome'] é: ' . $_GET['nome'] . '<br>';
}
?>

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

Agora você pode escrever algo no formulário e enviar para vermos o resultado.

Perceba que não estamos decodificando o valor, o PHP está fazendo isso automaticamente, mas se quisermos garantir, podemos utilizar as funções mencionadas anteriormente. Veja um exemplo:

<?php
/* Verifica se $_GET['nome'] existe e não está vazio */
if (   isset( $_GET['nome'] ) && 
     ! empty( $_GET['nome'] ) 
) {
	/* Mostra o valor de $_GET['nome'] concatenado a uma frase */
	echo urldecode( $_GET['nome'] ) . '<br>';
}
?>

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

Você pode incluir quantos campos desejar no seu formulário, veja:

<?php
/* Verifica se $_GET['nome'] existe e não está vazio */
if (   isset( $_GET['nome'] ) && 
     ! empty( $_GET['nome'] ) 
) {
	echo $_GET['nome'];
	echo $_GET['telefone'];
	echo $_GET['email'];
}
?>

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p>Telefone: <input type="text" name="telefone"></p>
	<p>Email: <input type="text" name="email"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

E assim como em $_POST, também podemos configurar os dados recebidos por HTTP GET em variáveis, veja:

<?php
/* Verifica se $_GET['nome'] existe e não está vazio */
if (   isset( $_GET['nome'] ) && 
	 ! empty( $_GET['nome'] ) 
) {
	// Cria as variáveis
	$nome     = $_GET['nome'];
	$telefone = $_GET['telefone'];
	$email    = $_GET['email'];
	
	// Mostra os dados na tela
	echo $nome . '<br>';
	echo $telefone . '<br>';
	echo $email . '<br>';
}
?>

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p>Telefone: <input type="text" name="telefone"></p>
	<p>Email: <input type="text" name="email"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

Podemos até criar variáveis dinamicamente com o laço foreach:

<?php
/* Verifica se $_GET['nome'] existe e não está vazio */
if (   isset( $_GET['nome'] ) && 
	 ! empty( $_GET['nome'] ) 
) {
	// Cria variáveis dinamicamente
	foreach ( $_GET as $chave => $valor ) {
		$$chave = $valor;
	}
	
	// Mostra os dados na tela
	echo $nome . '<br>';
	echo $telefone . '<br>';
	echo $email . '<br>';
}
?>

<form method="get" action="">
	<p>Nome: <input type="text" name="nome"></p>
	<p>Telefone: <input type="text" name="telefone"></p>
	<p>Email: <input type="text" name="email"></p>
	<p><input type="submit" value="Enviar"></p>
</form>

Além disso, podemos criar uma variável manualmente. Veja logo abaixo.

$_GET em uma URL

Você pode criar uma URL manualmente com quantos valores quiser passar para o HTTP GET, basta seguir o padrão descrito no início desse artigo: um interrogação para o primeiro grupo de chave=valor; um "E" comercial (&) para o restante.

Neste caso, o PHP funcionará da mesma maneira. Ou seja:

echo $_GET['chave_1'];
echo $_GET['chave_2'];
echo $_GET['chave_3'];
echo $_GET['chave_4'];
echo $_GET['chave_5'];
echo $_GET['chave_6'];
....
echo $_GET['qualquer_chave'];

Não deixe de ler o artigo anterior, sobre $_POST.

Vídeo Tutorial sobre $_POST e $_GET

Abaixo você vai assistir a um vídeo tutorial que criei baseado nos dois artigos, sobre $_GET e $_POST.

Concluindo

$_GET e $_POST serão seus companheiros para o resto da sua vida de programador em PHP, portanto, esteja bem familiarizado com ambos. Teste, aprimore seus conhecimentos, e, caso tenha dúvidas, não deixe de perguntar nos comentários.

E não deixe de seguir o resto das aulas em nosso curso de PHP gratuito.