begin process at 2012 05 27 21:26:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIONAL

FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIONAL


 Information sur la source

Note :
Aucune note
Catégorie :E-Mail / Messagerie Classé sous :formulaire, contact, mail, xhtml, choix Niveau :Débutant Date de création :04/01/2011 Date de mise à jour :11/08/2011 12:29:35 Vu / téléchargé :4 512 / 284

Auteur : aventurier19

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
C'est mon premier code, je le peaufine depuis plusieurs semaines pour qu'il y ait le moins de choses négatives à dire dessus.

Pas de eregi mais preg_match, valide XHTML 1.0 Transitional!

Formulaire permettant l'envoi d'un mail à une personne parmi une liste prédéfinie dans le script.

Fonctions disponibles : (Liste non exhaustives)
- Test de remplissage,
- vérification de la syntaxe du mail,
- Envoi d'une copie à l'expéditeur,
- Vérification du remplissage des champs,
- Enregistrement des données remplies par le visiteur si une/ erreur(s) est/sont détectée(s),
- ...

Script valide à 100% XHTML 1.0 Transitional !

--------
09/08/2011 : Vu toutes les modifications apportées, je peux dire que c'est une version 2 du script

Source

  • <?php
  • session_start();
  • /*
  • *************************************************************************
  • Script php pour envoyer un mail à un destinataire choisi par l'expéditeur
  • LE FORMULAIRE
  • Auteur : aventurier19 version 2.1
  • *************************************************************************
  • */
  • echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • <title>Envoyer un mail</title>
  • </head>
  • <body>
  • <div>Envoyer un mail<br /><br />
  • <table border="0" cellspacing="0" cellpadding="0" style="width: 719px; border-collapse: collapse">
  • <tr style="height: 35.25pt">
  • <td>';
  • /*
  • *******************************************************************************************
  • CONFIGURATION (1ère partie)
  • *******************************************************************************************
  • */
  • // Mise en variable des destinataires ($destinataireXX = "mail@domaine.fr"; $destXX = "nom du destinataire XX")
  • // Problème de reception avec les adresses du type @hotmail.com @hotmail.fr ou @live.fr
  • // Si vous avez un/des caractère(s) spécial(aux) à mettre dans le prénom et/ou le nom, mettez le caractère ascii du/des caractère(s)) spécial(aux)
  • // (exemple : pour afficher Grégory, écrire Gr&eacute;gory ou Gr&#233;gory)
  • // besoin d'aide : http://www.commentcamarche.net/contents/html/htmlcarac.php3
  • $destinaire1 = "pseudo1@domaine.fr";
  • $dest1 = "Pr&#233;nom1 NOM1";
  • $destinaire2 = "pseudo1@domaine.fr";
  • $dest2 = "Pr&eacute;nom2 NOM2";
  • $destinaire3 = "pseudo1@domaine.fr";
  • $dest3 = "Prenom3 NOM3";
  • $destinaire4 = "pseudo1@domaine.fr";
  • $dest4 = "Prénom4 NOM4";
  • $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
  • // copie ? (envoie une copie au visiteur)
  • $copie = isset($_POST['copie']) ? $_POST['copie'] : 'non'; //mettre le choix par défaut (oui = case cochée)
  • // Action du formulaire (si votre page a des paramètres dans l'URL)
  • // si cette page est index.php?page=contact alors mettez index.php?page=contact
  • // sinon, laissez vide
  • $form_action = '';
  • /*
  • *******************************************************************************************
  • FIN DE LA CONFIGURATION (1ère partie)
  • *******************************************************************************************
  • */
  • /* cette fonction sert à nettoyer et enregistrer un texte */
  • function Rec($text) {
  • $text = trim($text); // delete white spaces after & before text
  • if (1 === get_magic_quotes_gpc()) {
  • $stripslashes = create_function('$txt', 'return stripslashes($txt);');
  • }
  • else {
  • $stripslashes = create_function('$txt', 'return $txt;');
  • }
  • // Citation magiques ?
  • $text = $stripslashes($text);
  • $text = htmlspecialchars($text, ENT_QUOTES); // convertion en chaîne avec " et ' aussi
  • $text = nl2br($text);
  • return $text;
  • }
  • /* Cette fonction sert à vérifier la syntaxe d'un email saisi */
  • function IsEmail($email) {
  • $pattern = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
  • return (preg_match($pattern,$email)) ? true : false;
  • }
  • $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
  • // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
  • $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : "";
  • $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : "";
  • $email = (isset($_POST['email'])) ? Rec($_POST['email']) : "";
  • $sujet = (isset($_POST['sujet'])) ? Rec($_POST['sujet']) : "";
  • $message = (isset($_POST['message'])) ? Rec($_POST['message']) : "";
  • // Vérification du statut du mail
  • $email = (IsEmail($email)) ? $email : ""; // soit l'email est vidé si erroné, soit il vaut l'email entré
  • // Vérification du destinataire et enregistrement du choix fait
  • // Si des destinataires doivent être ajoutés, faites bien attention à la syntaxe else { if ($destinataire ...) {$choix ...}
  • if ((isset($_POST['destinataire']))) {
  • $destinataire = stripslashes(htmlentities($_POST['destinataire']));
  • if ($destinataire == $destinaire1) {
  • $choix = 1;
  • }
  • else {
  • if ($destinataire == $destinaire2) {
  • $choix = 2;
  • }
  • else {
  • if ($destinataire == $destinaire3) {
  • $choix = 3;
  • }
  • else {
  • if ($destinataire == $destinaire4) {
  • $choix = 4;
  • }
  • else $choix = 0;
  • }
  • }
  • }
  • }
  • else {
  • $destinataire = "";
  • $choix = 0;
  • }
  • /*
  • *******************************************************************************************
  • CONFIGURATION (2nde partie)
  • *******************************************************************************************
  • */
  • // Liste des messages d'erreur
  • $error_msg = array(); // intialisation du tableau
  • if ($nom == "") // Test si la chaïne de texte est vide
  • $error_msg[] = "Entrez votre nom svp !"; // Ajout de l'erreur à la liste
  • if ($prenom == "") // Test si la chaïne de texte est vide
  • $error_msg[] = "Entrez votre pr&eacute;nom svp !"; // Ajout de l'erreur à la liste
  • if ($email == "") // Test si la chaïne de texte est vide
  • $error_msg[] = "Entrez votre email svp ! <b><i>S'il n'est pas valide, il sera effac&eacute;.</i></b>"; // Ajout de l'erreur à la liste
  • /* Vérifier le destinataire (permet la non-acceptation d'envoi avec le choix 'Faites votre choix...') */
  • if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$destinataire)))
  • $err_formulaire = false;
  • elseif ($choix !== -1) {
  • $error_msg[] = "Choisissez un destinataire svp!"; // Ajouter à la liste
  • $choix = 0;
  • $err_formulaire = true;
  • }
  • if ($sujet == "") // Test si la chaïne de texte est vide
  • $error_msg[] = "Entrez le sujet de votre message svp !"; // Ajout de l'erreur à la liste
  • if ($message == "") // Test si la chaïne de texte est vide
  • $error_msg[] = "N'oubliez pas d'&eacute;crire votre message !"; // Ajout de l'erreur à la liste
  • /*
  • *******************************************************************************************
  • FIN DE LA CONFIGURATION
  • *******************************************************************************************
  • */
  • if (isset($_POST['envoi'])) {
  • // On va vérifier les variables et l'email ...
  • if (IsEmail($email))
  • $err_formulaire = false;
  • else
  • $err_formulaire = true;
  • // affichage des éventuels erreurs à cause de champs vide
  • if ($error_msg) {
  • echo "<ul style='color: red; margin-top:0px;'>\n"; // Ouvre la liste
  • foreach ($error_msg as $err) { //Ecrit chaque erreur de la liste
  • echo " <li>".$err."</li>\n";
  • }
  • echo " </ul>\n"." "; // Ferme la liste
  • }
  • if (($nom != '') && ($prenom != '') && ($email != '') && ($sujet != '') && ($message != '')) {
  • // les 4 variables sont remplies, on génère puis envoie le mail
  • $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>'."\nContent-Type: text/html; charset=utf-8";
  • // envoyer une copie au visiteur ?
  • if ($copie == 'oui') {
  • $cible = $destinataire.','.$email;
  • }
  • else {
  • $cible = $destinataire;
  • }
  • // Envoi du mail
  • if (mail($cible, $sujet, $message, $headers)) {
  • $_SESSION['envoi'] = 1; // validation de la session - message envoyé
  • $_SESSION['copie'] = $copie; // enregistrement du choix de copie pour la page de résultat
  • echo '<script language="Javascript">
  • document.location.replace("Resultat.php")
  • </script>'."\n";
  • exit();
  • }
  • else {
  • $_SESSION['envoi'] = 2; // validation de la session - message non-envoyé
  • echo '<script language= "Javascript">
  • document.location.replace("Resultat.php")
  • </script>'."\n";
  • exit();
  • }
  • }
  • else {
  • // une des 4 variables (ou plus) est vide ...
  • $err_formulaire = true;
  • }
  • } // fin du if (!isset($_POST['envoi']))
  • if (($err_formulaire) || (!isset($_POST['envoi']))) {
  • // afficher le formulaire
  • echo '<form id="contact" method="post" action="'.$form_action.'">
  • <fieldset><legend>Vos coordonn&eacute;es</legend>
  • <table border="0">
  • <tr>
  • <td align="right" valign="top" width="179">'.'<label for="nom">Nom :</label>'.'</td>
  • <td>'.'<input type="text" id="nom" name="nom" size="69" value="'.stripslashes($nom).'" tabindex="1" />'.'<br />'.'<br />'.'</td>
  • </tr>
  • <tr>
  • <td align="right" valign="top" width="179">'.'<label for="prenom">Pr&eacute;nom :</label>'.'</td>
  • <td>'.'<input type="text" id="prenom" name="prenom" size="69" value="'.stripslashes($prenom).'" tabindex="1" />'.'<br />'.'<br />'.'</td>
  • </tr>
  • <tr>
  • <td align="right" width="179">'.'<label for="email">Email :</label>'.'</td>
  • <td>'.'<input type="text" id="email" name="email" size="69" value="'.stripslashes($email).'" tabindex="2" />'.'<br />'.'</td>
  • </tr>
  • </table>
  • </fieldset>
  • <br />'."\n";
  • // Listage des différents destinataires possible
  • // Possibilité de mettre autant de destinaire que souhaité mais attention à respecter la mise en forme.
  • ?>
  • <label for="destinataire"> Votre message est adress&eacute; &agrave; :</label>
  • <select id="destinataire" name="destinataire">
  • <option<?php if ($choix == 0) { echo (' selected="selected"');} ?>>Faites votre choix...</option>
  • <option value=""></option>
  • <option<?php if ($choix == 1) { echo (' selected="selected"');} echo ' value="'.$destinaire1.'">'.$dest1; ?></option>
  • <option<?php if ($choix == 2) { echo (' selected="selected"');} echo ' value="'.$destinaire2.'">'.$dest2; ?></option>
  • <option<?php if ($choix == 3) { echo (' selected="selected"');} echo ' value="'.$destinaire3.'">'.$dest3; ?></option>
  • <option<?php if ($choix == 4) { echo (' selected="selected"');} echo ' value="'.$destinaire4.'">'.$dest4; ?></option>
  • </select>
  • <?php
  • echo '<br />'.'<br />
  • <fieldset><legend>Votre message :</legend>
  • <table border="0">
  • <tr>
  • <td align="right" valign="top" width="179">'.'<label for="sujet">Sujet du message :</label>'.'</td>
  • <td>'.'<input type="text" id="sujet" name="sujet" size="69" value="'.stripslashes($sujet).'" tabindex="3" />'.'<br />'.'<br />'.'</td>
  • </tr>
  • <tr>
  • <td align="right" valign="top" width="179">'.'<label for="message">Message :</label>'.'</td>
  • <td>'.'<textarea id="message" name="message" tabindex="4" cols="69" rows="9">'.stripslashes($message).'</textarea>'.'<br />'.'</td>
  • </tr>
  • </table>
  • </fieldset>
  • <br />
  • <input type="checkbox" id="copie" name="copie" value="oui" '?><?php if ($copie == "oui") { echo "checked ";} echo '/>Recevoir une copie du message envoy&eacute;. <span style="font-size: small;">(Cochez pour accepter)</span><br /><br />
  • <div style="text-align:center;"><input type="reset" name="" value="R&eacute;initialiser le formulaire !" />&nbsp; &nbsp; &nbsp; <input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>
  • </form>
  • </td>
  • </tr>
  • </table>
  • </div>
  • </body>
  • </html>';
  • }
  • ?>
<?php
session_start();

/*
*************************************************************************
Script php pour envoyer un mail à un destinataire choisi par l'expéditeur
                              LE FORMULAIRE
  Auteur : aventurier19                                     version 2.1
*************************************************************************
*/

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Envoyer un mail</title>
</head>

<body>
<div>Envoyer un mail<br /><br />
<table border="0" cellspacing="0" cellpadding="0" style="width: 719px; border-collapse: collapse">
    <tr style="height: 35.25pt">
        <td>';
        
        /*
		*******************************************************************************************
		                                CONFIGURATION (1ère partie)
		*******************************************************************************************	
        */
    
        // Mise en variable des destinataires ($destinataireXX = "mail@domaine.fr"; $destXX = "nom du destinataire XX")
        // Problème de reception avec les adresses du type @hotmail.com @hotmail.fr ou @live.fr
        // Si vous avez un/des caractère(s) spécial(aux) à mettre dans le prénom et/ou le nom, mettez le caractère ascii du/des caractère(s)) spécial(aux)
        // (exemple : pour afficher Grégory, écrire Gr&eacute;gory ou Gr&#233;gory)
        // besoin d'aide : http://www.commentcamarche.net/contents/html/htmlcarac.php3
        $destinaire1 = "pseudo1@domaine.fr";
        $dest1 = "Pr&#233;nom1 NOM1";
        $destinaire2 = "pseudo1@domaine.fr";
        $dest2 = "Pr&eacute;nom2 NOM2";
        $destinaire3 = "pseudo1@domaine.fr";
        $dest3 = "Prenom3 NOM3";
        $destinaire4 = "pseudo1@domaine.fr";
        $dest4 = "Prénom4 NOM4";

        $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

        // copie ? (envoie une copie au visiteur)
        $copie = isset($_POST['copie']) ? $_POST['copie'] : 'non'; //mettre le choix par défaut (oui = case cochée)

        // Action du formulaire (si votre page a des paramètres dans l'URL)
        // si cette page est index.php?page=contact alors mettez index.php?page=contact
        // sinon, laissez vide
        $form_action = '';

        /*
		*******************************************************************************************
                                   FIN DE LA CONFIGURATION (1ère partie)
		*******************************************************************************************
        */
        
        /* cette fonction sert à nettoyer et enregistrer un texte */
        function Rec($text) {
            $text = trim($text); // delete white spaces after & before text
            if (1 === get_magic_quotes_gpc()) {
                $stripslashes = create_function('$txt', 'return stripslashes($txt);');
            }
            else {
                $stripslashes = create_function('$txt', 'return $txt;');
            }

            // Citation magiques ?
            $text = $stripslashes($text);
            $text = htmlspecialchars($text, ENT_QUOTES); // convertion en chaîne avec " et ' aussi
            $text = nl2br($text);
            return $text;
        }

        /* Cette fonction sert à vérifier la syntaxe d'un email saisi */
        function IsEmail($email) {
            $pattern = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
            return (preg_match($pattern,$email)) ? true : false;
        }

        $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
	
        // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
        $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : "";
        $prenom  = (isset($_POST['prenom']))  ? Rec($_POST['prenom'])  : "";
        $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : "";
        $sujet   = (isset($_POST['sujet']))   ? Rec($_POST['sujet'])   : "";
        $message = (isset($_POST['message'])) ? Rec($_POST['message']) : "";        
    
        // Vérification du statut du mail
        $email = (IsEmail($email)) ? $email : ""; // soit l'email est vidé si erroné, soit il vaut l'email entré
    
        // Vérification du destinataire et enregistrement du choix fait
        // Si des destinataires doivent être ajoutés, faites bien attention à la syntaxe else { if ($destinataire ...) {$choix ...}
        if ((isset($_POST['destinataire']))) {
            $destinataire = stripslashes(htmlentities($_POST['destinataire']));
            if ($destinataire == $destinaire1) {
                $choix = 1;
            }
            else {
                if ($destinataire == $destinaire2) {
                    $choix = 2;
                }
                else {
                    if ($destinataire == $destinaire3) {
                        $choix = 3;
                    }
                    else {
                        if ($destinataire == $destinaire4) {
                        $choix = 4;
                        }
                        else $choix = 0;
                    }
                }
            }
        }
        else {
            $destinataire = "";
            $choix = 0;
        }
    
        /*
		*******************************************************************************************
		                                CONFIGURATION (2nde partie)
		*******************************************************************************************
        */
        
        // Liste des messages d'erreur
        $error_msg = array(); // intialisation du tableau
		
        if ($nom == "") // Test si la chaïne de texte est vide
            $error_msg[] = "Entrez votre nom svp !"; // Ajout de l'erreur à la liste
        if ($prenom == "") // Test si la chaïne de texte est vide
            $error_msg[] = "Entrez votre pr&eacute;nom svp !"; // Ajout de l'erreur à la liste
        if ($email == "") // Test si la chaïne de texte est vide
            $error_msg[] = "Entrez votre email svp ! <b><i>S'il n'est pas valide, il sera effac&eacute;.</i></b>"; // Ajout de  l'erreur à la liste
	
        /* Vérifier le destinataire (permet la non-acceptation d'envoi avec le choix 'Faites votre choix...') */
        if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$destinataire)))
            $err_formulaire = false;
        elseif ($choix !== -1) {
            $error_msg[] = "Choisissez un destinataire svp!"; // Ajouter à la liste
            $choix = 0;
            $err_formulaire = true;
        }
	
        if ($sujet == "") // Test si la chaïne de texte est vide
            $error_msg[] = "Entrez le sujet de votre message svp !"; // Ajout de l'erreur à la liste
        if ($message == "") // Test si la chaïne de texte est vide
            $error_msg[] = "N'oubliez pas d'&eacute;crire votre message !"; // Ajout de l'erreur à la liste

        /*
		*******************************************************************************************
		                                  FIN DE LA CONFIGURATION
		*******************************************************************************************
        */

        if (isset($_POST['envoi'])) {
            // On va vérifier les variables et l'email ...
            if (IsEmail($email))
                $err_formulaire = false;
            else
                $err_formulaire = true;
		
            // affichage des éventuels erreurs à cause de champs vide
            if ($error_msg) {
                echo "<ul style='color: red; margin-top:0px;'>\n"; // Ouvre la liste
                foreach ($error_msg as $err) { //Ecrit chaque erreur de la liste
                    echo "               <li>".$err."</li>\n";
                }
                echo "            </ul>\n"."        ";    // Ferme la liste
            } 

            if (($nom != '') && ($prenom != '') && ($email != '') && ($sujet != '') && ($message != '')) {
                // les 4 variables sont remplies, on génère puis envoie le mail

                $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>'."\nContent-Type: text/html; charset=utf-8";
			
                // envoyer une copie au visiteur ?
                if ($copie == 'oui') {
                    $cible = $destinataire.','.$email;
                }
                else {
                    $cible = $destinataire;
                }
                
                // Envoi du mail
                if (mail($cible, $sujet, $message, $headers)) {
                    $_SESSION['envoi'] = 1; // validation de la session - message envoyé
                    $_SESSION['copie'] = $copie; // enregistrement du choix de copie pour la page de résultat
                    echo '<script language="Javascript">
document.location.replace("Resultat.php")
</script>'."\n";
                    exit();
                }
                else {
				    $_SESSION['envoi'] = 2; // validation de la session - message non-envoyé
                    echo '<script language= "Javascript">
document.location.replace("Resultat.php")
</script>'."\n";
                    exit();
                }
            }
            else {
                // une des 4 variables (ou plus) est vide ...
                $err_formulaire = true;
            }
        } // fin du if (!isset($_POST['envoi']))

        if (($err_formulaire) || (!isset($_POST['envoi'])))	{

            // afficher le formulaire
            echo '<form id="contact" method="post" action="'.$form_action.'">
        <fieldset><legend>Vos coordonn&eacute;es</legend>
        <table border="0">
            <tr>
                <td align="right" valign="top" width="179">'.'<label for="nom">Nom :</label>'.'</td>
                <td>'.'<input type="text" id="nom" name="nom" size="69" value="'.stripslashes($nom).'" tabindex="1" />'.'<br />'.'<br />'.'</td>
            </tr>
            <tr>
                <td align="right" valign="top" width="179">'.'<label for="prenom">Pr&eacute;nom :</label>'.'</td>
                <td>'.'<input type="text" id="prenom" name="prenom" size="69" value="'.stripslashes($prenom).'" tabindex="1" />'.'<br />'.'<br />'.'</td>
            </tr>
            <tr>
                <td align="right" width="179">'.'<label for="email">Email :</label>'.'</td>
                <td>'.'<input type="text" id="email" name="email" size="69" value="'.stripslashes($email).'" tabindex="2" />'.'<br />'.'</td>
            </tr>
        </table>
        </fieldset>
        <br />'."\n";
			

            // Listage des différents destinataires possible
            // Possibilité de mettre autant de destinaire que souhaité mais attention à respecter la mise en forme.

            ?>

        <label for="destinataire"> Votre message est adress&eacute; &agrave; :</label>
        <select id="destinataire" name="destinataire">
            <option<?php if ($choix == 0) { echo (' selected="selected"');} ?>>Faites votre choix...</option>
            <option value=""></option>
            <option<?php if ($choix == 1) { echo (' selected="selected"');} echo ' value="'.$destinaire1.'">'.$dest1; ?></option>
            <option<?php if ($choix == 2) { echo (' selected="selected"');} echo ' value="'.$destinaire2.'">'.$dest2; ?></option>
            <option<?php if ($choix == 3) { echo (' selected="selected"');} echo ' value="'.$destinaire3.'">'.$dest3; ?></option>
            <option<?php if ($choix == 4) { echo (' selected="selected"');} echo ' value="'.$destinaire4.'">'.$dest4; ?></option>
        </select>
    
        <?php
        echo '<br />'.'<br />
        <fieldset><legend>Votre message :</legend>
        <table border="0">
            <tr>
                <td align="right" valign="top" width="179">'.'<label for="sujet">Sujet du message :</label>'.'</td>
                <td>'.'<input type="text" id="sujet" name="sujet" size="69" value="'.stripslashes($sujet).'" tabindex="3" />'.'<br />'.'<br />'.'</td>
            </tr>
            <tr>
                <td align="right" valign="top" width="179">'.'<label for="message">Message :</label>'.'</td>
                <td>'.'<textarea id="message" name="message" tabindex="4" cols="69" rows="9">'.stripslashes($message).'</textarea>'.'<br />'.'</td>
            </tr>
        </table>
        </fieldset>
        <br />
        <input type="checkbox" id="copie" name="copie" value="oui" '?><?php if ($copie == "oui") { echo "checked ";} echo '/>Recevoir une copie du message envoy&eacute;. <span style="font-size: small;">(Cochez pour accepter)</span><br /><br />
        <div style="text-align:center;"><input type="reset" name="" value="R&eacute;initialiser le formulaire !" />&nbsp; &nbsp; &nbsp; <input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>
        </form>
        </td>
    </tr>
</table>
</div>
</body>
</html>';
}
?>

 Conclusion

Ce formulaire fonctionne très bien sur un serveur free.

N'hésitez pas à me dire ce que vous en pensez / le noter et si je peux améliorer encore mon code ; éventuellement commment !

En espérant qu'il devienne utile, à bientôt!

----------

Un problème empêche l'envoi de mail vers des adresses du type @hotmail.com, @hotmail.fr et @live.fr pour les autres types d'adresse pas de problème.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 janvier 2011 17:12:10 :
oubli de quelque remplacement de é par &eacute; ajout d'un aperçu
05 janvier 2011 12:05:50 :
Retrait du dernier eregi Améliorationde la fonction vérification du mail Correction de code
07 janvier 2011 15:45:06 :
Changement de catégorie
15 janvier 2011 10:19:47 :
Ajout du code sous forme de fichier
27 janvier 2011 11:01:50 :
Correction Initialisation des variables
09 août 2011 15:15:29 :
1-Correction d'un bug qui affichait des erreurs à tout va 2-Mise en variable des destinataires 3-Enregistrement du destinataire choisi si l'envoi n'a pas été effectué suite à une erreur de champs vide ou erroné 4-Redirection vers une page lorsqu'un message a été envoyé avec succès ou si l'envoi a échoué 5-Codage du mail en utf-8 6-Nettoyage du code 7-Nouveau screenshot + nouveau zip
09 août 2011 15:19:44 :
Modification du screenshot
11 août 2011 12:29:36 :
1- Le visiteur a le choix de recevoir ou non une copie du message qu'il va envoyer. 2- Nettoyage du code pour afficher un code source propre dans le navigateur.

 Sources du même auteur

Source avec Zip Source avec une capture LOGIN SHA1 + CRÉATION UTILISATEUR

 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope
ENCODEUR D'ADRESSES EMAILS par Boris090

 Sources en rapport avec celle ci

FORMULAIRE PHP + VERIFICATION + ENVOI DU MAIL par cosmoswarezone1
Source avec une capture FORMULAIRE DE CONTACT MULTICHAMPS par viki53
Source avec Zip CARTE DE VOEUX : FAITES DES VOEUX ET SOYEZ HEUREUX par abdelaziz_info
Source avec Zip FORMULAIRE EN PHP FLASH ENVOYER PAR MAIL par younes371
Source avec Zip RESTEZ TOUJOURS EN CONTACT ET RECEVEZ DES INFORMATIONS par abdelaziz_info

Commentaires et avis

Commentaire de cod57 le 04/01/2011 21:01:12

bonsoir

je te reposte ton script
plusieurs variables non definies
il faut utiliser isset
le script fonctionne
mais je pense que tu peux l'ameliorer

as tu pensé à une technique anti double postage (f5 et c'est reparti ...) tu devrais rediriger vers une page de remerciement
et mettre une variable de controle a false apres l'envoi ...
pense aux sessions

si tu appuies sur f5 apres l'envoi ton mail est renvoyé et renvoyé ...

bne prog

a++


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Envoyer un mail</title>
</head>
<body>
<div><br />Envoyer un mail<br /><br />
<table border="0" cellspacing="0" cellpadding="0" style="width: 893px; border-collapse: collapse">
<tr style="height: 35.25pt">
<td>

<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************

*/
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

// destinataire est l'adresse mail de destination. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
// $destinataire = 'destinataire';

// copie ? (envoie une copie au visiteur)
$copie = 'oui';

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';

// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu !<br />
Vous allez recevoir une copie de votre message dans la bo&icirc;te email que vous avez &eacute;crit.";
$message_non_envoye = "L'envoi du mail a échou&eacute;, veuillez r&eacute;essayer ult&eacute;rieurement SVP.";

// Liste des messages d'erreur
$error_msg=array(); // intialisation du tableau

if (isset($nom) && $nom=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre nom svp!";
if (isset($prenom) && $prenom=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre pr&eacute;nom svp!"; // Ajouter à la liste
if (isset($email) && $email=="") // Test si la chaïne de texte est vide
$error_msg[]="Entrez votre email svp! S'il n'est pas valide, il sera effac&eacute;."; // Ajouter à la liste

/* Vérifier le destinataire (permet la non-acceptation d'envoi avec le choix 'Faites votre choix...') */
if(isset($_POST['destinataire'])) {$destinataire = stripslashes(htmlentities($_POST['destinataire']));} else {$destinataire="";}
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$destinataire)))
$err_formulaire = false;
else
{
$error_msg[]="Choisissez un destinataire svp!"; // Ajouter à la liste
$err_formulaire = true;
}

if (isset($sujet) && $sujet=="") // Test si la chaine de texte est vide
$error_msg[]="Entrez le sujet de votre message svp!"; // Ajouter à la liste
if (isset($message) && $message=="") // Test si la chaine de texte est vide
$error_msg[]="N'oubliez pas d'&eacute;crire votre message!"; // Ajouter à la liste

// Message d'erreur du formulaire
// $message_formulaire_invalide = "V&eacute;rifiez que tous les champs soient bien remplis"."<br />";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
/* cette fonction sert à nettoyer et enregistrer un texte */
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// Citation magiques ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // convertion en chaîne avec " et ' aussi
$text = nl2br($text);
return $text;
};

/* Cette fonction sert à vérifier la syntaxe d'un email saisi */
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

// si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
$nom          = (isset($_POST['nom']))           ? Rec($_POST['nom'])          : '';
$prenom       = (isset($_POST['prenom']))        ? Rec($_POST['prenom'])       : '';
$email        = (isset($_POST['email']))         ? Rec($_POST['email'])        : '';
$sujet        = (isset($_POST['sujet']))         ? Rec($_POST['sujet'])        : '';
$message      = (isset($_POST['message']))       ? Rec($_POST['message'])      : '';

if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vidé si erroné, soit il vaut l'email entré
if (IsEmail($email))
$err_formulaire = false;
else
$err_formulaire = true;

// affichage des éventuels erreurs à cause de champs vide
if ($error_msg) {
echo "<ul>\n"; // Ouvre la liste
foreach ($error_msg as $err) { //Ecrit chaque erreur de la liste
echo "<li>".$err."</li>\n";
}
echo "</ul>";    // Ferme la liste
}

if (($nom != '') && ($email != '') && ($sujet != '') && ($message != ''))

{
// les 4 variables sont remplies, on génère puis envoie le mail

$headers = 'De: '.$nom.'_'.$prenom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace("&#039;","'",$message);
$message = str_replace("&#8217;","'",$message);
$message = str_replace("&quot;",'"',$message);
$message = str_replace('<br />','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("&lt;","<",$message);
$message = str_replace("&gt;",">",$message);
$message = str_replace("&amp;","&",$message);


// Envoi du mail
if (mail($cible, $sujet, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{

      $message_formulaire_invalide="ton message";
      // une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide."\n";
$err_formulaire = true;
};
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))
{

// afficher le formulaire
echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
echo ' <fieldset><legend>Vos coordonn&eacute;es</legend>'."\n";
echo ' <table border="0">';
echo ' <tr>';
echo ' <td align="right" valign="top" width="179">';
echo ' <label for="nom">Nom :</label>'."\n";
echo ' </td>';
echo ' <td>';
echo ' <input type="text" id="nom" name="nom" size="69" value="'.stripslashes($nom).'" tabindex="1" />'."\n";
echo ' <br />'."\n";
echo ' <br />'."\n";
echo ' </td>';
echo ' </tr>';
echo ' <tr>';
echo ' <td align="right" valign="top" width="179">';
echo ' <label for="prenom">Pr&eacute;nom :</label>'."\n";
echo ' </td>';
echo ' <td>';
echo ' <input type="text" id="prenom" name="prenom" size="69" value="'.stripslashes($prenom).'" tabindex="1" />'."\n";
echo ' <br />'."\n";
echo ' <br />'."\n";
echo ' </td>';
echo ' </tr>';
echo ' <tr>';
echo ' <td align="right" valign="top" width="179">';
echo ' <label for="email">Email :</label>'."\n";
echo ' </td>';
echo ' <td>';
echo ' <input type="text" id="email" name="email" size="69" value="'.stripslashes($email).'" tabindex="2" />'."\n";
echo ' <br />'."\n";
echo ' </td>';
echo ' </tr>';
echo ' </table>';
echo ' </fieldset>'."\n";
echo ' <br />';


// ne pas modifier les lignes <option selected="choix" ... et <option value="" ...
// Ecrire les choix suivant cette syntaxe <option value="pseudo@domaine.fr">Personne</option> où pseudo@domaine.fr est une adresse mail de destination
  // et Personne ce qui sera affiché dans la liste déroulante
// Possibilité de mettre autant de <option value="pseudo@domaine.fr">Personne</option> que souhaité

?>

<label for="destinataire"> Votre message est adress&eacute; &agrave; :</label>
<select id="destinataire" name="destinataire">
       <option selected="selected">Faites votre choix...</option>
<option value=""></option>
<option value="abyz@free.fr">Personne1</option>
<option value="mail2@domaine.fr">Personne2</option>
<option value="mail3@domaine.fr">Personne3</option>
<option value="mail4@domaine.fr">Personne4</option>
</select>
    
<?php
echo ' <br />';
echo ' <br />'."\n";
echo ' <fieldset><legend>Votre message :</legend>'."\n";
echo ' <table border="0">';
echo ' <tr>';
echo ' <td align="right" valign="top" width="179">';
echo ' <label for="sujet">Sujet du message :</label>'."\n";
echo ' </td>';
echo ' <td>';
echo ' <input type="text" id="sujet" name="sujet" size="69" value="'.stripslashes($sujet).'" tabindex="3" />'."\n";
echo ' <br />'."\n";
echo ' <br />'."\n";
echo ' </td>';
echo ' </tr>';
echo ' <tr>';
echo ' <td align="right" valign="top" width="179">';
echo ' <label for="message">Message :</label>'."\n";
echo ' </td>';
echo ' <td>';
echo '   <textarea id="message" name="message" tabindex="4" cols="69" rows="9">'.stripslashes($message).'</textarea>'."\n";
echo ' <br />'."\n";
echo ' </td>';
echo ' </tr>';
echo ' </table>';
echo ' </fieldset>'."\n";
echo ' <br />'."\n";
echo ' <div style="text-align:center;"><input type="reset" name="" value="R&eacute;initialiser le formulaire !" />&nbsp; &nbsp; &nbsp;
        <input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>'."\n";
echo '</form>'."\n";
};
?>

</td>
</tr>
</table>
</div>
</body>
</html>

Commentaire de aventurier19 le 05/01/2011 12:17:10

Merci COD57 d'avoir jeter un oeil sur le code.

Commme tu as pu le voir la 1ère fois les variables ne sont pas initialisées, pourquoi.
Si je les initialise au début en faisant $nom=''; :
   - en cliquant sur envoyer le script efface les variables entrées par l'expéditeur et de ce fait ne veut pas m'envoyer le mail et mets que les champs sont vide
Si je les initialise au début en faisant $nom=(isset($nom)); :
   - en cliqant sur envoyer le script ne peut plus voir si des variable sont vide.

Je suis débutant, si tu sais comment, peux-tu m'aider.

PS : Tu as recopier le code ; avait-tu fais une modif ?

Pour l'anti F5 j'aimerai qu'il soit dans le fichier, donc je cherche et prog.

Commentaire de cod57 le 05/01/2011 13:55:28

bonjour

oui le code je l'ai changé pour plus avoir les erreurs de variables non definies ... (en php5 strict) c'est pour ça que je le reposte. Bon je te poste un exemple essaie le.
tu evites le repostage ainsi

a++

<?php
/* cod57 pour phpcs 2011*/
/* change $destinataire */

if(isset($_GET['confirmation']) && $_GET['confirmation']=='ok'){
echo '<font color="red">Message envoyé !</font><br />
Un autre message cliquer <a href="?">ici</a><br />
<hr />';
$_GET['confirmation']="";
exit;
}else{
echo 'Merci de nous écrire<br /><hr />';
}

$form='<form method="post" action="'.$_SERVER['PHP_SELF'].'">
<input type="hidden" name="subject" value="E-MAIL DU SITE">

<table>

<tr>
<td>Votre nom :</td>
<td><input type="text" name="nom" size="30"></td>
</tr>

<tr>
<td>Votre e-mail :</td>
<td><input type="text" name="email" size="30"></td>
</tr>

<tr>
<td>Votre sujet :</td>
<td><input type="text" name="sujet" size="30"></td>
</tr>

<tr>
<td colspan=2>Vos commentaires :<br>
<textarea cols="50" rows="6" name="message"></textarea>
</td>
</tr>

</table>

<br>
<input type="submit" name="sub" value="Envoyer"> - <input type="reset" name="res" value="Annuler">
</form>';

if(isset($_POST['sub']) && $_POST['sub']=="Envoyer"){
$destinataire="???@free.fr";
$header="From: ".$destinataire;
$hidden_sujet=$_POST['subject'];
unset($_POST['sub']);
unset($_POST['subject']);
$message="";

  while (list($key,$val) = each($_POST)){
  $message .= "$key :\n$val\n\n";
  }

  if(mail($destinataire,$hidden_sujet,$message,$header)){
  //echo '<script>alert("E-mail envoyé")</script>';
  Header('Location:'.$_SERVER['PHP_SELF'].'?confirmation=ok');exit;
  }else{
  echo 'Problème avec la fonction mail sur le serveur !';exit;
  }
    
}else{
echo $form;exit;
}
?>

Commentaire de nickg le 27/03/2011 16:03:16

Ce script se démarque des autres . Avoir la possibilité envoyer un mel en sélectionnant un destinataire est super .
Ca donne l'air d'avoir un carnet d'adresse en permanence avec le formulaire.
Pour avoir cherché des heures sur le web , les formulaires de ce type sont extrêmement rares.
Super idée et encore merci pour ce travail

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

formulaire pour un site [ par fartounet ] Salutation J'ai un site et j'aimerai faire un formulaire qui serai envoy&#233; a mon Mail. avec en champ : E-mail, Alliance, du texte, et une partie a modification de script sur formulaire de contact [ par pi_delannoy ] Novice en PHP, j'ai repris un formulaire de contact chez Online ( form2mail.php ) qui correspond à me Problème réception données d'un formulaire de contact [ par lennynero58 ] lennynero58 Bonjour à tous. Voilà j'ai mis un formulaire en ligne sur mon site qui fontionne très bien mais une seule chose me manque: Je ne récupère envoyer le contenu d'un formulaire par mail [ par hamzvb ] Bonjour; j'ai héberger récemment mon site web, et je veux que lorsque quelqu'un remplit le formulaire contact, le contenu qui est enregistré dans la b problème avec formulaire php [ par snakeissat ] Salut, je débute avec php, j'ai essayé de faire un petit formulaire en html pour une page de contact qui envoi le nom et le prenom et le message à mon Verification de validité du format email dans un formulaire [ par carbonaro09 ] Bonjour a tous Je viens d'essayer d'implémenter un petit morceau de code pour vérifier la validité des adresses mail remplies dans mon formulaire de pb Mail() et php [ par thais781 ] Bonjour, J'ai un petit soucis, j'ai fait un formulaire que j'essaye d'envoyer via la fonction mail(...), je met le source ci-dessous : Le pb est que Interaction dans un formulaire [ par subaqua ] Bonjour à tous, Je cherche à afficher des données dans des champs en fonction d'un choix fait par l'utilisateur dans une liste déroulante. Prenons un formulaire html vérification php et envoi par mail avec deux pièces jointes [ par maxparo ] Bonjour, j'ai un problème pour envoyer un mail avec deux pièces jointes à partir d'un formulaire. Je n'ai pas l'habitude du php et on m'a demandé d'ad


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales