PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 07-09-2009 16:23:32

gilgab
Membre
Inscription : 07-09-2009
Messages : 4

[Résolu] form probleme transmission php

Bonjour à tous, j'ai un problème, je souhaite transmettre par mail des informations récupérées par un formulaire sur un site web (en cours de test).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html lang="fr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>titre de la page</title>
    <link rel="stylesheet" type="text/css" href="css/base.css" media="screen" />
    <!--[if lte IE 6]>
      <link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" />
    <![endif]-->
   
    <link rel="stylesheet" type="text/css" href="css/view.css" media="all">
    <script type="text/javascript" src="js/view.js"></script>
    <script type="text/javascript" src="js/calendar.js"></script>
   
  </head>
 
  <body>
    <div id="global">
      <div id="header">
        <h1>titre de la page</h1>
      </div>
      <div id="center">
        <div id="content">

          <form id="form_97412" class="appnitro"  method="post" action="contact_envoi.php">
          <div class="form_description">
            <h2>Contact</h2>
            <p>Pour une réservation, une demande de renseignement, ou tout simplement, nous envoyer un petit bonjour.
            </p>
            </div>
           
          <ul >
          <li id="li_1" >
            <label class="description" for="element_1">Civilité </label>
            <div class="left">
              <input id="prenom" name="prenom" class="element text medium" type="text" maxlength="255" value=""/>
              <label for="prenom">Prénom</label>
            </div>
            <div class="right">
              <input id="nom" name="nom" class="element text medium" type="text" maxlength="255" value=""/>
              <label for="nom">Nom</label>
          </li>
          <li id="li_2" >
            <div class="left">
              <input id="email" name="email" class="element text medium" type="text" maxlength="255" value=""/>
              <label for="email">Email</label>
            </div>
            <div class="right">
              <input id="telephone" name="telephone" class="element text medium" type="text" maxlength="255" value=""/>
              <label for="telephone">Téléphone</label>
            </div>         
          </li>
         
          <li id="li_3" >
            <label class="description" for="element_5">Adresse </label>
            <div>
              <input id="adresse1" name="adresse1" class="element text large" value="" type="text">
              <label for="adresse1">Numéro et rue</label>
            </div>
            <div>
              <input id="adresse2" name="adresse2" class="element text large" value="" type="text">
              <label for="adresse2">Adresse Ligne 2</label>
            </div>
            <div class="left">
              <input id="codepostal" name="codepostal" class="element text medium" maxlength="15" value="" type="text">
              <label for="codepostal">Code Postal</label>
            </div>   
            <div class="right">
              <input id="ville" name="ville" class="element text medium" value="" type="text">
              <label for="ville">Ville</label>
            </div>
            <div class="left">
              <input id="region" name="region" class="element text medium" maxlength="15" value="" type="text">
              <label for="region">Etats / Région / Département</label>
            </div>   
            <div class="right">
              <select class="element select medium" id="pays" name="pays">
              <option value="" selected="selected"></option>
              <option value="Afghanistan" >Afghanistan</option>
              <option value="Albania" >Albania</option>

/* ... je passe le reste des pays ... */

              </select>
              <label for="pays">Pays</label>
            </div>
          </li>
         
          <li id="li_4" >
            <div class="left">
    <label class="description" for="element_6">Date d'arrivée </label>
    <span>
      <input id="element_6_1" name="element_6_1" class="element text" size="2" maxlength="2" value="" type="text"> /
      <label for="element_6_1">JJ</label>
    </span>
    <span>
      <input id="element_6_2" name="element_6_2" class="element text" size="2" maxlength="2" value="" type="text"> /
      <label for="element_6_2">MM</label>
    </span>
    <span>
      <input id="element_6_3" name="element_6_3" class="element text" size="4" maxlength="4" value="" type="text">
      <label for="element_6_3">AAAA</label>
    </span>
 
    <span id="calendar_6">
      <img id="cal_img_6" class="datepicker" src="images/calendar.gif" alt="Pick a date."> 
    </span>
    <script type="text/javascript">
      Calendar.setup({
      inputField   : "element_6_3",
      baseField    : "element_6",
      displayArea  : "calendar_6",
      button     : "cal_img_6",
      ifFormat   : "%B %e, %Y",
      onSelect   : selectEuropeDate
      });
    </script>
     
    </div>
            <div class="right"><li id="li_7" >
    <label class="description" for="element_7">Date de départ </label>
    <span>
      <input id="element_7_1" name="element_7_1" class="element text" size="2" maxlength="2" value="" type="text"> /
      <label for="element_7_1">JJ</label>
    </span>
    <span>
      <input id="element_7_2" name="element_7_2" class="element text" size="2" maxlength="2" value="" type="text"> /
      <label for="element_7_2">MM</label>
    </span>
    <span>
      <input id="element_7_3" name="element_7_3" class="element text" size="4" maxlength="4" value="" type="text">
      <label for="element_7_3">AAAA</label>
    </span>
 
    <span id="calendar_7">
      <img id="cal_img_7" class="datepicker" src="images/calendar.gif" alt="Pick a date."> 
    </span>
    <script type="text/javascript">
      Calendar.setup({
      inputField   : "element_7_3",
      baseField    : "element_7",
      displayArea  : "calendar_7",
      button     : "cal_img_7",
      ifFormat   : "%B %e, %Y",
      onSelect   : selectEuropeDate
      });
    </script>
            </div>
          </li>  
          <li id="li_8" >
            <label class="description" for="objet">Objet : </label>
            <span>
              <input id="objet" name="objet" class="element radio" type="radio" value="Demande de renseignements" />
              <label class="choice" for="objet">Demande de renseignements</label>
              <input id="objet" name="objet" class="element radio" type="radio" value="Réservation : Maison principale" />
              <label class="choice" for="objet">Réservation : Maison principale</label>
              <input id="objet" name="objet" class="element radio" type="radio" value="Réservation : Gite 2" />
              <label class="choice" for="objet">Réservation : Gite 2</label>
            </span>
          </li>  
          <li id="li_9" >
            <label class="description" for="text">Votre message :</label>
            <div>
              <textarea id="text" name="text" class="element textarea small"></textarea>
            </div>
          </li>
          <li class="buttons">
              <input type="hidden" name="form_id" value="97412" />
            <input type="submit" name="envoi" value="Envoyer le formulaire !" />
          </li>
        </ul>
      </form>
       
      </div>
     
      <div id="sidebar">
        <h3>Navigation</h3>
          <ul id="menu">
            <li><a href="index.htm" title="Racine du site">Racine du site</a></li>
            <li><a href="accueil.htm" title="Accueil">Accueil</a></li>
            <li><a href="gite1.htm" title="Premier Gite">Gite 1</a></li>
            <li><a href="gite2.htm" title="Second Gite">Gite 2</a></li>
            <li><a href="acces.htm" title="Accès">Accès</a></li>
            <li><a href="contact.htm" title="Contact">Contact</a></li>
            <li><a href="credits.htm" title="Crédits">Crédits</a></li>
          </ul>

        </div>
      </div>
      <div id="footer">
        <p><img src="images/copyleft.png" title="copyleft">Je suis un pied de page. Et comme disait Groucho Marx, si vous n'aimez pas mes opinions, j'en ai d'autres.</p>
      </div>
    </div>
  </body>
</html>

Voila pour le formulaire html, mon probleme se situe probablement sur le script php qui doit envoyer le mail vers ma boite.

<?php
  /*  CONFIGURATION */
  $destinataire .= "mon adresse@monadresse.fr";
 
  // copie ? (envoie une copie au visiteur)
  $copie = 'non'; // 'oui' ou 'non'

  // Messages de confirmation du mail
  $text_envoye = "Votre text nous est bien parvenu !";
  $text_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

  // Messages d'erreur du formulaire
  $text_erreur_formulaire = "Vous devez d'abord <a href=\"contact.htm\">envoyer le formulaire</a>.";
  $text_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

  /* FIN DE LA CONFIGURATION */

  // on teste si le formulaire a été soumis
  if (!isset($_POST['envoi']))
  {
    // formulaire non envoyé
    echo '<p>'.$text_erreur_formulaire.'</p>'."\n";
  }
  else
  {
    /*
     * 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;');
      }

      // magic quotes ?
      $text = $stripslashes($text);
      $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
      $text = nl2br($text);
      return $text;
    };

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

    // formulaire envoyé, on récupère tous les champs.
    $prenom  = (isset($_POST['prenom']))  ? Rec($_POST['prenom'])  : ''; // prenom
    $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : ''; // nom
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : ''; // email
    $telephone   = (isset($_POST['telephone']))   ? Rec($_POST['telephone'])   : ''; // telephone
    $adresse1 = (isset($_POST['adresse1'])) ? Rec($_POST['adresse1']) : ''; // adresse1
    $adresse2 = (isset($_POST['adresse2'])) ? Rec($_POST['adresse2']) : ''; // adresse2
    $codepostal = (isset($_POST['codepostal'])) ? Rec($_POST['codepostal']) : ''; // codepostal
    $ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; // ville
    $region = (isset($_POST['region'])) ? Rec($_POST['region']) : ''; // region
    $pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; // pays
    $date_arr_jj = (isset($_POST['date_arr_jj'])) ? Rec($_POST['date_arr_jj']) : ''; // date_arr_jj
    $date_arr_mm = (isset($_POST['date_arr_mm'])) ? Rec($_POST['date_arr_mm']) : ''; // date_arr_mm
    $date_arr_aa = (isset($_POST['date_arr_aa'])) ? Rec($_POST['date_arr_aa']) : ''; // date_arr_aa
    $date_dep_jj = (isset($_POST['date_dep_jj'])) ? Rec($_POST['date_dep_jj']) : ''; // date_dep_jj
    $date_dep_mm = (isset($_POST['date_dep_mm'])) ? Rec($_POST['date_dep_mm']) : ''; // date_dep_mm
    $date_dep_aa = (isset($_POST['date_dep_aa'])) ? Rec($_POST['date_dep_aa']) : ''; // date_dep_aa
    $objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : ''; // objet
    $text = (isset($_POST['text'])) ? Rec($_POST['text']) : ''; // text

    // On va vérifier les variables et l'email ...
    $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

    if (($prenom != '') && ($nom != '') && ($email != '') && ($telephone != '') && ($adresse1 != '') && ($adresse2 != '') && ($codepostal != '') && ($ville != '') && ($region != '') && ($pays != '') && ($date_arr_jj != '') && ($date_arr_mm != '') && ($date_arr_aa != '') && ($date_dep_jj != '') && ($date_dep_mm != '') && ($date_dep_aa != '') && ($objet != '') && ($text != ''))
    {
      // les 4 variables sont remplies, on génère puis envoie le mail
      $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";

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

      // Remplacement de certains caractères spéciaux
      $text = str_replace("'","'",$text);
      $text = str_replace("’","'",$text);
      $text = str_replace(""",'"',$text);
      $text = str_replace('
<br>','',$text);
      $text = str_replace('
<br />','',$text);
      $text = str_replace("<","<",$text);
      $text = str_replace(">",">",$text);
      $text = str_replace("&","&",$text);
      $text.="\n";
      $text.="Prénom    : ".$prenom."\n";
      $text.="Nom       : ".$nom."\n";
      $text.="Email     : ".$email."\n";
      $text.="Téléphone : ".$telephone."\n";
      $text.="\n";
      $text.="Adresse     : ".$adresse1."\n";
      $text.="Adresse     : ".$adresse2."\n";
      $text.="Code postal  : ".$codepostal."\n";
      $text.="Ville       : ".$ville."\n";
      $text.="Région     : ".$region."\n";
      $text.="Pays    : ".$pays."\n";
      $text.="\n";
      $text.="Date d'
arrivée   : ".$date_arr_jj."/".$date_arr_mm."/".$date_arr_aa."\n";
      $text.="
Date de départ   : ".$date_dep_jj."/".$date_dep_mm."/".$date_dep_aa."\n";
     
      // Envoi du mail
      if (mail($cible, $objet, $text, $headers))
      {
        echo '<p>'.$text_envoye.'</p>'."
\n";
      }
      else
      {
        echo '<p>'.$text_non_envoye.'</p>'."
\n";
      };
    }
    else
    {
      // une des 3 variables (ou plus) est vide ...
      echo '<p>'.$text_formulaire_invalide.' <a href="
contact.htm">Retour au formulaire</a></p>'."\n";
    };
  }; // fin du if (!isset($_POST['envoi']))
?>

Il est evident que j'ai mis la bonne adresse à destinataire.
je reçois le message suivant lorsque je clic sur "envoyer" : "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur. Retour au formulaire".
J'ai beau pointer dans tous les sens, je remplis le formulaire completement.

Pouvez-vous m'aider s'il vous plait ?
Grand merci par avance.

Hors ligne

#2 07-09-2009 16:44:31

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : [Résolu] form probleme transmission php

Salut,

Une solution consiste à afficher toutes les variables au niveau de la ligne 77 (avant le test if (($prenom != '')...) pour vérifier laquelle est vide et ensuite chercher pourquoi.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 07-09-2009 21:18:15

gilgab
Membre
Inscription : 07-09-2009
Messages : 4

Re : [Résolu] form probleme transmission php

Bonsoir mcAllan, merci pour ta reponse,
je test demain et je te tiens au courant des résultats. Je compte employer :

 
echo $prenom;
echo ' ';
echo $nom;
echo ' ';
/* etc ... */

Cela te semble t'il juste ?

Merci, bonne soirée, a demain. En ce qui concerne AAO, je suis tout à fait d'accord, je pratique aussi (le plus souvent possible) .

Dernière modification par gilgab (07-09-2009 21:22:45)

Hors ligne

#4 08-09-2009 08:46:20

gilgab
Membre
Inscription : 07-09-2009
Messages : 4

Re : [Résolu] form probleme transmission php

Bonjour mcAllan,

J'avais en effet des problèmes de variable.
j'ai modifié le fichier php comme convenu, et j'ai pu tracer les erreurs.

grand merci mon script fonctionne.

Hors ligne

#5 08-09-2009 08:50:59

gilgab
Membre
Inscription : 07-09-2009
Messages : 4

Re : [Résolu] form probleme transmission php

Bonjour à tous,
je souhaite savoir comment marquer [résolu] dans l'entête de la discution.

Grand merci.

Dernière modification par gilgab (08-09-2009 08:51:40)

Hors ligne

#6 08-09-2009 17:21:02

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : [Résolu] form probleme transmission php

je souhaite savoir comment marquer [résolu] dans l'entête de la discution.

Il me semble que seul les admins et modos peuvent le faire.
C'est donc fait. wink

Par contre je ne m'explique pas pourquoi la discussion est passée "fermée"...?

Dernière modification par mcAllan (08-09-2009 17:23:21)


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

Pied de page des forums