Uma das dúvidas mais frequentes entre desenvolvedores iniciantes em PHP é como manipular os dados de formulário enviados para os scripts PHP, principalmente dados de "checkbox" e upload de arquivos.
Nesse artigo estaremos vendo como receber e manipular dados de campos comuns de formulários.
Para facilitar, este artigo está divido nos seguintes tópicos:
- Introdução
- Campos Hidden
- Campos Text e Textarea
- Campos Radio
- Campos Checkbox
- Campos Select
Introdução ao Formulário PHP
Um formulário HTML é apenas um "rosto bonito" para onde os usuários poderão inserir informações que serão interpretados de alguma maneira por algum script do lado do servidor. E no nosso caso, esse script é um script PHP.
Primeiro: antes para poder enviar as informações, seu formulário deve conter um botão "submit", isso se consegue através do comando:
<input type=submit value="Texto do Botão">
Segundo: todos os campos que serão tratados no script PHP devem conter o parâmetro "NAME", caso contrário, os dados não serão passados para o script PHP. Ex:
<input type=text name=nome_do_campo>
Como as informações do formulário são passadas para esse script PHP e como as informações do formulário enviado são tratadas, dependem de você.
Existem 2 métodos como as informações podem ser passadas: GET e POST. O recomendável sempre, para todos os formulários é usar o método POST, onde os dados enviados não são visíveis nas URLs, ocultando possíveis importantes informações e permitindo o envio de longas informações. O GET é totalmente o contrário disso.
Como as informações chegam para o script PHP?
Listagem 1: Formulário HTML
<form action="script.php" method="post">
Campo 1: <input type=text name=campo1><br>
Campo 2: <input type=text name=campo2><br>
<input type=submit value="OK">
</form>
Esse formulário usa o método POST para envio das informações, então em "script.php":
Listagem 2: Uso de método POST para envio de formulário
<?php
echo "O valor de CAMPO 1 é: " . $_POST["campo1"];
echo "<br>O valor de CAMPO 2 é: " . $_POST["campo2"];
?>
Se o formulário tivesse sido enviado usando o método GET, você simplesmente usaria $_GET no lugar de $_POST.
Nota: Em vez de usar $_GET ou $_POST você pode escrever a variável com o mesmo nome do campo do formulário (no exemplo, $campo1 e $campo2). Mas, esse uso não é recomendado, pois se a diretiva "register_globals" na configuração do seu PHP estiver desativada, as variáveis com nome dos campos dos formulários, terão um valor vazio.
Uma solução para isso é usar a função import_request_variables no começo dos seus scripts que interpretam formulários. Essa função aceita 3 letras como argumentos: P, G e C, referentes a $_POST, $_GET e $_COOKIE respectivamente. Exemplo de uso:
<?php
import_request_variables("gP");
?>
Exemplo: Você possui formulário com os campos "nome", "endereço" e "idade". Assuma que a diretiva "register_globals" do seu PHP esteja desligada, mas, você já havia programado o script usando as variáveis no escopo global, no lugar de $_POST.
Adicionando aquela função no começo do script, as variáveis do seu formulário postado:
$_POST["nome"], $_POST["endereco"] e $_POST["idade"] serão extraídas cada para uma variável diferente: $nome, $endereco e $idade.
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:
Listagem 3: 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>
Listagem 4: hidden.php
<?php
echo "Campo Hidden: " . $_POST["escondido"];
echo "<br>Oi, seu ID é: " . $_POST["id"];
?>
Campos Text e Textarea
Os campos text e textarea são os tipos mais simples, onde há somente um possível valor por campo. Dispensam maiores explicações.
Códigos Exemplos:
Listagem 5: texts.html
<form action="texts.php" method="post">
Nome: <input type=text name=nome><br>
Email: <input type=text name=email><br><br>
Mensagem: <textarea name=mensagem cols=8 rows=3></textarea><br>
<input type=submit>
</form>
Listagem 6: texts.php
<?php
echo "Olá " . $_POST["nome"] . " (email: " . $_POST["email"] . ")<br><br>";
echo "Sua mensagem: " . $_POST["mensagem"];
?>
Campos Radio
Campos Radio permitem um relacionamento de um para muitos entre identificador e valor, ou seja, eles têm múltiplos possíveis valores, mas somente um pode ser pré-exibido ou selecionado. Por exemplo: você tem um sistema de "quiz".
Cada pergunta possui 5 possíveis respostas. Cada resposta é um radio, onde os 5 radios dessa pergunta possuem o mesmo identificador, mas cada com valores diferentes.
Códigos Exemplos:
Listagem 7: radio.html
<form action="radio.php" method="post">
<B>Qual seu sistema operacional?</B><br>
<input type=radio name=sistema value="Windows 98"> Win 98
<input type=radio name=sistema value="Windows XP"> Win XP
<input type=radio name=sistema value="Linux"> Linux
<input type=radio name=sistema value="Mac"> Mac
<br><br>
<B>Qual a marca de seu monitor?</B><br>
<input type=radio name=monitor value="Samsung"> Samsung
<input type=radio name=monitor value="LG"> LG
<input type=radio name=monitor value="Desconhecido"> Desconhecido
<br><br>
<input type=submit>
</form>
Listagem 8: radio.php
<?php
echo "Seu sistema operacional é: " . $_POST["sistema"];
echo "<br>Seu monitor é: " . $_POST["monitor"];
?>
Campos Checkbox
O tipo Checkbox tem somente um possível valor por entrada: on value (marcado) ou no value (desmarcado). No script você deve fazer a verificação para saber se o campo foi marcado ou não.
Se é possível também utilizar grupos de checkbox com o mesmo nome. Para você deve adicionar "[]" no final do nome, para o PHP interpretar como array, veja o código exemplo.
Códigos Exemplos:
Listagem 9: checkbox.html
<form action="checkbox.php" method="post">
<B>Escolha os numeros de sua preferência:</B><br>
<input type=checkbox name="numeros[]" value=10> 10<br>
<input type=checkbox name="numeros[]" value=100> 100<br>
<input type=checkbox name="numeros[]" value=1000> 1000<br>
<input type=checkbox name="numeros[]" value=10000> 10000<br>
<input type=checkbox name="numeros[]" value=90> 90<br>
<input type=checkbox name="numeros[]" value=50> 50<br>
<input type=checkbox name="numeros[]" value=30> 30<br>
<input type=checkbox name="numeros[]" value=15> 15<br><BR>
<input type=checkbox name="news" value=1> <B>Receber
Newsletter?</B><br><BR>
<input type=submit>
</form>
Listagem 10: checkbox.php
<?php
// Verifica se usuário escolheu algum número
if(isset($_POST["numeros"]))
{
echo "Os números de sua preferência são:<BR>";
// Faz loop pelo array dos numeros
foreach($_POST["numeros"] as $numero)
{
echo "- " . $numero . "<BR>";
}
}
else
{
echo "Você não escolheu número preferido!<br>";
}
// Verifica se usuário quer receber newsletter
if(isset($_POST["news"]))
{
echo "Você deseja receber as novidades por email!";
}
else
{
echo "Você não quer receber novidades por email...";
}
?>
Campos Select
Os campos select permitem tratar uma variedade de opções, onde o usuário pode selecionar apenas uma opção ou múltiplas opções. Quando você permite múltiplas seleções, deve adicionar "[]" no final do nome, para o PHP interpretar como array.
Nos exemplos, mostro o funcionamento e tratamento de ambas.
Códigos Exemplos:
Listagem 11: select.html
<form action="select.php" method="post">
<B>Qual seu processador?</B><br>
<select name=processador>
<option value=Pentium>Pentium</option>
<option value=AMD>AMD</option>
<option value=Celeron>Celeron</option>
</select><BR><BR>
<B>Livros que deseja comprar?</B><br>
Obs: segure "CTRL" para selecionar mais de um.<BR>
<select name="livros[]" multiple>
<option value="Biblia do PHP 4">Biblia do PHP 4</option>
<option value="PHP Professional">PHP Professional</option>
<option value="Iniciando em PHP">Iniciando em PHP</option>
<option value="Novidades do PHP 5">Novidades do PHP 5</option>
<option value="Biblia do MySQL">Biblia do MySQL</option>
</select><BR><BR>
<input type=submit>
</form>
Listagem 12: select.php
<?php
echo "Seu processador é: " . $_POST["processador"] . "<BR>";
// Verifica se usuário escolheu algum livro
if(isset($_POST["livros"]))
{
echo "O(s) livro(s) que você deseja comprar:<br>";
// Faz loop para os livros
foreach($_POST["livros"] as $livro)
{
echo "- " . $livro . "<br>";
}
}
else
{
echo "Você não escolheu nenhum livro!";
}
?>
A manipulação de dados de formulários é uma das coisas mais importantes que todo desenvolvedor deve saber, pois normalmente é por meio dela que existe a comunicação de aplicação x banco de dados.
Espero que tenham entendido a fazer essa manipulação na linguagem PHP, qualquer dúvida, fiquem a vontade em usar os comentários abaixo, até o próximo.