English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico PHP

Tutorial Avançado PHP

PHP & MySQL

Manual de Referência PHP

Validação de Formulário PHP

Neste tutorial, você aprenderá a usar os filtros PHP para limpar e validar os dados do formulário.

Limpeza e validação de dados do formulário

Como você viu no tutorial anterior, o processo de captura e exibição dos dados do formulário enviado é muito simples. Neste tutorial, você aprenderá a implementar um formulário de contato simples no seu site que permite aos usuários enviar comentários e feedback por e-mail. Usaremos o mesmoFunção PHP mail()para enviar e-mails.

Também implementaremos algumas funcionalidades básicas de segurança, como limpeza e validação do conteúdo da entrada do usuário, para que os usuários não possam inserir dados potencialmente maliciosos que possam comprometer a segurança do site ou danificar a aplicação.

Aqui está nosso script PHP multiuso, que executa as seguintes operações:

  • Ele exigirá que o usuário insira seus comentários sobre o site.

  • O mesmo script exibe o formulário de contato e trata os dados do formulário enviado.

  • O script limpa e valida a entrada do usuário. Se qualquer campo obrigatório (marcado*),ou devido a entrada incorreta que resultou em falha de validação, o formulário será redisplayado e uma mensagem de erro correspondente será exibida para o campo de formulário correspondente.

  • O script lembrará dos campos preenchidos pelo usuário e preencherá esses campos novamente ao redisplayar o formulário devido a erros de validação.

  • Se os dados enviados pelo usuário forem aceitáveis e tudo der certo, o e-mail será enviado para o administrador do site e uma mensagem de sucesso será exibida para o usuário.

Insira o seguinte código no arquivo "contact.php" e salve-o na raiz do projeto:

<?php
//Função de filtragem de entrada do usuário
function filterName($field){
    //Limpar nome de usuário
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    //Verificar o nome do usuário
    if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        return $field;
    } else{
        return FALSE;
    }
}    
function filterEmail($field){
    //Limpar endereço de e-mail
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    // Verificar o endereço de e-mail
    se(filter_var($field, FILTER_VALIDATE_EMAIL)){
        return $field;
    } else{
        return FALSE;
    }
}
function filterString($field){
    // Limpar a string
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    if(!empty($field)){
        return $field;
    } else{
        return FALSE;
    }
}
 
//Definir variáveis e inicializá-las com valores vazios
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//Manter dados do formulário ao submeter
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Verificar o nome do usuário
    if(empty($_POST["name"])){
        $nameErr = "Por favor, insira seu nome.";
    } else{
        $name = filterName($_POST["name"]);
        if($name == FALSE){
            $nameErr = "Por favor, insira um nome válido.";
        }
    }
    
    // Verificar o endereço de e-mail
    if(empty($_POST["email"])){
        $emailErr = "Por favor, insira seu endereço de e-mail.";     
    } else{
        $email = filterEmail($_POST["email"]);
        if($email == FALSE){
            $emailErr = "Por favor, insira um endereço de e-mail válido.";
        }
    }
    
    // Validar o assunto da mensagem
    if(empty($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    // Verificar o comentário do usuário
    if(empty($_POST["message"])){
        $messageErr = "Por favor, insira seu comentário.";     
    } else{
        $message = filterString($_POST["message"]);
        if($message == FALSE){
            $messageErr = "Por favor, insira um comentário válido.";
        }
    }
    
    //Verifique os erros de entrada antes de enviar o e-mail
    if(empty($nameErr) && empty($emailErr) && empty($messageErr)){}}
        // Recipient email address
        $to = '[email protected]';
        
        // Create email headers
        $headers = 'From:
        'Reply-To:
        'X-Mailer: PHP/' . phpversion();
        
        // Sending email
        if(mail($to, $subject, $message, $headers)){
            echo '<p class="success">Sua mensagem foi enviada com sucesso!';/p>';
        } else{
            echo '<p class="error">Não foi possível enviar o e-mail. Por favor, tente novamente!';/p>';
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8>
    <title>Contact Form</title>
    <style type="text/css">
        .error{ color: red; }
        .success{ color: green; }
    </style>
</head>
    <h2>Contacte-nos</h2>
    <p>Por favor, preencha este formulário e nos envie</p>
    <form action="contact.php" method="post">
        <p>
            <label for="inputName">Name:<sup>*</sup></label>
            <input type="text" name="name" id="inputName" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?>/span>
        </p>
        <p>
            <label for="inputEmail">Email:<sup>*</sup></label>
            <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?>/span>
        </p>
        <p>
            <label for="inputSubject">Assunto:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">Mensagem:<sup>*</sup></label>
            <textarea name="message" id="inputComment" rows="5" cols="30><?php echo $message; ?>/textarea>
            <span class="error"><?php echo $messageErr; ?>/span>
        </p>
        <input type="submit" value="Enviar">
        <input type="reset" value="Redefinir">
    </form>
</html>

Uso do código

Você pode pensar sobre o significado total do código. Bem, vamos direto ao ponto.

  • A função filterName() verifica se o valor de entrada é um nome. Os nomes válidos podem conter apenas caracteres alfabéticos (a-z, A-Z).

  • A função filterEmail() valida o valor de entrada como um endereço de e-mail.

  • A função filterString() limpa o valor de entrada apenas através da limpeza de tags HTML e caracteres especiais. Ela não valida nenhum valor de entrada.

  • dentro da marcação<form>A propriedade action="contact.php" do atributo especifica o mesmo arquivo contact.php para exibir o formulário e manipular os dados do formulário.

  • <input>e<textarea>da propriedade value contendo código PHP, por exemplo<?php echo $name; ?>ao validar erros no formulário, exibir valores preenchidos previamente.

  • .classe error contendo código PHP, por exemplo<span class="error"><?php echo $nameErr; ?>/span>Mostrar o erro do campo correspondente.

 Para obter mais informações sobre limpeza e validação de filtros, consulteFiltros PHPReferência.

Atenção:Você precisa configurar o servidor de e-mail no computador para que a função PHP mail() funcione corretamente. Se você quiser apenas executar a validação do formulário, pode substituir a parte do e-mail por seu código personalizado.