Aula 11 - Receção e Validação de Dados em PHP.

article featured image

Na aula anterior aprendemos a criar formulários HTML e a enviar os dados para o PHP através do método POST. No entanto, nem sempre os utilizadores introduzem informações corretas. Nesta aula vamos aprender a verificar, validar e tratar os dados recebidos, evitando erros e garantindo que a aplicação utiliza apenas informação válida.

 

1. Porque devemos validar os dados?

Imagine um formulário de registo de produtos com os seguintes campos:

Apesar de o formulário ter sido submetido, os valores não estão corretos.

O PHP deve verificar os dados antes de os utilizar.

A validação feita pelo HTML é útil, mas não é suficiente. O PHP deve validar os dados no servidor, mesmo quando o formulário utiliza required, min, max ou outros atributos HTML.

 

2. Receber os dados com segurança

Já conhecemos o array associativo $_POST.

Contudo, se o campo não existir, esta instrução pode originar um aviso.

Podemos utilizar o operador ?? :

Assim, se o campo não tiver sido enviado, a variável recebe uma string vazia.

Também podemos remover espaços desnecessários:

A função trim() remove os espaços existentes no início e no fim do texto.

Por exemplo:

 

3. Validar campos obrigatórios

Para verificar se um campo está vazio, podemos utilizar empty().

Também podemos verificar o comprimento do texto:

Neste caso, mb_strlen() conta os caracteres do texto, incluindo corretamente caracteres acentuados quando a extensão mbstring está disponível.

Para verificar se um valor foi enviado, podemos utilizar isset():

É importante distinguir:

  • isset() verifica se a variável existe e não é null.

  • empty() verifica se o valor é considerado vazio pelo PHP, incluindo "0".

 

4. Validar números

Imagine que queremos receber o preço de um produto.

O preço deve ser numérico e superior a zero.

Também podemos validar o stock:

Repare na diferença: o preço deve ser positivo, mas o stock pode ser 0, porque um produto pode estar esgotado.

 

5. Validar endereços de email

O PHP disponibiliza a função filter_var(), que permite validar determinados tipos de dados.

Para verificar um email:

Exemplos:

Email

Resultado

joao@email.com

Válido

joao.email.com

Inválido

joao@

Inválido

Esta validação verifica o formato do endereço, mas não garante que a caixa de correio exista.

 

6. Validar datas

Quando recebemos uma data através de um formulário, devemos verificar se é válida e se respeita as regras da aplicação.

Por exemplo, num formulário de inscrição, a data de nascimento não pode ser posterior à data atual.

Exemplo de formulário HTML

Validação em PHP

Podemos utilizar a classe DateTime e o método createFromFormat() para verificar a data recebida.

O método createFromFormat() tenta converter o texto numa data. A comparação com format() permite detetar datas inexistentes, como 2026-02-30, que o PHP poderia ajustar automaticamente.

Validar uma idade mínima

Podemos ainda verificar se o participante tem pelo menos 16 anos:

Este segundo exemplo pressupõe que a data já foi validada e que não é futura.

O que devemos verificar?

Validação

Exemplo

Campo obrigatório

Data não preenchida

Formato correto

2026-11-10

Data existente

Rejeitar 2026-02-30

Data não futura

Rejeitar uma data posterior à atual

Idade mínima

Participante com pelo menos 16 anos

Nota: o campo HTML type="date" envia normalmente a data no formato YYYY-MM-DD, independentemente da forma como aparece visualmente no navegador.

 

7. Aceder a caracteres de uma string

Em PHP, uma string é uma sequência de caracteres. Podemos aceder a cada carácter através da sua posição, utilizando parênteses retos [].

Tal como acontece com os arrays, a primeira posição é 0 e não 1.

Por exemplo:

Neste exemplo, $telemovel[0] permite obter o primeiro carácter do número.

Verificar o comprimento de uma string

A função strlen() permite contar o número de bytes de uma string. Para números de telemóvel, compostos por algarismos ASCII, corresponde ao número de caracteres.

Resultado:

9

Podemos assim verificar se o número tem exatamente 9 algarismos.

Exemplo — Validar um número de telemóvel

Pretendemos verificar três condições:

  1. O número tem exatamente 9 caracteres.

  2. O primeiro carácter é 9.

  3. Todos os caracteres são algarismos.

Utilizámos três conceitos importantes:

Instrução

Finalidade

strlen($telemovel)

Verifica o comprimento

$telemovel[0]

Obtém o primeiro carácter

ctype_digit($telemovel)

Verifica se todos os caracteres são algarismos

Repare que verificamos primeiro o comprimento, garantindo que a string não está vazia antes de aceder à posição [0].

Outra forma — Utilizar substr()

O PHP também disponibiliza a função substr(), que permite extrair uma parte de uma string.

Os parâmetros indicam a posição inicial e, quando fornecido, o número de caracteres a extrair.

Para verificar apenas o primeiro carácter, a forma mais simples continua a ser:

Alternativa — Expressões regulares

Mais tarde, podemos apresentar uma solução mais compacta com preg_match():

Esta expressão verifica as três condições de uma só vez.

Nota: esta regra valida o formato simplificado pedido no exercício (9 algarismos começados por 9), não todas as regras de numeração móvel portuguesa.

 

8. Validar e apresentar mensagens de erro

Uma boa aplicação não deve terminar a execução ao encontrar o primeiro erro. Deve identificar os problemas e apresentá-los ao utilizador.

Podemos guardar as mensagens num array:

Depois verificamos se existem erros:

Estamos a reutilizar conhecimentos das aulas anteriores: arrays, if, foreach e funções.

 

7. Apresentar os dados de forma segura

Quando apresentamos dados introduzidos pelo utilizador numa página HTML, devemos evitar que sejam interpretados como código HTML.

Para isso, utilizamos htmlspecialchars():

Esta função converte caracteres especiais em entidades HTML, ajudando a evitar ataques de Cross-Site Scripting (XSS).

É importante perceber que validar e proteger a apresentação dos dados são operações diferentes.

 

8. Exemplo prático — Validação de um produto

Vamos aplicar os conceitos a um formulário com nome, preço e stock.

Este exemplo ainda não guarda os dados numa base de dados. Isso será feito quando estudarmos as operações de inserção de registos no MySQL.

 

9. O que aprendemos nesta aula?

Nesta aula aprendemos a receber e validar os dados enviados através de formulários HTML. Utilizámos trim(), isset(), empty(), filter_var(), mb_strlen() e htmlspecialchars(), além de arrays para guardar mensagens de erro.

O mais importante é compreender que os dados devem ser validados no servidor antes de serem utilizados ou guardados.

Post Anterior