Bonjour,
Je réalise actuellement un projet de site pour un client. Débutante en PHP, j'ai suivi avec beaucoup d'attention le tuto "formulaire de contact avancé", Super tuto ! Merci. Tout semble bien fonctionner. Cependant, le client souhaite un système de cases à cocher, pour choisir le destinataire du mail et non un menu déroulant. C'est là que tout ce corse ! J'ai essayé des solutions. Sans succès. Quelqu'un pourrait-il m'aider ?
Un grand merci, par avance.
Maria

il est visible là : http://www.mariaorea.fr/SODEC/contact.php

Voici le code :

<?php
if(!empty($_POST)) {
    extract($_POST);
    $valid = true;

    if(empty($nom)) {
        $valid = false;
        $erreurnom = "vous devez indiquer votre nom";
    }

    if(empty($email)) {
        $valid = false;
        $erreuremail = "vous devez indiquer votre email";
    }

    if($email != NULL && !preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i", $email)) {
        $valid = false;
        $erreuremail = "adresse email invalide";
    }

    if(empty($pays)) {
        $valid = false;
        $erreurpays = "vous devez indiquer votre pays";
    }

    if(empty($message)) {
        $valid = false;
        $erreurmessage = "Vous devez écrire un message";
    }

    if($valid) {
        $to = "maria.orea@orange.fr";
        $sujet = $nom . " vous envoi un message";
        $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
        $header = "From: maria.orea@orange.fr \r\n";
        $header .= "Reply-To: $email ";

        $message = stripcslashes($message);
        $nom = stripcslashes($nom);

        if(mail($to,$sujet,$message,$header)) {
            $ok = "Votre message est bien parti";
        }
        else {
            $erreur = "Une erreur est survenue lors de l'envoi de votre message.";
        }
        unset($nom);
        unset($email);
        unset($pays);
        unset($message);
    }
}
?><!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>formulaire contact</title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<link rel="stylesheet" type="text/css" href="contact.css">
<script src="js/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
    $(function() {
        $("#envoyer").click(function(){
            valid = true;
            if($("#nom").val()==""){
                $("#nom").css("border-color","#ff0000");
                $("#nom").next(".error-message").text("veuillez entrer un nom");
                valid = false;
            }
            else {
                $("#nom").css("border-color","#00ff00");
                $("#nom").next(".error-message").text("");
            }
            if($("#email").val()==""){
                $("#email").css("border-color","#ff0000");
                $("#email").next(".error-message").text("Veuillez entrer un email");
                valid = false;
            }
            else {
                if(!$("#email").val().match(/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i)){
                    $("#email").css("border-color","#ff0000");
                    $("#email").next(".error-message").text("Veuillez entrer un email valide");
                    valid = false;
                }
                else{
                    $("#email").css("border-color","#00ff00");
                    $("#email").next(".error-message").text("");
                }
            }
            if($("#message").val()==""){
                $("#message").css("border-color","#ff0000");
                $("#message").next(".error-message").text("Veuillez entrer un message");
                valid = false;
            }
            else{
                $("#message").css("border-color","#00ff00");
                $("#message").next(".error-message").text("");
            }
            return valid;
        });
    });
</script>
</head>
    <body>
    <div id="page">
        <section>
        <h1>Contacts</h1>
        <?php
            if(isset($ok)) { echo "<p class=\"ok\">$ok</p>";}
            if(isset($erreur)) { echo "<p class=\"erreur\">$erreur</p>";}
        ?>
            <form method="post" action="contact.php">
            <fieldset id="caseAcocher">
            <legend>Cochez la case correspondante à la personne<br>que vous souhaitez contacter,<br>
            le formulaire ci-contre dirigera votre mail</legend>
            <ul>
                <li><input type="radio" name="service" id="durand" value="mail1">
                    <label for="durand">Direction générale : Jean-Etienne Durand</label></li>

                <li><input type="radio" name="service" id="martin" value="mail2">
                    <label for="martin">Direction technique : Maurice Martin</label></li>

                <li><input type="radio" name="service" id="dulong" value="mail3">
                    <label for="dulong">Responsable X : Jean-Paul Dulong</label></li>

                <li><input type="radio" name="service" id="dupont" value="mail4">
                    <label for="dupont">Responsable Y : Maurice Dupont</label></li>

                <li><input type="radio" name="service" id="ducasse" value="mail5">
                    <label for="ducasse">Responsable Z : Jean-Claude Ducasse</label></li>
            </ul>
        </fieldset>

        <fieldset id="form">
            <p>
                <input type="text" placeholder="Nom" id="nom" name="nom" value="<?php if(isset($nom)) echo $nom; ?>">
                <span class="error-message"><?php if(isset($erreurnom)) echo $erreurnom; ?></span>
            </p>
            <p>
                <input type="email" placeholder="Email" id="email" name="email" value="<?php if(isset($email)) echo $email; ?>">
                <span class="error-message"><?php if(isset($erreuremail)) echo $erreuremail; ?></span>
            </p>
            <p><input type="text" placeholder="Pays" id="pays" name="pays" value="<?php if(isset($pays)) echo $pays; ?>">
                <span class="error-message"><?php if(isset($erreurpays)) echo $erreurpays; ?></span>
            </p>
            <p>
                <textarea id="message" placeholder="Votre message..." name="message" rows="5"><?php if(isset($message)) echo $message; ?></textarea>
                <span class="error-message"><?php if(isset($erreurmessage)) echo $erreurmessage; ?></span>
            </p>
            <p><input type="submit" value="Envoyer votre message" id="envoyer" name="submit" /></p>
        </fieldset>
        </form>
        </section>
    </div><!--fin de #page-->
    </body>
</html>

6 réponses


morea
Auteur
Réponse acceptée

Je n'ai pas recopié bêtement ! j'ai passé la journée à le faire et à essayer de le comprendre ligne par ligne.
Je suis graphiste pas développeur !
Je suis venue sur ce forum chercher de l'aide, je suis très surprise de la tournure de cette conversation. Je la clôture donc !

Merci quand même pour tes explications et ton aide.

Au fait : je ne suis pas française (je suis italienne) ! c'est drôle ça, non ?
Je ne sais pas si toi tu es français (et je m'en fiche), mais je t'invite à apprendre à l'écrire.

<?php
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;
        if(empty($nom)){
            $valid = false;
            $erreurnom = 'vous devez indiquer votre nom';
        }elseif(empty($email)){
            $valid = false;
            $erreuremail = 'vous devez indiquer votre email';
        }elseif($email != null && !preg_match('/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i', $email)){
            $valid = false;
            $erreuremail = 'adresse email invalide';
        }elseif(empty($pays)){
            $valid = false;
            $erreurpays = 'vous devez indiquer votre pays';
        }elseif(empty($message)){
            $valid = false;
            $erreurmessage = 'Vous devez écrire un message';
        }elseif(!isset($service)){ // ON VÉRIFIE QUE L'UTILISATEUR À BIEN CHOISIE UN DESTINATAIRE
            $valid = false;
            $erreurmessage = 'Vous devez choisir un destinataire';
        }
        if($valid){
            switch($service){ // ON TRAITE LE CHOIX DU DESTINATAIRE GD
                case 'mail1':
                    $to = 'maria.orea@orange.fr'; // ADRESSE A CHANGER GD
                    break;
                case 'mail2':
                    $to = 'maria.orea@orange.fr'; // ADRESSE A CHANGER GD
                    break;
                case 'mail3':
                    $to = 'maria.orea@orange.fr'; // ADRESSE A CHANGER GD
                    break;
                case 'mail4':
                    $to = 'maria.orea@orange.fr'; // ADRESSE A CHANGER GD
                    break;
                case 'mail5':
                    $to = 'maria.orea@orange.fr'; // ADRESSE A CHANGER GD
                    break;
            }
            $sujet = $nom.' vous envoi un message';
            $header = "Content-type: text/html; charset=utf-8\r\n";
            $header .= "From: maria.orea@orange.fr \r\n";
            $header .= 'Reply-To: '.$email.' ';
            $message = stripcslashes($message);
            $nom = stripcslashes($nom);
            // if(mail($to, $sujet, $message, $header)) // DESACTIVER LE TEMPS DES TEST GD
            if(1 == 1) // LIGNE TEMPORAIRE GD
                $ok = 'Votre message est bien parti';
            else
                $erreur = 'Une erreur est survenue lors de l\'envoi de votre message.';
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>formulaire contact</title>
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <link rel="stylesheet" type="text/css" href="contact.css">
    <script src="js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#envoyer").click(function(){
                valid = true;
                if($("#nom").val()==""){
                    $("#nom").css("border-color","#ff0000");
                    $("#nom").next(".error-message").text("veuillez entrer un nom");
                    valid = false;
                }
                else {
                    $("#nom").css("border-color","#00ff00");
                    $("#nom").next(".error-message").text("");
                }
                if($("#email").val()==""){
                    $("#email").css("border-color","#ff0000");
                    $("#email").next(".error-message").text("Veuillez entrer un email");
                    valid = false;
                }
                else {
                    if(!$("#email").val().match(/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i)){
                        $("#email").css("border-color","#ff0000");
                        $("#email").next(".error-message").text("Veuillez entrer un email valide");
                        valid = false;
                    }
                    else{
                        $("#email").css("border-color","#00ff00");
                        $("#email").next(".error-message").text("");
                    }
                }
                if($("#message").val()==""){
                    $("#message").css("border-color","#ff0000");
                    $("#message").next(".error-message").text("Veuillez entrer un message");
                    valid = false;
                }
                else{
                    $("#message").css("border-color","#00ff00");
                    $("#message").next(".error-message").text("");
                }
                return valid;
            });
        });
    </script>
</head>
<body>
    <div id="page">
        <section>
            <h1>Contacts</h1>
            <?php
            if(isset($ok)) echo '<p class="ok">'.$ok.'</p>';
            if(isset($erreur)) echo '<p class="erreur">'.$erreur.'</p>';
            ?>
            <form method="post" action="contact.php">
                <fieldset id="caseAcocher">
                    <legend>Cochez la case correspondante à la personne<br>que vous souhaitez contacter,<br>
                        le formulaire ci-contre dirigera votre mail
                    </legend>
                    <ul>
                        <li><input type="radio" name="service" id="durand" value="mail1" />
                            <label for="durand">Direction générale : Jean-Etienne Durand</label>
                        </li>
                        <li><input type="radio" name="service" id="martin" value="mail2" />
                            <label for="martin">Direction technique : Maurice Martin</label>
                        </li>
                        <li><input type="radio" name="service" id="dulong" value="mail3" />
                            <label for="dulong">Responsable X : Jean-Paul Dulong</label>
                        </li>
                        <li><input type="radio" name="service" id="dupont" value="mail4" />
                            <label for="dupont">Responsable Y : Maurice Dupont</label>
                        </li>
                        <li><input type="radio" name="service" id="ducasse" value="mail5" />
                            <label for="ducasse">Responsable Z : Jean-Claude Ducasse</label>
                        </li>
                    </ul>
                </fieldset>
                <fieldset id="form">
                    <p>
                        <input type="text" placeholder="Nom" id="nom" name="nom" value="<?php if(isset($nom)) echo $nom; ?>">
                        <span class="error-message"><?php if(isset($erreurnom)) echo $erreurnom; ?></span>
                    </p>
                    <p>
                        <input type="email" placeholder="Email" id="email" name="email" value="<?php if(isset($email)) echo $email; ?>">
                        <span class="error-message"><?php if(isset($erreuremail)) echo $erreuremail; ?></span>
                    </p>
                    <p><input type="text" placeholder="Pays" id="pays" name="pays" value="<?php if(isset($pays)) echo $pays; ?>">
                        <span class="error-message"><?php if(isset($erreurpays)) echo $erreurpays; ?></span>
                    </p>
                    <p>
                        <textarea id="message" placeholder="Votre message..." name="message" rows="5"><?php if(isset($message)) echo $message; ?></textarea>
                        <span class="error-message"><?php if(isset($erreurmessage)) echo $erreurmessage; ?></span>
                    </p>
                    <p><input type="submit" value="Envoyer votre message" id="envoyer" name="submit" /></p>
                </fieldset>
            </form>
        </section>
    </div>
    <!--fin de #page-->
</body>
</html>

Bonjour Maria.
J'ai mis des commentaire avec à chaque fois 'GD' pour que tu puisse les voir facilement, le traitement du destinataire est pas compliquer, on vérifie que le destinataire est sélectionner, et selon le choix, on lui associe une adresse e-mail.

On noteras qu'il faut regarder de prêt l'aspect sécurité suite au extract()

morea
Auteur

Merci beaucoup Glaived pour ta réponse. Je regarde tout ça de très près demain matin. Je t'enverrai un petit mot pour te dire.
Bonne soirée.

"Je t'enverrai un petit mot pour te dire." Ta culotte suffiras (cette phrase passe partout et me fait toujours autant rire xD ... 'bref) Pour revenir sur le extract(), pourquoi l'utilisé ? (car je ne vois pas en quoi il est pratique, il est plus 'chiant' que pratique en faite ^^) Cf : [url=https://php.net/manual/fr/function.extract.php]*« N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs »*[/url]

morea
Auteur

Bonjour Glaived !
J'ai testé ton code et ça ne marche pas. Il n'affiche pas d'erreur quand je ne coche pas le destinataire.
De plus, j'ai mis des adresses email perso différentes pour tester et ça non plus ça marche pas.

// if(mail($to, $sujet, $message, $header)) // DESACTIVER LE TEMPS DES TEST GD
            if(1 == 1) // LIGNE TEMPORAIRE GD

Je ne comprends pas ces deux lignes et pourquoi je dois désactiver le temps du test.

Tu n'as pas mis de unset dans ton code. Tu ne vides pas les variables ?

Pour le extract() c'est en effet vrai. Je suis allée lire la doc. Mais alors pourquoi faire un tuto pour formulaire contact avec cette fonction ? Je vais aller poser la question directement sur le tuto.

Selon toi, que puis-je faire à la place de l'extract ?

Merci pour tes réponses.

PS : ça fait rire que les garçons ! je suis une fille et de plus une grand-mère donc de mon point de vue, c'est moyen-moyen !
Mais bon, c'est surtout pas l'endroit pour ce genre de propos. :-)

Je l'es désactiver pour mes tests, bien sûr, pour fonctionner tu doit re-activer le if(mail($to, $sujet, $message, $header)), et supprimer l'autre ligne

l'unset() est pas utile en soit, donc aucun intérêt dans ce cas présent non ?

Parce que ce tutos date, et que c'était une 'erreur' que d'utilisé le extract() sur les données utilisateurs ^^ Il faut toujours (ceci vaux pour les tutoriels Grafikart et plus encore) ce demander pourquoi ? pourquoi faire ceci, pourquoi le faire comme cela, etc. Recopier bêtement ne mène à rien en soit ^^

A la place du extract(), tu utile les $_POST, donc au lieu de faire un extract() et utiliser $service, tu retire le extract() et tu utilise $_POST'service']

if(empty($nom)){
            $valid = false;
            $erreurnom = 'vous devez indiquer votre nom';
        }

deviens..

if(empty($_POST'nom'])){
            $valid = false;
            $erreurnom = 'vous devez indiquer votre nom';
        }

"ça fait rire que les garçons ! je suis une fille et de plus une grand-mère donc de mon point de vue, c'est moyen-moyen !"
C'est bien ça qui est drôle, la petite Française est la chose la plus facile à frustrer qu'il soit, tellement simple, drôle, et alarment à la fois.