Obtendo valores dos formulários com PHP

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

Publicado em

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>

 

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção

Todos os nossos cursos em promoção

Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção