Formulaire PHP envoyé directement sur adresse mail
Hors ligneVerso Le 31/01/2011 à 12:01 Profil de Verso Configuration de Verso

Bonjour tout le monde !

 

Je suis en train de refaire notre site pro et découvre le PHP.

J'ai créé un formulaire de renseignements qui nous serait envoyé directement sur notre adresse mail.

Comme je l'ai fait en apprenant de-ci, delà pourriez-vous me dire si j'ai fais des erreurs SVP ?

voici le formulaire en lui-même (demande_de_renseignements.php):

<!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>
<title>Demandes de renseignements</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<meta name="description" content="Un spectacle pour l'anniversaire de votre enfant, composé de sketchs, magie, gags et scuptures sur ballons" />
<meta name="keywords" content="spectacle, clowns, anniversaire, enfants, gâteau, magie, gags, sculptures sur ballons, tout public, fête" />
<meta name="robots" content="index, follow" />
<meta name="revisit-after" content="1days" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" title="Design_Recto-Verso" type="text/css" href="Recto-Verso.css" />
</head>
<body>
<?php include("haut+menu.php"); ?>
<!-- fin  entête de page -->
    <!-- Corps de la page -->
        <!-- début du formulaire -->
<h1>Pour avoir des renseignements merci de remplir TOUS les champs : </h1>
<p>&nbsp;</p>
<form method="post" action="send_email.php">
   <fieldset>
<legend>Vos coordonnées</legend> <!-- Titre du fieldset -->
<p>&nbsp;</p>
<p><label for="organisation">Oragnisateur : Association, CE, Comité des fêtes, Centres de Loisirs, APE, Particulier, etc ...</label><br /><input type="text" name="organisation" size="50" tabindex="10"/></p>
<p><label for="civilite">Civilité :</label>
        <select id="civilite" name="civilite">
            <option value="mr" selected="selected">Monsieur</option>
            <option value="mme">Madame</option>
            <option value="mlle">Mademoiselle</option>
        </select></p>
<p><label for="nom">Votre nom</label><br /><input type="text" name="nom" size="40" tabindex="50"/></p>
<p><label for="mail">Adresse mail :</label><br /><input type="text" name="mail" size="40" tabindex="60"/></p>
<p><label for="telHB">T&eacute;l&eacute;phone heures de bureau :</label><br />
<input type="text" name="telHB" size="40" maxlength="15" tabindex="70"/></p>
<p><label for="telHR">T&eacute;l&eacute;phone heures de repas :</label><br />
<input type="text" name="telHR" size="40" maxlength="15" tabindex="80"/></p>
<p><label for="adresse">Num&eacute;ro et rue :</label><br /><input type="text" name="adresse" size="40" tabindex="90"/></p>
<p><label for="CP">Code postal :</label><br /><input type="text" name="CP" size="40" tabindex="100"/></p>
<p><label for="ville">Ville :</label><br /><input type="text" name="ville" size="40" tabindex="110"/></p>
<p>&nbsp;</p>
</fieldset>
<fieldset>
<legend>Votre projet</legend> <!-- Titre du fieldset -->
<p>&nbsp;</p>
<label for="projet">Projet :</label>
        <select id="projet" name="projet">
            <option value="Un spectacle de clowns" selected="selected">Un spectacle de clowns</option>
            <option value="Une animation commerciale">Une animation commerciale</option>
            <option value="Une fête familliale">Une fête familliale</option>
            <option value="Autre événement">Autre événement</option>
        </select>
<p><label for="precision">Pr&eacute;cisions (date, heures, etc ...)  :</label><br />
<textarea name="precision" rows="8" cols="50" tabindex="120"></textarea></p>
<label for="lieu">Où à lieu votre f&ecirc;te :</label>
        <select id="projet" name="projet">
            <option value="en intérieur" selected="selected">en intérieur</option>
            <option value="en extérieur">en extérieur</option>
        </select>
<p>&nbsp;</p>
</fieldset>
<p><input type="submit" value="Envoyer le forumulaire" tabindex="190"/> <input type="reset" value="Effacer" tabindex="200"/></p>
</form>
        <!-- Fin du formulaire -->
      <p>&nbsp;</p>
      <p>&nbsp;</p>
    <!-- Fin corps de la page-->  
<?php include("Bas.php"); ?>
</body>
</html>

 

Voici la page qui récupère et envoie les infos, enfin j'espère ! (send_email.php) :

 

<!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>
<title>Spectacles fêtes familiales par les clowns Recto-Verso</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" title="Design_Recto-Verso" type="text/css" href="Recto-Verso.css" />
<!--[if lte IE 7]>
<script type="text/javascript" src="menu.js"></script>
<![endif]-->
</head>
<body>
<?php include("haut+menu.php"); ?>
<!-- Début corps de la page-->
<?php
/* Si le formulaire est envoyé traitons-les infos */
if (isset($_POST['submit']))
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {
      $organisation    = stripslashes(trim($_POST['organisation']));
      $civilite        = stripslashes(trim($_POST['civilite']));
      $nom             = stripslashes(trim($_POST['nom']));
      $mail    = stripslashes(trim($_POST['mail']));
      $telHB        = stripslashes(trim($_POST['telHB']));
      $telHR        = stripslashes(trim($_POST['telHB']));
      $adresse        = stripslashes(trim($_POST['adresse']));
      $CP            = stripslashes(trim($_POST['CP']));
      $ville        = stripslashes(trim($_POST['ville']));
      $precision    = stripslashes(trim($_POST['precision']));
      $lieu            = stripslashes(trim($_POST['lieu']));
    }
    else
    {
      $organisation    = trim($_POST['organisation']);
      $civilite        = trim($_POST['civilite']);
      $nom             = trim($_POST['nom']);
      $mail    = trim($_POST['mail']);
      $telHB        = trim($_POST['telHB']);
      $telHR        = trim($_POST['telHB']);
      $adresse        = trim($_POST['adresse']);
      $CP            = trim($_POST['CP']);
      $ville        = trim($_POST['ville']);
      $precision    = trim($_POST['precision']);
      $lieu            = trim($_POST['lieu']);
    }
/* Vérifier si le format d'une adresse e-mail est correct */
    $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
    
/* Vérifier qu'aucun en-tête n'est inséré dans nos champs */
    $regex_head = '/[\n\r]/';
    
/* Si le formulaire n'est pas posté de notre site on renvoie vers notre page de formulaire */
    if($_SERVER['HTTP_REFERER'] != 'http://www.clowns-rectoverso.com/demande_de_renseignements.php')
    {
      header('Location: http://www.clowns-rectoverso.com/');
    }
/* Vérifier que tous les champs sont remplis */
    elseif (empty($organisation)
           || empty($civilite)
           || empty($nom)
           || empty($mail)
           || empty($telHB)
           || empty($telHR)
           || empty($adresse)
           || empty($CP)
           || empty($ville)
           || empty($projet)
           || empty($precision))
    {
      $alert = 'Tous les champs doivent être renseignés MERCI';
    }
    /* Vérifier que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      $alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
    }
    /* Vérifier qu'il n'y a aucun header dans les champs */
    elseif (preg_match($regex_head, $organisation)
            || preg_match($regex_head, $civilite)
            || preg_match($regex_head, $nom)
            || preg_match($regex_head, $mail)
            || preg_match($regex_head, $telHB)
            || preg_match($regex_head, $telHR)
            || preg_match($regex_head, $adresse)
            || preg_match($regex_head, $CP)
            || preg_match($regex_head, $ville)
            || preg_match($regex_head, $projet)
            || preg_match($regex_head, $precision))
    {
        $alert = 'Les en-têtes sont interdites dans les champs du formulaire';
    }
    /* Si aucun problème et aucun cookie n'est détecté, construire le message et envoyer l'e-mail */
    elseif (!isset($_COOKIE['sent']))
    {
        /* Destinataire du formulaire - NOUS ! */
        $to = 'webmaster@clowns-rectoverso.com';
      
        /* Contenu du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis clowns-rectoverso.com par '.$civilite.' '.$nom."\r\n\r\n";
        $msg .= 'Pour une demande de renseignements :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
        
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
        
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
            $alert = 'E-mail envoyé avec succès';
            
            /* On créé un cookie de courte durée (120 secondes) pour éviter de
            * renvoyer un mail en rafraichissant la page */
            setcookie("sent", "1", time() + 120);
            
            /* Détruire la variable $_POST */
            unset($_POST);
        }
        else
        {
            $alert = 'Erreur d\'envoi de l\'e-mail';
        }
          
    }
    /* Cas où le cookie est créé et que la page est rafraichie, détruire la variable $_POST */
    else
    {
        unset($_POST);
    }
?>
<!-- Fin corps de la page-->
<?php include("Bas.php"); ?>
</body>
</html>

Je ne parviens pas à le tester  (j'utilise wamp) , mais je pense que je "merdoie" dans le smtp,l'adresse mail,

et le localhost je dois tout mélanger !

 

Merci de me dire s'il y a des erreurs et où ?

 

Autre question dans le formulaire TOUS les champs sont obligatoires, sauf pour le numéro de tel :

|| empty($telHB)

|| empty($telHR)

 

J'aimerai que se soit  l'un ou l'autre, mais au moins un obligatoire et les deux possibles !

 est-ce trop demander ? si c'est possible comment faire je n'ai rien trouvé à ce sujet.

 

MERCI de l'attention que vous porterez à mes problèmes,

 

à bientôt, Verso cheeky

Hors ligneVerso Le 07/02/2011 à 16:31 Profil de Verso Configuration de Verso

Bonjour,

 

J'ai fais de nombreuses modif, avec des corrections importantes.

 

Maintenant je ne parviens pas à tester l'envoi du mail.

 

J'utilise wamp pour tester mon PHP, et j'ai fait les modif SMPT + email

 

Mais lorsque je valide le formulaire j'arrive sur la page "vide"  (send-email.PHP) et je ne reçois pas de mail

et je n'ai aucun message d'erreur, donc je ne sais pas où chercher.

 

Voici le code de ma page send-email.php :

[CODE]

<!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>
<title>Page d'envoi du formulaire de demande de renseignements (send-email)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" title="Design_Recto-Verso" type="text/css" href="Recto-Verso.css" />
<!--[if lte IE 7]>
<script type="text/javascript" src="menu.js"></script>
<![endif]-->
</head>
<body>
<?php include("haut+menu.php"); ?>
<!-- Début corps de la page-->
<?php
/* Si le formulaire est envoyé traitons-les infos */
if (isset($_POST['submit']))
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {
      $organisation    = stripslashes(trim($_POST['organisation']));
      $civilite        = stripslashes(trim($_POST['civilite']));
      $nom             = stripslashes(trim($_POST['nom']));
      $expediteur    = stripslashes(trim($_POST['mail']));
      /* Vérifier que le format de l'e-mail est correct */
        if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#"))
        {
        }
        elseif (preg_match($regex_mail, $mail))
        {
        echo 'L\'adresse ' . $_POST['mail'] . ' n\'est pas valide, recommencez !';
        }


      $tel            = stripslashes(trim($_POST['tel']));
      /* Vérifier que le format du numéro de téléphone est correct */
        if (preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#", $_POST['tel']))
        {
        }
        elseif  (preg_match($regex_tel, $tel))
        {
        echo 'Le ' . $_POST['tel'] . ' n\'est pas valide, recommencez !';
        }

      $horaires        = stripslashes(trim($_POST['horaires']));
      $adresse        = stripslashes(trim($_POST['adresse']));
      $CP            = stripslashes(trim($_POST['CP']));
      $ville        = stripslashes(trim($_POST['ville']));
      $option        = stripslashes(trim($_POST['option']));
      $message        = stripslashes(trim($_POST['precision']));
      $lieu            = stripslashes(trim($_POST['lieu']));
    }
    else
    {
      $organisation    = trim($_POST['organisation']);
      $civilite        = trim($_POST['civilite']);
      $nom             = trim($_POST['nom']);
      $expediteur    = trim($_POST['mail']);
      $tel            = trim($_POST['tel']);
      $horaires        = trim($_POST['horaires']);
      $adresse        = trim($_POST['adresse']);
      $CP            = trim($_POST['CP']);
      $ville        = trim($_POST['ville']);
      $option        = trim($_POST['option']);
      $precision    = trim($_POST['precision']);
      $lieu            = trim($_POST['lieu']);
    }

/* Vérifier que tous les champs sont remplis */
    if($_SERVER['HTTP_REFERER'] != 'send_email.php')
    {
      header('Location: Demande_de_renseignements.php');
    }

    elseif   (empty($organisation)
           || empty($civilite)
           || empty($nom)
           || empty($expediteur)
           || empty($tel)
           || empty($horaires)
           || empty($adresse)
           || empty($CP)
           || empty($ville)
           || empty($option)
           || empty($precision)
           || empty($lieu)
           )
    {
      $alert = "Tous les champs doivent être renseignés MERCI";
    }
    
    /* Formule pour vérifier qu'aucun en-tête n'est inséré dans nos champs */
    $regex_head = '/[\n\r]/';   

    /* On vérifie qu'il n'y a aucun header dans les champs */
        if  (preg_match($regex_head, $organisation)
            || preg_match($regex_head, $civilite)
            || preg_match($regex_head, $nom)
            || preg_match($regex_head, $expediteur)
            || preg_match($regex_head, $tel)
            || preg_match($regex_head, $horaires)
            || preg_match($regex_head, $adresse)
            || preg_match($regex_head, $CP)
            || preg_match($regex_head, $ville)
            || preg_match($regex_head, $option)
            || preg_match($regex_head, $precision)
            || preg_match($regex_head, $lieu))
    {
        $alert = 'Les en-têtes sont interdites dans les champs du formulaire';
    }
    else
    {
    /* envoi de l'e-mail */
    }  
    
    /* Si le formulaire n'est pas posté de notre site on renvoie vers le formulaire */
    if ($_SERVER['HTTP_REFERER'] != 'http://www.clowns-rectoverso.com/send_email.php')
    {  
    header('Location: http://www.clowns-rectoverso.com/Demande_de_renseignements.php');
    }
    else
    {  
    /* envoi de l'e-mail */
    }

        /* Destinataire du formulaire - NOUS ! */
        $to = 'anhuta@wanadoo.fr';
      
        /* Contenu du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis clowns-rectoverso.com par '.$civilite.' '.$nom."\r\n\r\n";
        $msg .= 'Pour une demande de renseignements  pour :'."\r\n";
        $msg .= $expediteur."\r\n";
        $msg .= $organisation."\r\n";
        $msg .= $tel."\r\n";
        $msg .= $horaires."\r\n";
        $msg .= $adresse."\r\n";
        $msg .= $CP."\r\n";
        $msg .= $ville."\r\n";
        $msg .= $option."\r\n";
        $msg .= $lieu."\r\n";
        $msg .= $precision."\r\n";
        
        
         /* En-têtes de l'e-mail */
        $mailheaders = 'From: '.$nom.' <'.$expediteur.'> Demande de renseignements'."\r\n\r\n";
        
          /* Envoi de l'e-mail */
        if (mail($to, $adresse, $msg, $mailheaders))
        {
            header('Location: http://www.clowns-rectoverso.com/Remerciements-formulaire.php');   
        }
        }
        else
        {
            $alert = 'Erreur d\'envoi de l\'e-mail';
        }
          
?>

<!-- Fin corps de la page-->
<?php include("Bas.php"); ?>
</body>
</html>

[/CODE]

 

Voilà j'espère que vous pourrez m'aider,

 

MERCI, Verso49

 

Hors ligneTigene Le 07/02/2011 à 17:04 Profil de Tigene Configuration de Tigene

Viconaute Modérateur

Bonjour Verso

Désolé de ne pas pouvoir t'apporter la moindre petite aide, mais je t'apporte toute ma symphathie

@+

--

Ce n'est pas parce qu'on a quelque chose à dire, qu'il faut forcément l'ouvrir

Hors ligneAnthony Le 07/02/2011 à 19:26 Profil de Anthony Configuration de Anthony

Admin

Salut smiley

Un moment dans ton code PHP tu as mis if(isset($_POST['submit']))

Or dans ton code HTML tu n'as pas de <input type="submit" name="submit" value="Envoyer" />

Essaie de rajouter un name="submit" ;)

--

Hors ligneVerso Le 08/02/2011 à 16:37 Profil de Verso Configuration de Verso

smiley

 

Bonjour vous deux !

 

Merci pour avoir repéré le "bout" qui manquait ! cheeky

 

Bon maintenant  j'ai ça comme erreur

Warning: mail() [function.mail]: SMTP server response: 550 5.1.0 Emetteur invalide. Invalid Sender. OFR_415 [415] in D:\wamp\www\Recto-Verso\send_email.php on line 145

je pense que cela vient de wamp pourtant j'ai modifié ici :

 

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.orange.fr
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = MOI@orange.fr

 

Et effectivement je ne reçois rien si vous avez une idée , MERCI encore

 

Verso49

 

PS j'ai désinstallé et réinstallé WAMP en  changeant le smtp et l'adresse mail directement à l'install et là TOUT FONCTIONNE !

 

MERCI mille fois comme d'hab  yes

 

Verso

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels