Processar variáveis de formulários

Veremos como transferir variáveis de uma página a outra através de formulários.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 21/7/04

Valorize este artigo:
Este tipo de transferência é de uma grande utilidade pois permite-nos interagir directamente com o usuário.

Este processo é similar ao explicado para as URLs. Em primeiro lugar, apresentamos uma primeira página com o formulário clássico para preencher e as variáveis são recolhidas numa segunda página que as processa:

Nota: Nem sempre se definem automaticamente as variáveis recebidas por parâmetro nas páginas web, depende de uma variável de configuração de PHP: register_globals, que tem de estar activada para que assim seja. Ver comentários do artigo ao final da página para mais informação.

<HTML>
<HEAD>
<TITLE>formulario.html</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="destino2.php">
Nome<br>
<INPUT TYPE="TEXT" NAME="nome"><br>
Apelidos<br>
<INPUT TYPE="TEXT" NAME="apelidos"><br>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>

<HTML>
<HEAD>
<TITLE>destino2.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variável \$nome: $nome <br>\n";
echo "Variável \$apelidos: $apelidos <br>\n"
?>
</BODY>
</HTML>


Executar exemplo

$_POST

Relembramos que é possível compilar numa só variável tipo array o conjunto de variáveis que foram enviadas ao script por este método a partir da variável de sistema $_POST:

echo "Variável \$nome: " . $_POST["nome"] . "<br>\n";

Nota: Ainda que possamos recolher variáveis com este array associativo ou utilizar diretamente as variáveis que se definem na nossa página, torna-se mais seguro utilizar $_POST por duas razões, a primeira é que assim temos a certeza que essa variável vem realmente de um formulário e a segunda, que assim o nosso código será menos confuso quando queiramos lê-lo, porque ficará especificado que estamos a receber essa variável através de um formulário.

Exemplo de restrição de acesso por idade

Para continuar com exemplos de uso de formulários vamos realizar uma página que mostra e solicita a idade do visitante e, dependendo da sua idade, permite ou não visualizar o conteúdo da web. A maiores de 18 anos é-lhes permitido ver a página e a menores não.

O exemplo é muito simples e não seria correcto para utilizá-lo tal e qual a modo de uma verdadeira barreira de acesso. Só nos serve para saber como obter dados de um formulário e como tratá-los para realizar uma ou outra acção, dependendo do seu valor.

A página do formulário, à qual demos o nome idade.php, teria o seguinte aspecto:

<html>
<head>
   <title>Restringir por idade</title>
</head>

<body>

<form action="idade2.php" method="post">
Escreve a tua idade: <input type="text" name="idade" size="2">
<input type="submit" value="Entrar">
</form>

</body>
</html>


Esta é uma página sem nenhum código PHP, simplesmente tem um formulário. Se repararmos no action do formulário, que está dirigido a uma página chamada idade2.php, que é a que receberá o valor da idade e mostrará um conteúdo ou outro dependendo desse valor. O seu código seria o seguinte:

<html>
<head>
   <title>Restringir por idade</title>
</head>

<body>

<?
$idade = $_POST["idade"];
echo "Tua idade: $idade<p>";

if ($idade < 18) {
   echo "Não podes entrar";
}else{
   echo "Bemvindo";
}
?>
</body>
</html>


Esperamos que este outro código também não seja estranho. Simplesmente o formulário recebe a idade, utilizando o array $_POST. A seguir, mostra-se a idade e executa-se uma expressão condicional em função de que a idade seja menor que 18. Em caso positivo (idade menor que 18), mostra-se uma mensagem que informa que não se pode aceder à página. Em caso negativo (maior ou igual a 18) mostra-se uma mensagem de Boas-vindas.

Podemos ver o exemplo em funcionamento.





Comentários do artigo
Foram enviados 10 comentários ao artigo
4 comentários não revisados
6 comentários revisados:
Por: jorge rodrigues
22/8/05
o exemplo não funciona muito bem no meu computador, a idade não passa.
Existe um comentario dizendo que tem de se activar o register_globals mas não explica como.
Por:
07/10/05
O seu o register_globals deve ser ativado no php.ini que deve estar normalmente na pasta C:/php

Abra com o bloco de notas(não mexa em mais nada)

busque por ele em localizar

Deve estar assim:
register_globals = Off (muda pra On)
ou
;register_globals = On (tira o ; do inicio e salva)
Por: villas
07/10/05
o seu
register_globals deve estar desabilitado.

ele se encontra normalmente em C:php

Abra com bloco de notas e localize-o

deve estar assim:
register_globals = Off (muda pra On)

ou

;register_globals = On (retire o ; do inicio)

Salve e teste pra ver se rolou !


Por: DIOGENES
24/4/06
ola ... eu retirei o off do register_global do php.ini.. mas quando eu coloco este comando...( $NOME = $_POST["NOME"]) ele fala : UNDEFINED INDEX NOME... o que sera que é isso ja to tentando ver isso a um bom tempo e isso esta me atrasando pq pretende fazer um sistema na internet em PHP...gostaria de se alguem puder me ajudar eu libero o SINAL DO MEY VCN OU DO PCANYWHERE.....POIS ESTOU PRECISANDO MUITO.

OBRIGADO

DIOGENES HENRIQUE
Por: José Nilton
30/12/06
Olá!
Estou quebrando a cabeça para obter sucesso no que diz respeito a formulários, mas até agora nada. Ocorre que, ao enviar os dados de um formulário html para uma página correspondente em php, não aparece nada.
O código em php é:
<html>
<head>
<title>Resultado de cadastro</title></head>
<body>
<?php
$nome=$_POST["nome"];
echo "Nome: $nome";
?>
</body>
</html>
Configurei o register_globals para On.
O que será que deve estar ocorrendo?
Obrigado pela valiosa ajuda!
José Nilton
Por: netto
27/1/07
Ae galera, na minha máquina esse exemplo não tá indo não; estou usando o easyphp e já habilitei a variável register_globals e ainda persiste o erro(quando enviamos as variaveis do formulário abre-se uma janela de download como se tivesse para baixar um arquivo). Preciso de uma força. Obrigado.

Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Buscar projetos:

Home | Sobre nós | Copyright | Anuncie | Entrar em contato