Manual do PHP
Anterior | Capítulo 7. Variáveis | Próxima

# Variáveis externas ao PHP

## Formulários HTML (GET and POST)

Quando um formulário é submetido para um script PHP, qualquer variável do formulário será automaticamente disponível para o script. Há várias maneiras de acessar estas informações, por exemplo:

Exemplo 7-8. 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>

Dependendo da configuração local e suas preferencias pessoais, essas são as vias pela qual você pode acessar os dados de seus formulários:

Exemplo 7-9. Acessando dados de um formulário HTML via POST
    <?php
    // Disponível desde o PHP 4.1.0

       echo $_POST['username'];
       echo $_REQUEST['username'];

       import_request_variables('p', 'p_');
       echo $p_username;

    // Disponivel desde o PHP 3. A partir do PHP 5.0.0, essas grandes
    // variaveis pre-definidas podem ser desabilitadas pela diretiva register_long_arrays.

       echo $HTTP_POST_VARS['username'];

    // Disponível se a diretiva register_globals = on.
    // Desde o PHP 4.2.0 o valor default de register_globals é off
    // Usar/manter esse método é preferível.

       echo $username;
    ?>

Utilizar um formulário GET é similar, exceto que você use a variável GET predefinida. O metodo GET obtem os dados da 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 serão acessíveis com $_GET['id']. Veja também $_REQUEST e import_request_variables().

> Nota: Arrays superglobais, como $_POST e $_GET, estão disponíveis desde o PHP 4.1.0.

Como explicado, antes do PHP 4.2.0 o valor default de register_globals era on. E no PHP ele era sempre on. A comunidade PHP está encorajando todos a não alterarem essa diretiva, assumindo-a sempre como off e codificando em conformidade com isso.

> Nota: A diretiva de configuração magic_quotes_gpc afeta os valores de GET, POST e Cookies. Se estiver ativada, o valor (It's "PHP!") se tornará automaticamente (It\'s \"PHP!\"). Escaping é necessário para inserção em bancos de dados. Veja também addslashes(), stripslashes() e magic_quotes_sybase.

O PHP entende arrays no contexto de variáveis de formulários (veja o FAQ relacionado). Você pode, por exemplo, agrupar variáveis relacionadas juntas, ou usar esse recurso para receber valores de um campo de seleção múltipla. Por exemplo, podemos ter um formulario que manda informações para si mesmo até um comando submetido para mostrar todos os dados.

Exemplo 7-10. Variáveis de formulários mais complexos
`<?php if (isset($_POST['action']) && $_POST['action'] == 'submitted') { echo '<pre>'; print_r($_POST); echo '<a href="'. $_SERVER['PHP_SELF'] .'">Tente de novo</a>'; echo '</pre>'; } else { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" 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="hidden" name="action" value="submitted" /> <input type="submit" name="submit" value="Enviar dados!" /> </form> <?php } ?>`

No PHP 3, os arrays variáveis de formulários eram limitados a uma dimensão. No PHP 4, essa restrição não existe mais.

### Nomes de variáveis SUBMIT IMAGE

Quando submetendo um formulário, é possível de se utilizar imagens ao invés do botão de submit padrão com uma tag do tipo:

    <input type="image" src="image.gif" name="sub" />

Quando o usuário clica em algum lugar da imagem, o formulário que o acompanha é transmitido para o servidor com duas variáveis adicionais, sub_x e sub_y. Eles contém a coordenadas do clique do usuário na imagem. Os mais experientes percebem que os atuais nomes dessas variáveis enviados pelo browser contém um ponto ao invés de um sublinhado, mas o PHP converte o ponto para um sublinhado automaticamente.

## Cookies HTTP

O PHP suporta transparentemente cookies HTTP como os definidos pela especificação da Netscape. Cookies são um mecanismo de armazenamento de dados no browser cliente e permite o rastreamento ou identificação do retorno de usuários. Você pode criar cookies com a função setcookie(). Cookies são parte do header HTTP, então, a função setcookie() precisa ser chamada antes de qualquer saída ser enviada ao browser. Esta é a mesma restrição da função header(). Dados de cookies são disponíveis nos arrays de dados de cookies apropriados, como $_COOKIE, $HTTP_COOKIE_VARS como também em $_REQUEST. Veja o manual de setcookie() para mais detalhes e exemplos.

Se você deseja assimilar vários valores para uma única variável cookie, você pode fazer dele um array:

`<?php setcookie("MeuCookie[foo]", "Testando 1", time()+3600); setcookie("MeuCookie[bar]", "Testando 2", time()+3600); ?>`

Isso irá criar dois cookies separados enquanto MeuCookie será um único array em seu script. Se você quiser colocar em apenas um cookie vários valores, considere utilizar serialize() ou explode() nos valores primeiro.

Note que um cookie substituirá um anterior com o mesmo nome em seu browser mesmo se o nome ou o caminho for diferente. Então, para uma aplicação de carrinho de compras em que você quer ter um contador e repassá-lo:

Exemplo 7-11. 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 caracter 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 um identificador (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 saber que o PHP automaticamente substituirá qualquer ponto nos nomes de variáveis recebidas com sublinhados.

## Determinando o tipo das variáveis

Porque 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 tem 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.

Anterior | Principal | Próxima
Variáveis variáveis | Acima | Constantes