Processar variáveis de formulários
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
| 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.
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)
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 !
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
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
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.