Mémos

M é m o - l a b .

Formulaires – Les bases

Ce chapitre explique comment créer des formulaires. Affichage, gestion des contraintes de validation et sauvegarde en base de données.

Prenons par exemple un site web participatif proposant une liste de lieux insolites à visiter en france. Un formulaire frontend permettra de soumettre un lieu. Il sera également possible d’en proposer un depuis la partie admin.
Bien que ces contenus puissent être placés dans les articles, nous utilisons ici un type de contenu spécifique pour les gérer. Nous créons donc un CPT appelé « visit ». Se rendre au chapitre Les Custom Post Type pour créer ce type de contenu.
Dans le template, nous créons un formulaire en html contenant les champs name, email et place (lieu à visiter).

La compréhension par le code





Affichage du formulaire en html

<form id="myform" action="<?php echo the_permalink(); ?>" method="post">
    <!-- Cette fonction est utilisée pour vérifier que -->
    <!-- l'envoi du formulaire provient bien du site web -->
    <?php wp_nonce_field('myform_action_name', 'myform_nonce_name'); ?>

    <div>
        <!-- pour l'affichage des erreurs de validation, -->
        <!-- se rendre au chapitre "Formulaires - validation" -->
        <label for="name">Votre nom</label>
        <input id="name" name="lastname" type="text">
    </div>

    <div>
        <!-- pour l'affichage des erreurs de validation, -->
        <!-- se rendre au chapitre "les contraintes de validation" -->
        <label for="email">Votre adresse mail</label>
        <input id="email" name="email" type="mail">
    </div>

    <div>
        <!-- pour l'affichage des erreurs de validation, -->
        <!-- se rendre au chapitre "Formulaires - validation" -->
        <label for="message">Suggestion de visite</label>
        <textarea id="message" name="place"></textarea>
    </div>

    <div class="form-group">
        <input name="sub_myform" type="submit" value="Envoyer">
    </div>
</form>



Traitement du formulaire

<?php
if (isset($_POST['sub_myform']) && isset($_POST['myform_nonce_name'])) { 
    // On s'assure que l'envoi provient bien du formulaire du site 
    if (wp_verify_nonce($_POST['myform_nonce_name'], 'myform_action_name')) {
        
        // Cette fonction non obligatoire permet d'épurer
        // les données saisies par l'utilisateur. 
        function sanitize_data($data) {
            // Supprime les espaces (ou d'autres caractères) 
            // en début et fin de chaîne 
            $data = trim($data);
            // Supprime les antislashes
            $data = stripslashes($data);
            // Convertit les caractères spéciaux en entités HTML
            // protège des failles xss  
            $data = htmlspecialchars($data);
            return $data;
        }
        $lastname = sanitize_data($_POST['lastname']);
        $email = sanitize_data($_POST['email']);
        $message = sanitize_data($_POST['message']);


        // Pour le traitement des contraintes de validation,
        // se rendre au chapitre "Formulaires - Validation"


        // Sauvegarde dans la base de données
        // Les données sont sauvegardées dans la table postmeta
        wp_insert_post([
            'post_type' => 'customer_feedback',
            // Pending signifie que le post est en attente de publication
            // par un utilisateur possédant les droits de publication
            'post_status' => 'pending',
            'post_title' => $lastname,
            'meta_input' => [
                'email' => $email,
                'message' => $message
            ]
        ]);
    

        // Pour l'envoi d'un mail, se reporter au chapitre
        // "Formulaires - Envoi d'un mail"


        echo 'Votre suggestion a été enregistrée !';
    };
?>