pb avec un formulaire de contact en php

Répondre
dadamuse
dadamuse
Déconnecté
Bonjour,
j'ai récupéré un form php de contact auquel j'ai voulu ajouter 3 champs et là patatra !

Mon formulaire apparaît correctement, et quand je valide, j'ai cette erreur :

  1. Warning: mail() expects at most 5 parameters, 7 given in /../../../../../assembler.php(402) : eval()'d code on line 63 




voici le formulaire d'origine :

  1.  
  2. <?php
  3. define( 'MAIL_TO', /* >>>>> */'utilisateur@domaine.tld'/* <<<<< */ ); //ajouter votre courriel  
  4. define( 'MAIL_FROM', 'utilisateur@domaine.tld' ); // valeur par défaut  
  5. define( 'MAIL_OBJECT', 'objet du message' ); // valeur par défaut  
  6. define( 'MAIL_MESSAGE', 'votre message' ); // valeur par défaut  
  7.  
  8. $mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif  
  9. $errors = array(); // tableau des erreurs de saisie  
  10.  
  11. if( filter_has_var( INPUT_POST, 'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]  
  12. {  
  13. $from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );  
  14. if( $from === NULL || $from === MAIL_FROM ) // si le courriel fourni est vide OU égale à la valeur par défaut  
  15. {  
  16. $errors[] = 'Vous devez renseigner votre adresse de courrier &eacute;lectronique.';  
  17. }  
  18. elseif( $from === false ) // si le courriel fourni n'est pas valide  
  19. {  
  20. $errors[] = 'L\'adresse de courrier &eacute;lectronique n\'est pas valide.';  
  21. $from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );  
  22. }  
  23.  
  24. $object = filter_input( INPUT_POST, 'object', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );  
  25. if( $object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT ) // si l'objet fourni est vide, invalide ou égale à la valeur par défaut  
  26. {  
  27. $errors[] = 'Vous devez renseigner l\'objet.';  
  28. }  
  29.  
  30. /* pas besoin de nettoyer le message.
  31. / http://www.phpsecure.info/v2/article/MailHeadersInject.php
  32. / Logiquement, les parties message, To: et Subject: pourraient servir aussi à injecter quelque chose, mais la fonction mail()
  33. / filtre bien les deux dernières, et la première est le message, et à partir du moment où on a sauté une ligne dans l'envoi du mail,
  34. / c'est considéré comme du texte; le message ne saurait donc rester qu'un message.*/  
  35. $message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );  
  36. if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // si le message fourni est vide ou égale à la valeur par défaut  
  37. {  
  38. $errors[] = 'Vous devez &eacute;crire un message.';  
  39. }  
  40.  
  41. if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs  
  42. {  
  43. if( mail( MAIL_TO, $object, $message, "From:$from\nReply-to:$from\n" ) ) // tentative d'envoi du message  
  44. {  
  45. $mailSent = true;  
  46. }  
  47. else // échec de l'envoi  
  48. {  
  49. $errors[] = 'Votre message n\'a pas &eacute;t&eacute; envoy&eacute;.';  
  50. }  
  51. }  
  52. }  
  53. else // le formulaire est affiché pour la première fois, avec les valeurs par défaut  
  54. {  
  55. $from = MAIL_FROM;  
  56. $object = MAIL_OBJECT;  
  57. $message = MAIL_MESSAGE;  
  58. }  
  59. ?>
  60. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  61. <html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
  62. <head>
  63. <title>Contact</title>
  64. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  65. <meta http-equiv="content-language" content="fr" />
  66. <style type="text/css">
  67. html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
  68. body{ width:772px; margin:0 auto; padding:0; }
  69. textarea{ width:772px; }
  70. label{ display:block; font-weight:bold; }
  71. p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
  72. ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold;}
  73.  
  74. p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
  75. p em{ display:block; font-weight:normal; }
  76. </style>
  77. </head>
  78. <body>
  79. <h1>Contact</h1>
  80. <hr />
  81. <?php
  82. if( $mailSent === true ) // si le message a bien été envoyé, on affiche le récapitulatif  
  83. {  
  84. ?>
  85. <p id="success">Votre message a bien &eacute;t&eacute; envoy&eacute;.</p>
  86. <p><strong>Courriel pour la r&eacute;ponse&nbsp;:</strong><br /><?php echo( $from ); ?></p>
  87. <p><strong>Objet&nbsp;:</strong><br /><?php echo( $object ); ?></p>
  88. <p><strong>Message&nbsp;:</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
  89. <?php
  90. }  
  91. else // le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs  
  92. {  
  93. if( count( $errors ) !== 0 )  
  94. {  
  95. echo( "\t\t<ul>\n" );  
  96. foreach( $errors as $error )  
  97. {  
  98. echo( "\t\t\t<li>$error</li>\n" );  
  99. }  
  100. echo( "\t\t</ul>\n" );  
  101. }  
  102. else  
  103. {  
  104. echo( "\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );  
  105. }  
  106. ?>
  107. <form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
  108. <p>
  109. <label for="from">Courriel pour la r&eacute;ponse</label>
  110. <input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
  111. </p>
  112. <p>
  113. <label for="object">Objet</label>
  114. <input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
  115. </p>
  116. <p>
  117. <label for="message">Message</label>
  118. <textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
  119. </p>
  120. <p>
  121. <input type="reset" name="reset" value="Effacer" />
  122. <input type="submit" name="send" value="Envoyer" />
  123. </p>
  124. </form>
  125. <?php
  126. }  
  127. ?>
  128. </body>
  129. </html>
  130.  


voici ce que j'ai fais pour rajouter les champs $tel, $postal et *nom :

  1.  
  2. <?php
  3. define( 'MAIL_TO', 'monmail@monmail.com' ); //ajouter votre courriel  
  4. define( 'MAIL_FROM', '' ); // valeur par défaut  
  5. define( 'MAIL_OBJECT', 'Indiquez le sujet' ); // valeur par défaut  
  6. define( 'MAIL_MESSAGE', '' ); 
  7.    define( 'MAIL_TEL' , ''); 
  8.    define( 'MAIL_POSTAL', '' ); 
  9.    define( 'MAIL_NOM', '' ); 
  10.    
  11. $mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif  
  12. $errors = array(); // tableau des erreurs de saisie  
  13.  
  14. if( filter_has_var( INPUT_POST, 'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]  
  15. {  
  16. $from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );  
  17. if( $from === NULL || $from === MAIL_FROM ) // si le courriel fourni est vide OU égale à la valeur par défaut  
  18. {  
  19. $errors[] = 'Vous devez renseigner votre adresse de courrier &eacute;lectronique.';  
  20. }  
  21. elseif( $from === false ) // si le courriel fourni n'est pas valide  
  22. {  
  23. $errors[] = 'L\'adresse de courrier &eacute;lectronique n\'est pas valide.';  
  24. $from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );  
  25. } 
  26.       
  27.       //le sujet du message  
  28. $sujet = filter_input( INPUT_POST, 'sujet', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );  
  29. if( $sujet === NULL OR $sujet === false OR empty( $sujet ) OR $sujet === MAIL_OBJECT ) // si l'objet fourni est vide, invalide ou égale à la valeur par défaut  
  30. {  
  31. $errors[] = 'Vous devez renseigner l\'objet.';  
  32. } 
  33.       //le telephone  
  34. $tel = filter_input( INPUT_POST, 'tel', FILTER_UNSAFE_RAW );  
  35. if( $tel === NULL OR $tel === false OR empty( $tel ) OR $tel === MAIL_TEL )  
  36. {  
  37. $errors[] = 'Vous devez indiquer votre t&eacute;l&eacute;phone.';  
  38. } 
  39.       
  40.       // le nom 
  41.       $nom = filter_input( INPUT_POST, 'nom', FILTER_UNSAFE_RAW );  
  42. if( $nom === NULL OR $nom === false OR empty( $nom ) OR $nom === MAIL_NOM )  
  43. {  
  44. $errors[] = 'Vous devez indiquer votre nom.';  
  45. } 
  46.  
  47.       //le code postal 
  48.       $postal = filter_input( INPUT_POST, 'postal', FILTER_UNSAFE_RAW );  
  49. if( $postal === NULL OR $postal === false OR empty( $postal ) OR $postal === MAIL_POSTAL )  
  50. {  
  51. $errors[] = 'Vous devez indiquer votre code postal.';  
  52. } 
  53.       
  54.       $message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );  
  55. if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // si le message fourni est vide ou égale à la valeur par défaut  
  56. {  
  57. $errors[] = 'Vous devez &eacute;crire un message.';  
  58. }  
  59.  
  60.  
  61. if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs  
  62. {  
  63. if( mail( MAIL_TO, $sujet, $nom, $tel, $postal, $message, "From:$from\nReply-to:$from\n" ) ) // tentative d'envoi du message  
  64. {  
  65. $mailSent = true;  
  66. }  
  67. else // échec de l'envoi  
  68. {  
  69. $errors[] = 'Votre message n\'a pas &eacute;t&eacute; envoy&eacute;.';  
  70. }  
  71. }  
  72. }  
  73. else // le formulaire est affiché pour la première fois, avec les valeurs par défaut  
  74. {  
  75. $from = MAIL_FROM;  
  76. $sujet = MAIL_OBJECT; 
  77.       $nom = MAIL_NOM; 
  78.       $tel = MAIL_TEL; 
  79.       $postal = MAIL_POSTAL; 
  80.       $message = MAIL_MESSAGE;  
  81. }  
  82. ?>
  83.  
  84. <style type="text/css">
  85. label{ display:block; font-weight:bold; }
  86. p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
  87. p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
  88. p em{ display:block; font-weight:normal; }
  89. </style>
  90.  
  91. <h1>Contact particuliers </h1>
  92. <hr />
  93. <?php
  94. if( $mailSent === true ) // si le message a bien été envoyé, on affiche le récapitulatif  
  95. {  
  96. ?>
  97. <p id="success">Votre message a bien &eacute;t&eacute; envoy&eacute;.</p>
  98. <p><strong>Courriel pour la r&eacute;ponse&nbsp; :</strong><br /><?php echo( $from ); ?></p>
  99.       <p><strong>Votre demande :</strong><br /><?php echo( $sujet ); ?></p>
  100.       <p><strong>Votre nom :</strong><br /><?php echo( $nom ); ?></p>
  101.       <p><strong>Votre num&eacute;ro de t&eacute;l&eacute;phone :</strong><br /><?php echo( $tel ); ?></p>
  102.       <p><strong>Votre code postal :</strong><br /><?php echo( $postal ); ?></p>
  103. <p><strong>Message&nbsp;:</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
  104. <?php
  105. }  
  106. else // le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs  
  107. {  
  108. if( count( $errors ) !== 0 )  
  109. {  
  110. echo( "\t\t<ul>\n" );  
  111. foreach( $errors as $error )  
  112. {  
  113. echo( "\t\t\t<li>$error</li>\n" );  
  114. }  
  115. echo( "\t\t</ul>\n" );  
  116. }  
  117. else  
  118. {  
  119. echo( "\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );  
  120. }  
  121. ?>
  122. <form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
  123. <table width="550" border="0" align="center" cellpadding="5" cellspacing="5">
  124. <tr>
  125. <td width="177" valign="top"><label for="sujet">Votre demande </label></td>
  126. <td width="338"><input name="sujet" type="text" id="sujet" value="<?php echo( $sujet ); ?>" size="40" /></td>
  127. </tr>
  128. <tr>
  129. <td valign="top"><label for="nom">Votre nom </label></td>
  130. <td><input name="nom" type="text" id="nom" value="<?php echo( $nom ); ?>" size="40" /></td>
  131. </tr>
  132. <tr>
  133. <td valign="top"><label for="from">Votre t&eacute;l&eacute;phone </label></td>
  134. <td><input name="tel" type="text" id="tel" value="<?php echo( $tel ); ?>" size="40" /></td>
  135. </tr>
  136. <tr>
  137. <td valign="top"><label for="from">Votre code postal </label></td>
  138. <td><input name="postal" type="text" id="postal" value="<?php echo( $postal ); ?>" size="40" /></td>
  139. </tr>
  140. <tr>
  141. <td valign="top"><label for="from">Votre email * </label></td>
  142. <td><input name="from" type="text" id="from" value="<?php echo( $from ); ?>" size="40" /></td>
  143. </tr>
  144. <tr>
  145. <td valign="top"><label for="from">Votre message </label></td>
  146. <td><textarea name="message" id="message" cols="40" rows="6"><?php echo( $message ); ?></textarea></td>
  147. </tr>
  148. <tr>
  149. <td valign="top">&nbsp;</td>
  150. <td><input type="submit" name="send" value="Envoyer" /></td>
  151. </tr>
  152. <tr>
  153. <td colspan="2" valign="top">
  154.    <p>* Veuillez entrer une adresse e-mail valide (de type vous@fournisseur.com).</p>
  155.    <p><small>Conformément à la loi Informatique et Libertés, vous disposez d’un droit d’accès et de rectification et de suppression des données vous concernant (art. 34 de la loi "Informatique et libertés"). SARL.</small></p>
  156.    </td>
  157. </tr>
  158. <tr>
  159. <td valign="top">&nbsp;</td>
  160. <td>&nbsp;</td>
  161. </tr>
  162. </table>
  163. </form>
  164. <?php
  165. }  
  166. ?>
  167.  


merci pour votre aide :)

Titi
Keika
Keika
Déconnecté
Le PHP --> C'est dur !
Salut

Va voir ce que fait et comment utiliser la fonction mail() sur la doc PHP, tu remmarqueras qu'effectivement seulement 5 parametres sont attendus au maximum. Tu en as mis 7. a la ligne 63 du second code que tu affiches, la est ton problemes. Je pense que tu veux passer le telephone et autres dans ton message, pour faire ca, rajoute ces valeurs dans le message au niveau des define. mais je vois que tu n'inseres rien dans ces valeurs, donc meme si tu envois un mail, il sera vide.

Bon courage
dadamuse
dadamuse
Déconnecté
Merci pour la réponse, j'avais bien "compris" que c'etait un pb de nombre mais comme je débute en php, je ne comprenais pas trop quoi ... :(

mais dans ce cas, comment on fait quand on a un devis par exemple avec 10 champs et que l'on souhaite recevoir par mail les 10 champs ???

merci!
moogli
moogli
Déconnecté
Il en faut peu pour être heureux !!!!!
salut,

on utilise la concaténation (http://www.lephpfacile.com/cours/5-concatener-deux-chaines afin de tout mettre dans le corps du message (vu que c'est la place du texte ;)).

@+
dadamuse
dadamuse
Déconnecté
merci mais concretement que dois-je faire ? garder les 5 ou 4 parametres de base et envoyer les autres paramatres ailleurs dans une variable ???

j’ai essayé cela , ya pas de bug mais ca renvoit pas la variable $m1
  1.  
  2. if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs
  3. {
  4. if( mail( MAIL_TO, $sujet, $m1, "From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
  5. {
  6. $mailSent = true;
  7.    $m1="Bonjour $noms, voici votre téléphone : $tel et votre code postal : $postal.
  8.    Votre message : $message.";
  9. }
  10. else // échec de l'envoi
  11.  


je débute ... smiley
Keika
Keika
Déconnecté
Le PHP --> C'est dur !
Tu fais la meme erreur qu'un autre post avant toi. Tu utilises ta variable avant de la declarer.

Comprends, $m1 est utilisee avant que des infos soient entrees dedans. Donc il y a un probleme, non ?
dadamuse
dadamuse
Déconnecté
et comment dois-je déclarer cette variable ?
(j'avoue que j'ai essayé pas mal de choses mais je crois que je n'ai pas encore la logique php)

ce que j’ai réussi le plus :

  1. <?php
  2. define( 'MAIL_TO', 'py@mezonet.com' ); //ajouter votre courriel  
  3. define( 'MAIL_FROM', '' ); // valeur par défaut  
  4. define( 'MAIL_OBJECT', 'Indiquez le sujet' ); // valeur par défaut  
  5. define( 'MAIL_MESSAGE', '' ); 
  6.    define( 'MAIL_TEL' , ''); 
  7.    define( 'MAIL_POSTAL', '' ); 
  8.    define( 'MAIL_NOM', '' ); 
  9.    
  10. $mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif  
  11. $m1='$noms, $tel et $postal. $message.'; 
  12.    $errors = array(); // tableau des erreurs de saisie  
  13.  

et ce que je recois dans mon mail :
  1. $noms, $tel et $postal. $message. 


j’y suis presque ! …
dadamuse
dadamuse
Déconnecté
  1.  
  2. $mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif
  3. $nom = $_POST["nom"];
  4.    $tel= $_POST["tel"];
  5.    $postal= $_POST["postal"];
  6.    $message= $_POST["message"];
  7.    $m1="Bonjour $noms, votre email nous a bien été envoyé. Une réponse vous sera retournée au plus vite.
  8.    
  9.    Pour rappel, voici les informations envoyées :
  10.    Votre nom : $nom
  11.    Votre téléphone : $tel
  12.    Votre code postal : $postal
  13.    Votre message : $message
  14.    A bientôt ! ";
  15.  
  16.  


ca y est enfin ! smiley

Par contre maintenant, je comprends que le script est incomplet : cad que ici :
  1.  
  2. if( mail( MAIL_TO, $sujet, $m1, "From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
  3.  


l'internaute recoit bien un mail de confirmation comme je l'ai souhaitémais que l'admin 'MAIL_TO' recoit un mail vide ...
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog