Obtendo valores dos formulários com PHP

Neste artigo mostro de forma correta, como recuperar valores de formulários HTML tratando o valor recebido.

Simplificando o desenvolvimento de APIs PHP com Swagger

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">&nbsp;<?=$result;?></li>
				<li><input type="submit" name="btnSubmit" value="Cadastrar" /></li>				
			</ul>
		</form>
	</body>
</html>