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

Tutoriel PHP de base

Tutoriel PHP avancé

PHP & MySQL

Manuel de référence PHP

Validation des formulaires PHP

Dans ce tutoriel, vous apprendrez à utiliser les filtres PHP pour nettoyer et valider les données du formulaire.

Nettoyer et valider les données du formulaire

Comme vous l'avez vu dans le tutoriel précédent, le processus de capture et d'affichage des données du formulaire soumis est très simple. Dans ce tutoriel, vous apprendrez à implémenter un formulaire de contact simple sur votre site qui permet aux utilisateurs d'envoyer des commentaires et des retours par e-mail. Nous utiliserons le mêmeFonction PHP mail()pour envoyer des e-mails.

Nous mettrons également en œuvre des fonctionnalités de sécurité de base, telles que le nettoyage et la validation des entrées utilisateur, pour s'assurer que l'utilisateur ne peut pas insérer de données potentiellement malveillantes pour compromettre la sécurité du site ou pour ruiner l'application.

Voici notre script PHP multipurpose, qui effectue les opérations suivantes :

  • Il demandera à l'utilisateur d'entrer ses commentaires sur le site.

  • Le même script affiche le formulaire de contact et traite les données du formulaire soumis.

  • Ce script nettoie et valide les entrées utilisateur. Si un champ obligatoire (marqué*), ou en cas d'erreur d'entrée incorrecte entraînant un échec de la validation, le script redisplayera le formulaire et affichera un message d'erreur pour le champ de formulaire correspondant.

  • Ce script se souviendra des champs remplis par l'utilisateur et pré remplira ces champs lors du redisplay du formulaire en cas d'erreur de validation.

  • Si les données soumises par l'utilisateur sont acceptables et que tout se passe bien, un e-mail sera envoyé au gestionnaire du site et un message de succès sera affiché à l'utilisateur.

Tapez le code suivant dans le fichier "contact.php" et enregistrez-le dans le répertoire racine du projet :

<?php
//Fonction de filtrage des entrées utilisateur
function filterName($field) {
    //Nettoyer le nom d'utilisateur
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    //Vérifiez le nom de l'utilisateur
    si (filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        return $field;
    } else{
        return FALSE;
    }
}    
function filterEmail($field) {
    //Nettoyer l'adresse e-mail
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    // Vérifiez l'adresse e-mail
    si (filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return $field;
    } else{
        return FALSE;
    }
}
function filterString($field){
    // Nettoyez la chaîne
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    if(!empty($field)){
        return $field;
    } else{
        return FALSE;
    }
}
 
//Définissez les variables et utilisez des valeurs vides pour les initialiser
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//Traitez les données du formulaire lors de la soumission du formulaire
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Vérifiez le nom de l'utilisateur
    if(empty($_POST["name"])){
        $nameErr = "Please enter your name.";
    } else{
        $name = filterName($_POST["name"]);
        if($name == FALSE){
            $nameErr = "Veuillez saisir un nom valide.";
        }
    }
    
    // Vérifiez l'adresse e-mail
    if(empty($_POST["email"])){
        $emailErr = "请输入您的电子邮件地址。";     
    } else{
        $email = filterEmail($_POST["email"]);
        if($email == FALSE){
            $emailErr = "Veuillez saisir une adresse e-mail valide.";
        }
    }
    
    // Valider le sujet du message
    if(empty($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    // Vérifiez le commentaire de l'utilisateur
    if(empty($_POST["message"])){
        $messageErr = "Please enter your comment.";     
    } else{
        $message = filterString($_POST["message"]);
        if($message == FALSE){
            $messageErr = "Veuillez saisir un commentaire valide.";
        }
    }
    
    //Vérifiez les erreurs d'entrée avant d'envoyer un e-mail
    if(empty($nameErr) && empty($emailErr) && empty($messageErr)){
        // Recipient email address
        $to = '[email protected]';
        
        // Create email headers
        $headers = 'From: '. $email . '\r\n' .
        'Reply-To: '. $email . '\r\n' .
        'X-Mailer: PHP/' . phpversion();
        
        // Sending email
        if(mail($to, $subject, $message, $headers)){
            echo '<p class="success">您的留言已成功发送!</p>';
        } else{
            echo '<p class="error">无法发送电子邮件。 请再试一次!</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>联系我们</h2>
    <p>请填好这张表格并寄给我们</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">Sujet:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">Message:<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="Envoyer">
        <input type="reset" value="Réinitialiser">
    </form>
</html>

Utilisation du code

Vous pourriez penser à tout le sens de ce code. Bon, allons-y directement.

  • La fonction filterName() vérifie si la valeur d'entrée est un nom. Un nom valide ne peut contenir que des caractères alphabétiques (a-z, A-Z).

  • La fonction filterEmail() vérifie si la valeur d'entrée est une adresse e-mail.

  • La fonction filterString() nettoie la valeur d'entrée en supprimant les balises HTML et les caractères spéciaux. Elle ne vérifie pas les valeurs d'entrée.

  • intérieur de la balise<form>l'attribut action="contact.php" spécifie le même fichier contact.php pour afficher le formulaire et traiter les données du formulaire.

  • <input>et<textarea>de l'attribut value, par exemple<?php echo $name; ?>lorsque le formulaire est soumis pour vérification des erreurs, affichez à nouveau la valeur préremplie.

  • .error class PHP code, par exemple<span class="error"><?php echo $nameErr; ?>/span>afficher l'erreur correspondante du champ.

 Pour plus d'informations sur le nettoyage et la validation des filtres, veuillez consulterFiltres PHPRéférence.

Attention :Vous devez configurer le serveur de messagerie sur votre ordinateur pour que la fonction PHP mail() fonctionne correctement. Si vous ne souhaitez exécuter que la validation du formulaire, vous pouvez remplacer la partie e-mail par votre propre code personnalisé.