Formulários

Um formulário é usado para criar uma interface para o usuário selecionar opções e submeter os dados de volta para o navegador da Web. Uma página contendo o formulário não precisa, necessariamente, ser uma página PHP. Não precisa nem mesmo estar no mesmo site que recebe seus dados para processamento.

1. Tags <FORM>… </FORM>

Criam um formulário que permite reunir controles para a entrada do usuário, os atributos mais importantes são:

1.1. action:  é o script ou página para onde os dados serão submetidos. Neste script que normalmente os dados são tratados.

1.2. method: é o método de envio dos dados. Pode ter dois valores:

1.2.1. get: passa os valores pela URL, ou seja, podemos ver as variáveis passadas na Url da página destino definida no campo action. Não é muito aconselhável o uso do método GET, pois ele expõe o nome e valor das variáveis, o que torna vunerável a segurança dos datos, são usadas normalmente para pesquisa a um banco de dados.

1.2.2. post: os dados são enviados em forma de um bloco de dados via um mecanismo denominado STDIN (Standard Input). Usado, por exemplo, para atualização de registro em um banco de dados ou para o envio de um email.

Podemos inserir vários tipos de entrada de dados em um formulário, a maioria delas definida pela tag input.
Todo elemento possui um parâmetro name que é utilizado para identificar a variável onde o dado está contido no script destino.

1.3. Comando da tag <form>

ComandosFunçõesValores
name
Atribui um nome ao campo. É muito importante a utilização deste comando, pois é através deste nome atribuído a cada campo, que poderemos capturar os dados e manipulá-los.Qualquer nome que não inicie com símbolos ou números, e que não contenha caracteres especiais (ç), nem acentos ou espaços.
value
Atribui um valor predefinido ao campo.Qualquer tipo de valor. Por exemplo, frases, números entre outros.
maxlength
Determina um valor máximo de caracteres que um campo irá suportar.Números inteiros maiores que zero.
size
Determina o tamanho do campo em caracteres.Números inteiros maiores que zero.
rows
Determina a quantidade de linhas em uma área de texto.Números inteiros maiores que zero.
cols
Determina a quantidade de colunas em uma área de texto.Números inteiros maiores que zero.
disabled
Desabilita um campo ou área de texto, impossibilitando ao usuário inserir dados.Valor disabled, em português desativado.
checked
Este comando é aplicável a caixas de seleção e a botões do tipo rádio, e quando for aplicado, a opção já aparece selecionada.Valor checked, em português verificado/marcado/selecionado.
type
Define o tipo do campo ou elemento do formulário.button (botão), checkbox (caixa de seleção), file (campo para a seleção de arquivos no PC), password (campo de senha), radio (botão radio), reset (botão que limpa o formulário), submit (botão que envia o formulário), text (campo de texto).


2. Tipos de elementos inseridos entre as tags <form> e </form>

<input> - Insere um campo para introduzir dados;
<textarea> - Define uma área de texto (permite inserir texto com várias linhas e um número ilimitado de caracteres);
<label> - Define um nome para um elemento;
<fieldset> - Agrupa elementos num formulário ;
<legend> - Define uma legenda para um grupo de elementos do formulário;
<select> - Define uma lista com várias opções selecionáveis;
<optgroup> - Define um grupo de opções;
<option> - Insere mais uma opção em uma lista com várias opções selecionáveis;
<button> - Define um botão que pode ser pressionado;
<isindex> - Em desuso. Utilize <input> com o atributo type="button".


3. Elemento <input>: o próprio nome já explica o seu conceito, ou seja, entrada de dados.

3.1. Campo Texto

Campo para entrada de texto comum.
Declaração:


<input type="text" size"30" maxlength="50" name=" " value=" ">


Parâmetro
s
ize: o tamanho do elemento em caracteres na página Html (que será exibido na tela).
maxlength
: é o tamanho máximo do texto que pode ser inserido no elemento.
value
: é utilizado quando há necessidade de se pré-definir um valor para o elemento. Este valor pode ser normalmente alterado pelo usuário.

Exemplo:

<form>

<label>Nome:</label>

<input type="text" size"50" maxlength="50" name=" " value=" ">

</form>

Resultado:


Campo Senha

Tipo de campo idêntico ao anterior, mas quando o usuário digita, os caracteres são substituídos por “*”.
Obs.: O campo senha não possui nenhum tipo de criptografia, apenas coloca uma mascar no texto inserido.
Declaração:

<input type="password" size="30" maxlength="50" name=" " value=" ">

Parâmetro
s
ize: o tamanho do elemento em caracteres na página Html (que será exibido na tela).
maxlength
: é o tamanho máximo do texto que pode ser inserido no elemento.
value
: é utilizado quando há necessidade de se pré-definir um valor para o elemento. Este valor pode ser normalmente alterado pelo usuário.

Exemplo:

<form>

<label>Senha:</label>

<input type="password" size="30" maxlength="50" name=" " value=" ">

</form>

Resultado:


3.2. Botão Rádio (Radio button)

Utilizado para entradas de múltipla escolha onde o usuário só pode escolher uma única opção.
Para que o interpretador saiba que as opções fazem parte do mesmo grupo, e permita que só uma seja selecionada, basta colocar o mesmo nome no parâmetro name dos botões rádio.
Declaração:

<input type="radio" size="30" maxlength="50" name=" " value="checked">

Parâmetro

Checked:
se for declarado o elemento terá seu estado inicial como selecionado.
Value
: é o valor que será passado à página destino quando o formulário é submetido se este elemento estiver selecionado.

Exemplo:

<form>

<label>Acima de 18 anos:</label>

<input type="radio" size="30" maxlength="50" name=" " value="checked"><br>

<label>Casado:</label>

<input type="radio" size="30" maxlength="50" name=" " value="checked">

</form>

Resultado:


Obs: foi utilizado a tag <br> para pular para a próxima linha, diferentemente dos exemplos anteiores que tinha penas uma linha; os textos em html são escrito na mesma linha, para mudar de linha utiliza-se por exemplo o parágrafo <p> ou o breack <br>.

3.3. Botão de Checagem (CheckBox)


Utilizado para entradas de múltipla escolha onde o usuário pode escolher várias opções.
Cada opção deve ter um nome independente.
Declaração:

<input type="checkbox"  name=" " value=" checked">

Parâmetro

Checked – Se for declarado o elemento terá seu estado inicial como marcado.
Value
: é o valor que será passado à página destino quando o formulário é submetido se este elemento estiver marcado.

Exemplo:

<form>

<label>Acima de 18 anos:</label>

<input type="checkbox"  name=" " value=" checked"><br>

<label>Casado:</label>

<input type="checkbox"  name=" " value=" checked">

</form>

Resultado:



3.4. Botão Submeter (Submit)

Botão que submete o formulário a pagina destino especificada no parâmetro action do form.
Declaração:

<input type="submit"  name=" " value=" " >

Parâmetro

Checked – Se for declarado o elemento terá seu estado inicial como marcado.
Value – O texto que aparecerá no Botão.

3.5. Botão Reset

Volta todos os campos do formulário para os valores iniciais, ou seja, os valores especificados nos parâmetros value de cada um dos campos.
Declaração:

<input type="reset"  name=" " value=" " >

Parâmetro

Checked – Se for declarado o elemento terá seu estado inicial como marcado.
Value – O texto que aparecerá no Botão.

3.6. Botão


Utilizado para chamar funções que rodam no browser (Javascript).
Declaração:

<input type="button"  name=" " value=" " >

Parâmetro

Checked – Se for declarado o elemento terá seu estado inicial como marcado.
Value – O texto que aparecerá no Botão.

4. Select

Utilizado para selecionar uma ou mais opções de uma lista predefinida.
Declaração:

<select name=" " size=" 30"  value="" multiple>
  
   <option value="">texto da opção</option> </select>
</select>

Parâmetro

Multiple – Se existir, permite que sejam selecionadas múltiplas opções através das teclas Ctrl ou Shift.
Size –
Número de opções exibidas por vez na tela. Se o size estiver setado para “1” que é o default e não existir o parâmetro multiple, o elemento é exibido como um Combo Box. Caso contrário é exibido como um Select List.Option – cada subtag option adiciona uma opção ao elemento.
Value – O value de cada option é o valor passado caso aquela opção seja selecionada.
Obs.: O texto da opção deve ser especificado entre as tags <option> e </option>

Exemplo:

<form>

<label>Escolha uma opção:</label><br>

<select name=" " size="2"  value="" multiple>

<option value="">Opção um</option> 

<option value="">Opção dois</option>

<option value="">Opção três</option>

</select>

</form>

Resultado:


 


5. Área de Texto

Permite a entrada de um texto no estilo Memo, com várias linhas.
Declaração:

<textarea cols="" row="">texto</textarea>
 
Parâmetro

Cols – Número e caracteres por linha.
Rows –
Número de linhas do campo.
Obs.: não existe o parâmetro value, o texto inicial deve ser definido entre as tags <textarea> e </textarea>.

Exemplo:

<form>

<label>Mensagem:</label><br>

<textarea cols="20" row="5">texto</textarea>

</form>


Resultado:




Alguns exemplos mais completos:

Os forms submetem os dados à um script ou página especificada no parâmetro ACTION. Este script ou página pode ser ou não o mesmo onde o form está contido.

No script destino, são criadas automaticamente variáveis com os mesmos nomes dos elementos do form, contendo o valor submetido. 

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 ativada, porém como se verá, a variável $_POST["  "] possibilita acessar variáveis de outro arquivo sem a necessidade da habilitação da diretiva register_globals.

Quando ligada, a diretiva register_globals criará para seus scripts vários tipos de variáveis, como as variáveis oriundas de formulários HTML. Isso, combinado com o fato de que o PHP não requer inicialização de variáveis, isto significa que é mais fácil escrever código inseguro. A comunidade do PHP decidiu que, por padrão, essa diretiva deveria ser desabilitada. Quando habilitada, é possível usar variáveis sem saber ao certo de onde elas vieram. Variáveis internas que são definidas no script em si se misturam com dados enviados pelos usuários, se desabilitar aessa  diretiva as coisas mudam. A partir da versão 5.3, esta diretiva é considerada obsoleta e a partir da versão 5.4 ela não está mais presente.

Habilitar/Desabilitando pelo php.ini

Para desabilitar a register_globals pelo arquivo php.ini, localize o arquivo de configuração do php (php.ini) e edite a linha:

register_globals = On

para:

register_globals = Off

Habilitando/Desabilitando pelo arquivo .htacess

Se você não tem acesso ao arquivo de configurações do PHP, você pode desabilitar a diretiva pelo arquivo .htaccess. Para isto, crie um arquivo .htaccess na pasta raiz do seu servidor web e adicione a seguinte linha ao arquivo:

php_flag register_globals Off

Ativação da variável global no Wamp:

Dê um clique no ícone > clique em PHP > clique em settings > clique em register globals

Exemplo 1:

<html>
<head>
<title>Primeiro Formulário Completo></title>
<body>
<form action="formulario-dois.php" method="post">
Nome:<input type="text" name="nome"><br>
<input type="checkbox"  name="read" value="sim">Eu li o tutorial por inteiro.<br>
Qual a nota que você dá para este tutorial?
<select  name=" " size="2"  value="" multiple>
<option value="0">Nota 0</option>
<option value="1">Nota 1</option>
<option value="2">Nota 2</option>
<option value="3">Nota 3</option>
<option value="4">Nota 4</option>
</select>
<input type="submit" value="entra">
</form>
</body>
</html>

Resultado:

Nome:
Eu li o tutorial por inteiro.
Qual a nota que você dá para este tutorial?


 6. Variável global

Se a diretiva "register_globals" na configuração do seu PHP não estiver ativada, as variáveis não conseguirão ser acessadas com apenas $nome (sifrão + nome do campo), ficará em branco o resultado.

Exemplo 2 ( com register_globals = On), arquivo de nome: formulario-dois.php

<html>
<head>
<title>Primeiro Formulário Completo></title>
<body>
<form action="formulario-resposta-dois.php" method="post">
Nome:<input type="text" name="nome"><br>
<input type="checkbox"  name="read" value="sim">Eu li o tutorial por inteiro.<br>
Qual a nota que você dá para este tutorial?
<select  name="nota" size="1">
<option value="0">Nota 0</option>
<option value="1">Nota 1</option>
<option value="2">Nota 2</option>
<option value="3">Nota 3</option>
<option value="4">Nota 4</option>
</select>
<input type="submit" value="entra">
</form>
</body>

</html>

Obs: com register_globals = Off, o código acima gerará o erro: Notice: Undefined variable: nome in C:\wamp\www...

Arquivo de nome: formulario-reposta-dois.php

<html>
<head>
 <title>Formulário</title>
</head>
<body>
<p align="center"><font size="+1">Resultado</font></p>
 <br>
Usuário:<?php echo ($nome) ;?> <br>
Leu o Tutorial:
<?php if ($read=="sim")
{
echo "Sim";
}
else
{
echo "Não";
}
?>
<br>
Nota:<?php echo( $nota);?>
</body>
</html>

Clique no link abaixo para ver o resultado (só funcionará com register_globals = On)

formulario-dois.php

Comentário:

Não é aconselhável a ativação da variável global, pois tornará o código mais vunerável, facilita a programação, porém compromete a segurança das informações que terão o acesso livre, para isso utilize o método $_POST["nome-campo"] para chamar a variável. Assim como na linguagem Java e C, o uso de variável global deve ser evitado.

Uma outra solução para evitar ativação global é importar as variáveis GET/POST/Cookie para o escopo global usando a função import_request_variables no começo dos scripts que interpretam formulários. Essa função aceita três letras como argumentos: P, G e C, (não é case sensitive) referentes a $_POST, $_GET e $_COOKIE respectivamente. Exemplo de uso:

import_request_variables ("p")

Note que a ordem das letras, como usando "gp", a variável POST irá sobreescrever variáveis GET com mesmo nome. Algumas outras letras como GPC são descartadas.

Exemplo:

<?php
import_request_variables("gP");
?>

Obs: Como cada script terá que fazer sua importação, não é conveniente ficar usando essa técnica em código que usa uma script para cada campo, pois tornaria repetitivo, script curto é mais aconselhavel o uso da variável $_POST["  "].

O próximo exemplo usará a variável $_POST["  "] para acessar a variável que se encontra em outro arquivo, sem a  necessidade de habilitar a diretiva register_globals.

Exemplo 3 ( com register_globals = Off), arquivo de nome: formulario-tres.php

<html>
<head>
<title>Primeiro Formulário Completo></title>
<body>
<form action="formulario-resposta-tres.php" method="post">
Nome:<input type="text" name="nome"><br>
<input type="checkbox"  name="read" value="sim">Eu li o tutorial por inteiro.<br>
Qual a nota que você dá para este tutorial?
<select  name="nota" size="1">
<option value="0">Nota 0</option>
<option value="1">Nota 1</option>
<option value="2">Nota 2</option>
<option value="3">Nota 3</option>
<option value="4">Nota 4</option>
</select>
<input type="submit" value="entra">
</form>
</body>
</html>

Arquivo de nome: formulario-reposta-tres.php

<html>
<head>
 <title>Formulário</title>
</head>
<body>
<p align="center"><font size="+1">Resultado</font></p>
 <br>
Usuário:<?php echo $_POST["nome"] ;?> <br>
Leu o Tutorial:
<?php if ($_POST["read"]=="sim")
{
echo "Sim";
}
else
{
echo "Não";
}
?>
<br>
Nota:<?php echo $_POST["nota"];?>
</body>
</html>

Clique no link abaixo para ver o resultado (com register_globals = Off)

formulario-tres.php

Obs: com o uso da variável $_POST["  "] o código independe da diretiva register_globals.

Se você está interessado em importar outras variáveis para o escopo global, como uma SERVER, utilize a função extract()


Campos Hidden

Os campos hidden são usados para passar informações que não podem ser alteradas pelo usuário que estará inserindo informações no formulário. Por exemplo: você tem um site com sistema de login e o usuário quer alterar as informações de login dele. O script que irá manipular esse formulário, precisa saber o ID do usuário para poder alterar as informações no banco de dados, então esse ID é um campo hidden.

Códigos Exemplos:

hidden.html


<form action="hidden.php" method="post">
<input type=hidden name=escondido value="valor do escondido">
<input type=hidden name=id value="111">
<input type=submit>
</form>

hidden.php

<?php
echo "Campo Hidden: " . $_POST["escondido"];
echo "<br>Oi, seu ID é: " . $_POST["id"];
?>

7. Concatenação em PHP

7.1.  Usando: . (ponto) 

$str1a = "Ola "; // repare que há um espaço no final da string, para que as palavras não fiquem juntas na concatenação.
$str1b = "Mundo";
$texto = $str1a.$str1b;
echo $texto;

Resultado: Ola Mundo

7.2.  Usando: Variáveis dentro da string ("...")

$str1a = "Ola";
$str1b = "Mundo";
 
echo "$str1a $str1b";

Resultado: Ola Mundo

7.3. Múltiplas Linhas

echo "Frases muito extensas " .
         "podem ser quebradas! ".
         "Olha que legal!";

Resultado: Frases muito extensas podem ser quebradas! Olha que legal!

7.4 Múltiplas Linhas

echo "Frases muito extensas
         podem ser quebradas!
         Olha que legal!";

Resultado: Frases muito extensas podem ser quebradas! Olha que legal!

7.5. Usando .= "Atribuição com concatenação"

$str5 = "Frutas:";
$str5 .="Laranja, ";
$str5 .= "Limão. ";

echo $str5;
        
Resultado: Frutas: Laranja, Limão.

7.6. Uso de chaves { } para incluir variável dentro do texto.

$str6 = "lele";

echo "Variáveis dentro do texto: para{$str6}pipedo";
        
Resultado: Variáveis dentro do texto: paralelepipedo.

7.7. Uso de chaves { } para incluir variável dentro do texto.

$str6 = "lele";

echo "Variáveis dentro do texto: para{$str6}pipedo";
        
Resultado: Variáveis dentro do texto: paralelepipedo.

Observações

Note que foi utilizado” aspas para criar as strings. No PHP também é possível utilizar ‘ apóstrofo, mas não funcionaria a concatenação com variáveis dentro da string.

8. Obter Dados de Formulário
Dentre os aspectos mais importantes de linguagens de programação web dinâmicas como PHP, é a possibilidade de obter dados de formulários HTML.
Existem duas formas principais de obter dados de um formulário que irão depender da forma como o formulário é submetido.
Os valores dos formulários são armazenados e acessados por variáveis de coleção.

8.1. $_GET
Formulários enviados pelo método get, passam o valor de suas variáveis pela URL dinâmica ou parâmetros de URL.
Esses valores são acessados pela variável de coleção $_GET.
Os nomes das variáveis servem de chave para a coleção. Veja o exemplo abaixo:

Se, por exemplo, tivermos uma URL da seguinte maneira.

http://forum.tiexpert.net/viewtopic.php?f=15&t=5
Nós teremos duas variáveis:

f = 15 e t = 5.

Dessa forma, podemos utilizar o nome das variáveis para acessar esses valores. Assim:

<?php
echo("A 1a. variável vale " . $_GET['f']);
echo(" e a 2a. vale " . $_GET['t']);
?>

8.2. $_POST
Formulários enviados pelo método post, passam suas variáveis codificadas dentro da própria submissão, ou seja, as variáveis não são visíveis ao usuário, apenas o servidor e o browser conhecem tais informações.

Exemplo:
<FORM NAME="form1" METHOD="post" ACTION="pagina.php">
Campo 1:
<INPUT TYPE="text" NAME="campo1">
<BR>
Campo 2:
<TEXTAREA NAME="campo2"></TEXTAREA>
<BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>

Podemos obter o valor das variáveis usando os nomes dos elementos do formulário como campos input, select e textarea. Portanto, se tivermos um formulário como no exemplo acima, usariamos os nomes dos atributos NAME como chave de nossa coleção $_POST

Exemplo:
<?php
echo("A 1a. variável é " . $_POST['campo1']);
echo(" e a 2a. é " . $_POST['campo2']);
?>

8.3. $_REQUEST
$_REQUEST é uma variável de coleção genérica, isso quer dizer que, não há diferença se o valor passado pelo formulário foi pelo método post ou pelo método get.
Isso acontece porque  $_REQUEST verifica todas as entradas de dados em uma ordem específica determinada pela variável variables_order no arquivo de configuração php.ini.
Geralmente, a busca pelo valor de uma chave é feita na seguinte ordem:

Variáveis de URL (get) - Variáveis de formulário (post) - Variáveis de Cookies - Variáveis de Sessão
Mas, como dito anteriormente, isso pode ser alterado.
Vale a pena ressaltar que uma chave sobrescreve a outra. Ou seja, se tivermos um formulário da seguinte maneira:

Exemplo:
<FORM NAME="form1" METHOD="post" ACTION="pagina.php?v=12345">
<INPUT TYPE="text" NAME="v" VALUE="TI Expert">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>

E usamos echo() para visualizar o valor da variável v.

<?php
echo($_REQUEST['v']);
?>

O valor apresentado não será 12345, e sim, TI Expert.