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:
Resultado | |
|---|---|
| Válido |
| Inválido |
| 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 |
|
Data existente | Rejeitar |
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:
O número tem exatamente 9 caracteres.
O primeiro carácter é
9.Todos os caracteres são algarismos.
Utilizámos três conceitos importantes:
Instrução | Finalidade |
|---|---|
| Verifica o comprimento |
| Obtém o primeiro carácter |
| 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.