Resumo : neste tutorial, você aprenderá sobre validação de formulário PHP, como validar dados de formulário e como mostrar mensagens de erro se as entradas do usuário forem inválidas.
Introdução à validação de formulário PHP
Ao processar um formulário, é fundamental validar as entradas do usuário para garantir que os dados estejam em um formato válido.
Existem dois tipos de validações: do lado do cliente e do lado do servidor:
A validação do lado do cliente é realizada nos navegadores dos usuários. Para validar dados no lado do cliente, você pode usar validação HTML5 ou JavaScript . A validação do lado do cliente visa auxiliar usuários legítimos a inserir dados no formato válido antes de enviá-los ao servidor.
No entanto, a validação do lado do cliente não impede que usuários mal-intencionados enviem dados que possam explorar o aplicativo.
A validação do lado do servidor valida os dados no servidor web usando PHP. Para validar dados em PHP, você pode usar as funções filter_var()
e filter_input()
.
Exemplo de validação de formulário PHP
Criaremos um formulário de inscrição por e-mail que inclui um recurso de validação. O formulário possui os elementos de entrada nome e e-mail e um botão de envio:
Se você não inserir o nome e/ou e-mail e clicar no botão inscrever-se, o formulário mostrará as mensagens de erro. Além disso, se você inserir um endereço de e-mail inválido, o formulário mostrará uma mensagem de erro diferente.
Observe que não usamos a validação do lado do cliente neste formulário para facilitar o teste. Na prática, você também deve usar a validação do lado do cliente.
Organize o diretório e os arquivos
Primeiro, crie uma estrutura de arquivos e diretórios da seguinte forma:
.
├── css
│ └── style.css
├── inc
│ ├── get.php
│ ├── post.php
│ ├── header.php
│ ├── footer.php
│ └── .htaccess
└── index.php
Linguagem de código: texto simples ( texto simples )
A tabela a seguir descreve a finalidade de cada arquivo:
Arquivo | Diretório | Descrição |
---|---|---|
index.php | . | Contém a lógica principal do formulário |
cabeçalho.php | Inc. | Contém o código do cabeçalho |
rodapé.php | Inc. | Contém o código do rodapé |
obter.php | Inc. | Contém o formulário de inscrição por e-mail |
post.php | Inc. | Contém o código para lidar com o envio do formulário |
estilo.css | css | Contém o código CSS |
cabeçalho.php
O seguinte mostra o header.php
arquivo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/style.css">
<title>Subscribe</title>
</head>
<body>
<main>
Linguagem de código: HTML, XML ( xml )
O header.php
link do arquivo para o style.css
arquivo no css
diretório.
rodapé.php
E footer.php
contém apenas as tags envolventes que correspondem às tags de abertura no header.php
arquivo:
</main>
</body>
</html>
Linguagem de código: HTML, XML ( xml )
index.php
O index.php
arquivo contém a lógica principal do formulário:
<?php
require __DIR__ . '/inc/header.php';
$errors = [];
$inputs = [];
$request_method = strtoupper($_SERVER['REQUEST_METHOD']);
if ($request_method === 'GET') {
// show the form
require __DIR__ . '/inc/get.php';
} elseif ($request_method === 'POST') {
// handle the form submission
require __DIR__ . '/inc/post.php';
// show the form if the error exists
if (count($errors) > 0) {
require __DIR__ . '/inc/get.php';
}
}
require __DIR__ . '/inc/footer.php';
Linguagem de código: HTML, XML ( xml )
Como index.php
funciona.
Primeiro, carregue o código dos header.php
arquivos footer.php
e usando a require
construção na parte superior e inferior do arquivo para gerar o cabeçalho e o rodapé.
Segundo, defina o $errors
array para armazenar mensagens de erro e o $inputs
array para armazenar os valores do formulário inseridos. Se um elemento de entrada tiver dados inválidos, index.php
mostrará o valor inserido armazenado no arquivo $inputs
.
Terceiro, mostre o formulário se o método de solicitação HTTP for GET carregando o arquivo get.php. Depois de entrar no
Por fim, carregue o código para post.php
lidar com o envio do formulário se o método de solicitação HTTP for POST. Se o formulário contiver algum erro, o formulário $errors
não ficará vazio. Neste caso, mostre novamente o formulário com as mensagens de erro armazenadas no $errors
array e os valores inseridos armazenados nos $inputs
arrays.
obter.php
O get.php
arquivo contém o formato:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post">
<header>
<h1>Get FREE Updates</h1>
<p>Join us for FREE to get email updates!</p>
</header>
<div>
<label for="name">Name:</label>
<input type="text" name="name" id="name" placeholder="Full Name" value="<?php echo $inputs['name'] ?? '' ?>" class="<?php echo isset($errors['name']) ? 'error' : '' ?>">
<small><?php echo $errors['name'] ?? '' ?></small>
</div>
<div>
<label for="name">Email:</label>
<input type="text" name="email" id="email" placeholder="Email Address" value="<?php echo $inputs['email'] ?? '' ?>" class="<?php echo isset($errors['email']) ? 'error' : '' ?>">
<small><?php echo $errors['email'] ?? '' ?></small>
</div>
<button type="submit">Subscribe</button>
</form>
Linguagem de código: HTML, XML ( xml )
Como get.php
funciona.
- Primeiro, preencha os elementos de entrada name e email com os valores inseridos armazenados na
$inputs
matriz somente se esses valores existirem. - Segundo, mostre as mensagens de erro armazenadas no
$errors
array, se existirem.
post.php
A seguir mostra o código do post.php
arquivo. O post.php
valida os dados do formulário usando as funções filter_input()
e filter_var()
.
<?php
const NAME_REQUIRED = 'Please enter your name';
const EMAIL_REQUIRED = 'Please enter your email';
const EMAIL_INVALID = 'Please enter a valid email';
// sanitize and validate name
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$inputs['name'] = $name;
if ($name) {
$name = trim($name);
if ($name === '') {
$errors['name'] = NAME_REQUIRED;
}
} else {
$errors['name'] = NAME_REQUIRED;
}
// sanitize & validate email
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$inputs['email'] = $email;
if ($email) {
// validate email
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if ($email === false) {
$errors['email'] = EMAIL_INVALID;
}
} else {
$errors['email'] = EMAIL_REQUIRED;
}
?>
<?php if (count($errors) === 0) : ?>
<section>
<h2>
Thanks <?php echo htmlspecialchars($name) ?> for your subscription!
</h2>
<p>Please follow the steps below to complete your subscription:</p>
<ol>
<li>Check your email (<?php echo htmlspecialchars($email) ?>) - Find the message sent from [email protected]</li>
<li>Click to confirm - Click on the link in the email to confirm your subscription.</li>
</ol>
</section>
<?php endif ?>
Linguagem de código: HTML, XML ( xml )
Como funciona.
Primeiro, defina algumas constantes para armazenar as mensagens de erro. Em um aplicativo real, você pode armazenar todas as mensagens em um arquivo separado:
const NAME_REQUIRED = 'Please enter your name';
const EMAIL_REQUIRED = 'Please enter your email';
const EMAIL_INVALID = 'Please enter a valid email';
Linguagem de código: JavaScript ( javascript )
Em segundo lugar, limpe e valide o nome usando a função filter_input(). Se o nome estiver vazio, adicione uma mensagem de erro ao $errors
array.
// sanitize and validate name
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$inputs['name'] = $name;
if ($name) {
$name = trim($name);
if ($name === '') {
$errors['name'] = NAME_REQUIRED;
}
} else {
$errors['name'] = NAME_REQUIRED;
}
Linguagem de código: PHP ( php )
Terceiro, limpe e valide e-mail usando as funções filter_input()
e filter_var()
. Se o e-mail estiver vazio ou inválido, adicione a mensagem de erro correspondente ao $errors
array.
// sanitize & validate email
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$inputs['email'] = $email;
if ($email) {
// validate email
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if ($email === false) {
$errors['email'] = EMAIL_INVALID;
}
} else {
$errors['email'] = EMAIL_REQUIRED;
}
Linguagem de código: PHP ( php )
Por fim, se o formulário não apresentar erro, mostre a mensagem de confirmação:
<?php if (count($errors) === 0) : ?>
<section>
<h2>
Thanks <?php echo htmlspecialchars($name) ?> for your subscription!
</h2>
<p>Please follow the steps below to complete your subscription:</p>
<ol>
<li>Check your email (<?php echo htmlspecialchars($email) ?>) - Find the message sent from [email protected]</li>
<li>Click to confirm - Click on the link in the email to confirm your subscription.</li>
</ol>
</section>
<?php endif ?>
Linguagem de código: HTML, XML ( xml )
Para preencher o formulário, você pode salvar os dados do contato em um banco de dados ou chamar uma API de um serviço de email marketing para adicionar o contato à sua lista.
Resumo
- Use
filter_input() and filter_var()
funções para validar e higienizar dados.