Accueil
Forums
Turoriaux
Inscription
Connexion
Fil RSS
Bienvenue invité !
Dimanche 07 Septembre 2008
Vous êtes ici: Crea-paradise.com > Tutoriaux > Conception web > PHP > Formulaire de contact par Mail

Formulaire de contact par Mail



Informations sur le tutorial
Image du tutorial Auteur : VirusX Commentaires : 6
Note : Note: 5/5 Vu : 3971
Date : 27/06/2007 à 17h44 Actions : Commenter et noter ce tutorial
Dernière modification : 28/06/2007 à 16h01


hello,
le tutos suivant va essayer de vous apprendre a créer un formulaire de contact qui envoi le résultat par mail 

le cours va se diviser en 4 parties :


  • 1° le formulaire

  • 2° Réception et traitement du formulaire

  • 3° Envoi du formulaire

  • 4° Code final



Le script que je vais vous présenter tien sur une seul page que l'on nommera... hum... contact.php  (ouai je sait c'est très original ).

Allez on va commencer le cours ...


1° Le formulaire

Le formulaire va se composer de :

-> Deux cases dans lequel on mettra l'adresse du posteur et le titre du message .
-> D'une zone de texte dans lequel on mettra le message
-> D'un bouton envoyer 


Voila un exemple de se que vous pouvez faire :

Code (x)HTLM:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
        <blockquote>
          <p>
            <label for="email_expediteur">          Votre adresse e-mail (obligatoire):</label>
            <br />
            <input name="email_expediteur" type="text" class="minuscule" id="email_expediteur" size="40" />
          </p>
          <p>
            <label for="titre">Titre de message (facultatif):</label>
            <br />
            <input type="text" size="40" name="titre" id="titre"/>
          </p>
          <p>
            <label for="message">Message (obligatoire):</label>
            <br />
            <textarea name="message" id="message" cols="30" rows="7">
            </textarea>
          </p>
        </blockquote>
        <br />
        <p><input type="submit" name="envoyer" value="Envoyer" />
        </p>
        </form>


Voila sa c'est fait, on va pouvoir passez aux chose serieuse


2° Réception et traitement du Formulaire

Une fois le formulaire rempli il va falloir le receptionner et le traiter avant de l'envoyer.
Il va falloir entre autres vérifier que tout les champs sont remplis et que l'email de l'envoyeur est valide.

On va donc utiliser le script suivant pour vérifier la validiter du formulaire :

Code PHP:
 
<?php
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
        $etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// mise en forme des champs saisis dans le formulaire lors de sa soumission
        if (isset($_POST["email_expediteur"])) {
                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
        }
        if (isset($_POST["titre"])) {
                 $_POST["titre"]=trim(stripslashes($_POST["titre"]));
        }
        if (isset($_POST["message"])) {
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        }
        // test de la validité des champs saisis
        if (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
                 $erreur="Saisissez votre adresse email...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}$",$_POST["email_expediteur"])){
// l'adresse e-mail n'est pas valide
                 $erreur="Votre adresse e-mail n'est pas valide...";
        }
        elseif (empty($_POST["message"])) {
// le message est vide
                 $erreur="Saisissez un message...";
        }
        else {
// tous les champs sont correctement remplis: on pourra envoyer le mail
                 $etat="ok";
        }
}
else {
// le formulaire n'
a pas été soumis  
           $etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>


Le formulaire est maintenant valide .
Reste plus qu'à l'envoyer .

3° Envoi du Formulaire

On arrive donc dans la derniere partie du cours c'est une des plus importantes, c'est la ou l'on va veritablement utiliser la puissance de php avec sa fonction MAIL.

On va commencer par créer la variable $email_webmaster qui va contenir l'email du recepteur on va donc mettre ceci en début de script :

Code PHP:
$email_webmaster = "votremail@CP.com";


Maintenant que c'est fait on va envoyer le mail pour cela on va utiliser la variable $etat que l'on avait initialiser plus haut 
Elle pouvait avoir trois valeur :

=> erreur (par défaut)
=> Attente
=> ok

On va l'utiliser pour afficher soit que le message a était envoyer soit qu'il y'a une erreur et donc afficher cette erreur 

Code PHP:
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
         if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
                         echo "<p><strong>".$erreur."</strong></p>n";
// afficher le message d'erreur
         }
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">n";
        $entete .= "MIME-Version: 1.0";
        if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
// mail envoyé
                echo "Votre message a été envoyé.<br />n";
                echo "<a href="".$_SERVER["PHP_SELF"]."">Envoyer un autre message...</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
 
        }
        else {
// erreur lors de l'envoi du mail
                echo "Un problème s'est produit lors de l'envoi du message.n";
                echo "<a href="".$_SERVER["PHP_SELF"]."">Réessayez...</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
        }
}
?>


Et voila qui est fait 
Soit le mail est envoyé sans encombre, le script affiche :

Citation: Script
Votre message a été envoyé


Soit une erreur connu a était detecté, le script affiche l'erreur

Ou enfin une erreur inconnu a était détecté, le script affiche :

Citation: Script
Un problème s'est produit lors de l'envoi du message.



4° Le Code Final

Code PHP:
<?php
$email_webmaster = "votremail@CP.com";//// indiquer votre adresse email /////
// === traitement des données du formulaire ============================================================
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
        $etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
//  mise en forme des champs saisis dans le formulaire lors de sa soumission
        if (isset($_POST["email_expediteur"])) {
                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
        }
        if (isset($_POST["titre"])) {
                 $_POST["titre"]=trim(stripslashes($_POST["titre"]));
        }
        if (isset($_POST["message"])) {
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        }
        // test de la validité des champs saisis
        if (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
                 $erreur="Saisissez votre adresse email...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3}$",$_POST["email_expediteur"])){
// l'adresse e-mail n'est pas valide
                 $erreur="Votre adresse e-mail n'est pas valide...";
        }
        elseif (empty($_POST["message"])) {
// le message est vide
                 $erreur="Saisissez un message...";
        }
        else {
// tous les champs sont correctement remplis: on pourra envoyer le mail
                 $etat="ok";
        }
}
else {
// le formulaire n'
a pas été soumis
           $etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
 
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
         if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
                         echo "<p><strong>".$erreur."</strong></p>n";
// afficher le message d'erreur
         }
?>
        <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
        <blockquote>
          <p>
            <label for="email_expediteur">          Votre adresse e-mail (obligatoire):</label>
            <br />
            <input name="email_expediteur" type="text" class="minuscule" id="email_expediteur" value="<?php
        if (!empty($_POST["email_expediteur"])) {
// l'adresse email de l'expéditeur a été saisie: la réafficher
                echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
        }
        ?>" size="40" />
          </p>
          <p>
            <label for="titre">Titre de message (facultatif):</label>
            <br />
            <input type="text" size="40" name="titre" id="titre" value="<?php
        if (!empty($_POST["titre"])) {
// le titre du message a été saisi: le réafficher
                echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
        }
        ?>" />
          </p>
          <p>
            <label for="message">Message (obligatoire):</label>
            <br />
            <textarea name="message" id="message" cols="30" rows="7"><?php
        if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
                echo htmlspecialchars($_POST["message"],ENT_QUOTES);
        }
        ?>
            </textarea>
          </p>
        </blockquote>
        <br />
        <p><input type="submit" name="envoyer" value="Envoyer" />
        </p>
        </form>
<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">n";
        $entete .= "MIME-Version: 1.0";
        if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
// mail envoyé
                echo "Votre message a été envoyé.<br />n";
                echo "<a href="".$_SERVER["PHP_SELF"]."">Envoyer un autre message...</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
 
        }
        else {
// erreur lors de l'envoi du mail
                echo "Un problème s'est produit lors de l'envoi du message.n";
                echo "<a href="".$_SERVER["PHP_SELF"]."">Réessayez...</a><br /><br /><br /><br /><br /><br /><br /><br /><br />n";
        }
}
?>


Information
Vous remarquerez que j'ai ajouter du PHP dans le formulaire cela permet que lorsqu'il y'a une erreur pendant l'envoi les infos que vous aviez tapé se réaffiche. sa peux servir 




Voila c'était mon premier tutorial j'éspere avoir bien commenter le code et le cours, j'éspere aussi qu'il vous a plu

Ah et aussi désolé si il y'a des fautes j'ai essayé de m'appliquer 

Pour tester le script, il est dispo ici


6 commentaires



> Posté le : 28/06/2007 à 20h53 | Note : Note: 5/5
Avatar de Francky03


Groupe : Membres


Grr, tu fais de la concurence avec mon tutorial 
Non je plaisante !
Très bon tuto !

+ Francky03:
- ex-Analyste sur Crea-paradise.com
- Webmasteur de Japounais.org
+ Mes tutoriaux:
- Formulaire contact avec administration.
+ Mes ressources:
- NotePad++
> Posté le : 17/07/2007 à 14h23 | Note : Note: 5/5
Avatar de lbeetls01


Groupe : Admins


Oui très bon tutorial


> Posté le : 22/07/2007 à 13h08 | Note : Aucune
Avatar de VirusX


Groupe : Membres


Merci 
> Posté le : 07/06/2008 à 14h25 | Note : Note: 5/5
Avatar de Ascott


Groupe : Membres


super

Chuck Norris peut te faire passer un sale quart d'heure en 8 minutes.
L'infographie bien plus qu'une passion ...
> Posté le : 18/07/2008 à 03h59 | Note : Aucune
Aucun avatar


Groupe : Membres


Bonjour!
Tres beau tuto
mais j'ai des questions...
Citation: ?php echo $_SERVER["PHP_SELF"]; ?


Pourquoi dans le formulaire il y a cela.. Le formulaire est pas supposé retourner une page?
J'essaie d'inclure le code a mon site mais je n'y arrive pas...

Le code final écris dans le tutoriel doit être mis sur 1 page?
Ou il y a une page séparé pour le formulaire et la validation?
> Posté le : 27/07/2008 à 06h53 | Note : Note: 5/5
Aucun avatar


Groupe : Membres


Super tutoriel!!  je l,ai utilisé sur mon site!  Et en plus, j'ai compris

J'ai supprimé les n qui s'affiche dans les echo de la fin.. je n'ai pas trop compris pourquoi c'étais là d'ailleur..

Merci !! 


1