De certa forma todas as aplicações WEB possuem algum tipo de formulário, seja ele requisitado por AJAX ou feito uma simples submissão. O fato é que existem várias formas de se recuperar valores dos formulários e envia-los para um banco de dados.
O PHP conta com a função $_POST[], que está presente desde a versão 4.1.0 que retorna um Array Associativo, esta função utilizada por muitos desenvolvedores, então se você imaginou que não vamos utiliza-la, acertou! Embora seja a função mais utilizada para recuperar dados, os próprios desenvolvedores do PHP informaram que ela possibilita a passagem de valores maliciosos que comprometem a integridade de nossa aplicação.
Código 01:
<?php
$nome = $_POST["txtNome"]; //Recupera o valor e atribui a variável
echo $nome;
?>
Existem outras diretivas que também utilizam o $_, que é o $_SESSION, $_GET, $_COOKIE entre outros.
Vamos utilizar a função filter_input(), ela assume três valores como parâmetro , que são:
1° - Tipo de requisição, GET, POST ou outros (INPUT_POST, INPUT_GET);
2° - Qual campos do formulário que desejamos filtrar.
3 ° - Qual será o filtro, onde podemos definir se vai retornar um inteiro, float, string entre outros.
Código 02:
<?php
$nome = filter_input(INPUT_POST, "txtNome", FILTER_SANITIZE_STRING); //Recupera o valor e atribui a variável
echo $nome;
?>
Para este artigo, vamos utilizar o formulário apresentado logo abaixo, note que o mesmo possui dois campos de texto e um botão de Submit.
Código 03:
<!doctype html>
<html lang="pt-br">
<head>
<title>Obtendo valores</title>
<meta charset="UTF-8" />
<style>
ul{
list-style: none;
}
.text{
font-weight: bold;
font-family: Segoe UI;
}
.breakLine{
margin-bottom:6px;
}
</style>
</head>
<body>
<form method="post">
<ul>
<li class="text">Nome</li>
<li class="breakLine"><input type="text" name="txtNome" placeholder="Juanice" /></li>
<li class="text">E-mail</li>
<li class="breakLine"><input type="text" name="txtEmail" placeholder="juanice_89@msn.com" /></li>
<li class="text"></li>
<li><input type="submit" name="btnSubmit" value="Cadastrar" /></li>
</ul>
</form>
</body>
</html>
A função filter_input retorna o valor no formato especificado, mas caso o campo não exista ou não seja possível acessa-lo, é retornado um valor nulo (null).
Devemos verificar se o botão foi clicado, e só posteriormente recuperar os valores advindos do formulário, então note o exemplo abaixo, onde fazemos um teste para verificar se o botão foi clicado.
Código 04:
<?php
$btn = filter_input(INPUT_POST, "btnSubmit", FILTER_SANITIZE_STRING);
if($btn){
echo "Clicou";
}
?>
Para recuperemos os valores dos formulários, devemos fazer a mesma coisa que foi feita no botão, porém para deixar mais elegante e organizado, vamos fazer algumas verificações, pois caso um valor não seja detectado, exiba uma mensagem para o usuário.
No código a seguir foi utilizado o parâmetro FILTER_VALIDATE_EMAIL, na qual valida se o valor informado é um valor válido, é impossível saber se o e-mail é valido, pois tendo o valor “@” e”.” Os validadores já atribuem como um e-mail válido.
Código 05:
<?php
$btn = filter_input(INPUT_POST, "btnSubmit", FILTER_SANITIZE_STRING);
$result = "";
if($btn){
$nome = filter_input(INPUT_POST, "txtNome", FILTER_SANITIZE_STRING);
if($nome){
$email = filter_input(INPUT_POST, "txtEmail", FILTER_VALIDATE_EMAIL);
if($email){
$result = "Nome usuário: {$nome}, e-mail: {$email}";
}else{
$result = "E-mail inválido";
}
}else{
$result = "Nome inválido ";
}
}
?>
Basicamente é isto, não há dificuldades muito menos é um bicho de sete cabeças, recuperar valores dos formulários sempre foi e sempre será algo bem simples. Recomendo a leitura dos links abaixo para conhecer ainda mais a função.
Manual PHP filter_input() - http://php.net/manual/pt_BR/function.filter-input.php
Manual W3C filter_input() - http://www.w3schools.com/php/func_filter_input.asp
Tipos de filtros: http://www.w3schools.com/php/php_ref_filter.asp
Até a próxima e fiquem com o código completo.
Código 06:
<?php
$btn = filter_input(INPUT_POST, "btnSubmit", FILTER_SANITIZE_STRING);
$result = "";
if($btn){
$nome = filter_input(INPUT_POST, "txtNome", FILTER_SANITIZE_STRING);
if($nome){
$email = filter_input(INPUT_POST, "txtEmail", FILTER_VALIDATE_EMAIL);
if($email){
$result = "Nome usuário: {$nome}, e-mail: {$email}";
}else{
$result = "E-mail inválido";
}
}else{
$result = "Nome inválido ";
}
}
?>
<!doctype html>
<html lang="pt-br">
<head>
<title>Obtendo valores</title>
<meta charset="UTF-8" />
<style>
ul{
list-style: none;
}
.text{
font-weight: bold;
font-family: Segoe UI;
}
.breakLine{
margin-bottom:6px;
}
</style>
</head>
<body>
<form method="post">
<ul>
<li class="text">Nome</li>
<li class="breakLine"><input type="text" name="txtNome" placeholder="Juanice" /></li>
<li class="text">E-mail</li>
<li class="breakLine"><input type="text" name="txtEmail" placeholder="juanice_89@msn.com" /></li>
<li class="text"> <?=$result;?></li>
<li><input type="submit" name="btnSubmit" value="Cadastrar" /></li>
</ul>
</form>
</body>
</html>