Variáveis de fontes externas
Formulários HTML (GET e POST)
Quando um formulário é submetido para um script PHP, a informação deste
formulário estará automaticamente disponível ao script. Há
algumas maneiras de acessar estas informações, por exemplo:
Exemplo #1 Um formulário HTML simples
<form action="foo.php" method="post">
Nome: <input type="text" name="username" /><br />
Email: <input type="text" name="email" /><br />
<input type="submit" name="submit" value="Me aperte!" />
</form>
A partir do PHP 5.4.0, existem apenas duas formas de acessas dados de formulários PHP.
Os métodos disponíveis atualmente são listadas a seguir:
Exemplo #2 Acessando dados de um formulário HTML via POST
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
Há outras formas de acessar dados enviados pelo usuário nas antigas versões do PHP. Elas
estão listadas abaixo. Veja a lista de modificações no final da página para mais detalhes.
Exemplo #3 Meios antigos de acessar dados enviados pelo usuário
<?php
// CUIDADO: esses métodos NÃO são mais suportados.
// Os válido estão descritos acima
// Utilizando import_request_variables() - esta função foi removida no PHP 5.4.0
import_request_variables('p', 'p_');
echo $p_username;
// Essas variáveis pré-definidas foram removidas no PHP 5.4.0
echo $HTTP_POST_VARS['username'];
// Utilizando register_globals. Este recurso foi removido no in PHP 5.4.0
echo $username;
?>
Utilizar um formulário GET é similar, exceto que você usará a variável
GET pré-definida. GET também se aplica a superglobal
QUERY_STRING
(a informação depois do '?' numa URL). Então,
por exemplo, http://www.example.com/test.php?id=3
contém os dados GET que estarão acessíveis com $_GET['id'].
Veja também $_REQUEST.
Nota:
Pontos e espaços em nomes de variáveis são convertidos para sublinhados. Por
exemplo <input name="a.b" />
se tornará
$_REQUEST["a_b"]
.
O PHP também entende arrays no contexto de variáveis de formulário
(veja essa FAQ). Pode-se,
por exemplo, agrupar variáveis relacionadas, ou utilizar este
recurso para obter valores de um input select múltiplo. Por
exemplo, iremos enviar o formulário abaixo para si mesmo, e depois de submetido, mostra
os dados:
Exemplo #4 Variáveis de formulários mais complexos
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
Nome: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Cerveja: <br />
<select multiple name="beer[]">
<option value="antartica">Antartica</option>
<option value="brahma">Brahma</option>
<option value="skol">Skol</option>
</select><br />
<input type="submit" value="Enviar dados!" />
</form>
Cookies HTTP
O PHP suporta transparentemente cookies HTTP como os definidos pela » RFC 6265. Cookies são um
mecanismo o armazenamento de dados no navegador,
rastreando ou identificando o retorno de usuários. Você pode definir cookies com
a função setcookie(). Cookies são parte do
cabeçalho HTTP, então a função SetCookie precisa ser chamada antes
de qualquer saída ser enviada ao navegador. Esta é a mesma restrição
da função header(). Dados de cookies
estão disponíveis nos arrays de dados de cookies apropriados,
como $_COOKIE e também em $_REQUEST.
Veja o manual de setcookie() para mais detalhes e
exemplos.
Se você deseja atribuir vários valores para uma única variável do cookie, você
pode fazer dele um array:
Isso irá criar dois cookies separados enquanto que MeuCookie será
um único array em seu script. Se quiser definir apenas um cookie com
vários valores, considere utilizar serialize() ou
explode() nos valores primeiro.
Note que um cookie substituirá um anterior com o mesmo
nome em seu navegador, a menos que o nome ou o caminho seja diferente. Então,
para uma aplicação de carrinho de compras em que se quer ter um contador
e repassá-lo:
Exemplo #5 Exemplo setcookie()
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
Pontos em nomes de variáveis postadas
Normalmente o PHP não altera o nome de variáveis quando elas
são passadas para o script. Entretanto, é necessário notar que o
ponto (ponto final) não é um caractere válido no nomes de
variáveis do PHP. Para ilustrar, veja o seguinte exemplo:
<?php
$varname.ext; /* nome de variável inválido */
?>
Dessa forma, o interpretador entende isso como uma variável nomeada
$varname, seguida do operador de concatenação
de strings, seguida de uma string crua (uma string não delimitada que
não bate com nenhuma palavra-chave ou reservada) 'ext'. Obviamente,
isso não tem os resultados pretendidos.
Nessa situação, é importante notar que o PHP
substituirá automaticamente qualquer ponto nos nomes de variáveis recebidas por
sublinhados.
Determinando o tipo das variáveis
Como o PHP determina os tipos de variáveis e faz conversões
(geralmente) quando necessárias, nem sempre é óbvio o tipo de uma variável
em todos os momentos. O PHP incluí várias funções
que permitem determinar qual o tipo de uma variável, por exemplo:
gettype(), is_array(),
is_float(), is_int(),
is_object(), e
is_string(). Veja também o capítulo
Tipos.