Validação de formulário PHP

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:

Validação de formulário PHP

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.phpLinguagem 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.phparquivo:

<!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.phplink do arquivo para o style.cssarquivo no cssdiretório.

rodapé.php

E footer.phpcontém apenas as tags envolventes que correspondem às tags de abertura no header.phparquivo:

</main>
</body>
</html>Linguagem de código:  HTML, XML  ( xml )

index.php

O index.phparquivo 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.phpfunciona.

Primeiro, carregue o código dos header.phparquivos footer.phpe usando a requireconstrução na parte superior e inferior do arquivo para gerar o cabeçalho e o rodapé.

Segundo, defina o $errorsarray para armazenar mensagens de erro e o $inputsarray para armazenar os valores do formulário inseridos. Se um elemento de entrada tiver dados inválidos, index.phpmostrará 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.phplidar 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 $errorsnão ficará vazio. Neste caso, mostre novamente o formulário com as mensagens de erro armazenadas no $errorsarray e os valores inseridos armazenados nos $inputsarrays.

obter.php

O get.phparquivo 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.phpfunciona.

  • Primeiro, preencha os elementos de entrada name e email com os valores inseridos armazenados na $inputsmatriz somente se esses valores existirem.
  • Segundo, mostre as mensagens de erro armazenadas no $errorsarray, se existirem.

post.php

A seguir mostra o código do post.phparquivo. O post.phpvalida 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 $errorsarray.

// 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 $errorsarray.

// 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *