[Resolu]Mon formulaire de contact...

Mon formulaire de contact... [Resolu] - PHP - Programmation

Marsh Posté le 03-11-2006 à 14:56:13    

Voilà je suis en train de crée un formulaire de contact mais voilà vu mon niveau je bloque un peu  :(  
Je ne voi pas quoi faire pour qu'il marche je me suis inspiré de nombreux exemple de formulaire mais ceux-ci parraisse trop compliqué donc j'ai décider de crée mon script.
Voilà ce que j'ai fait:
 

Code :
  1. <form action="script/form_contact.php" method="post"  enctype=="text/plain">
  2.             <p>
  3.               <label>Votre nom</label>
  4.               <input type="text" class="textfield" name="nom" size="18" value="" />
  5.             </p>
  6.             <p>
  7.               <label for="Email"> E-mail</label>
  8.               <input class="textfield" type="text" name="email" size="18" value=""/>
  9.             </p>
  10.             <p>
  11.               <label for="Sujet">Sujet</label>
  12.               <select class="textfield" name="sujet" value="" />
  13.                 <option>Question</option>
  14.                 <option>Suggestion</option>
  15.                 <option>Probl&egrave;me</option>
  16.                 <option>Autre</option>
  17.               </select>
  18.             </p>
  19.             <p>
  20.               <label>Texte</label>
  21.               <textarea name="message" cols="30" rows="5" ></textarea>
  22.             </p>
  23.             <p style="text-align:center; padding-top:6px;">
  24.               <input name="envoyer" src="img/bouton_envoyer.png" type="image" />
  25.             </p>
  26.           </form>


 
et voilà le script form_contact.php:

Code :
  1. <?
  2. $nom=$_POST['nom'];
  3. $email=$_POST['email'];
  4. $sujet=$_POST['sujet'];
  5. $texte=$_POST['texte'];
  6. $headers ='From:'.$nom.'<'.$email.'>';
  7. if( empty($nom))
  8.  {echo 'Vous devez indiquer votre nom';
  9.  exit();
  10.  }
  11. if( empty($mail))
  12.  {echo 'Vous devez indiquer votre e-mail';
  13.  exit();
  14.  }
  15. if ( ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]    {2,3})*$",$email))
  16.  {echo 'Votre e-mail est invalide';
  17.  exit();
  18.  }
  19. if( empty($sujet))
  20.  {echo 'Vous devez remplir le champ texte';
  21.  exit();
  22.  }
  23. else( mail('monmail@fai.xxx',$sujet,$texte,$headers))
  24.  {echo 'Votre demande a bien été envoyée et sera traitée dans les plus brèves délai';
  25.  }
  26. ?>


 
Merci :jap:


Message édité par analfabete le 05-11-2006 à 15:27:03
Reply

Marsh Posté le 03-11-2006 à 14:56:13   

Reply

Marsh Posté le 03-11-2006 à 14:58:24    

Quel est le problème ? Message d'erreur ?
 
sinon y'a une énorme faille de sécurité qui permetterait de transformer le formulaire en script d'envoi de spam à toute la planète... Attention au headers, il faut remplacer les occurrences de \r et \n qui pourraient apparaître dans $nom et $email

Reply

Marsh Posté le 03-11-2006 à 15:01:43    

Déjà quand je fais "envoyer" meme quand rien remplie rien ne se passe pas de message d'erreur etc puis quand je rmeplis tout rien ne se passe aussi
 

Reply

Marsh Posté le 03-11-2006 à 15:02:49    

Ca vient du enctype du formulaire, "text/plain" n'est pas reconnu par le W3C. Enlève l'attribut (et corrige la faille aussi)

Reply

Marsh Posté le 03-11-2006 à 15:14:56    

parse error a ce niveau là :

Code :
  1. else( mail($contact,$sujet,$texte,$headers);)
  2.  {echo 'Votre demande a bien été envoyée et sera traitée dans les plus brèves délai';
  3.  }


 
j'ai verifié comment se formait la fonction mail et je ne voi pas d'erreur ...

Reply

Marsh Posté le 03-11-2006 à 15:15:27    

Le point-vigule après mail() [:dawak]

Reply

Marsh Posté le 03-11-2006 à 15:19:17    

Moué et j'en est une autre ligne 31

Reply

Marsh Posté le 03-11-2006 à 15:20:32    

Vire le else, il sert à rien. Remplace-le par un if, et oublie pas l'accolade ouvrante

Reply

Marsh Posté le 03-11-2006 à 15:36:26    

La fonction de vérification des mail ne marche pas :-(


Message édité par analfabete le 03-11-2006 à 15:43:35
Reply

Marsh Posté le 03-11-2006 à 15:50:00    

Normal, avec les espaces qui squattent dedans

Reply

Marsh Posté le 03-11-2006 à 15:50:00   

Reply

Marsh Posté le 03-11-2006 à 16:02:40    

non sa change rien

Reply

Marsh Posté le 03-11-2006 à 16:03:46    

Ca serait pas plutôt !ereg ?

Reply

Marsh Posté le 03-11-2006 à 16:24:12    

Donc voilà mon script marche enfin je l'est un peu modifier :

Code :
  1. <?
  2. $nom=$_POST['nom'];
  3. $email=$_POST['email'];
  4. $sujet=$_POST['sujet'];
  5. $texte=$_POST['texte'];
  6. $contact="monmail@fai.com";
  7. $headers ='From:'.$email.'\n';
  8. if( empty($nom) || empty($email) || empty($texte))
  9.  {echo 'Vous devez remplir tous les champs';
  10.  exit();
  11.  }
  12. if ( !ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,3})*$",$email))
  13.  {echo 'Votre e-mail est invalide';
  14.  exit();
  15.  }
  16. if( mail($contact,$sujet,$texte,$headers))
  17.  {echo 'Votre demande a bien été envoyée et sera traitée dans les plus brèves délai';
  18.  }
  19. ?>


 
Cependant maintenant je désire intégré les messages d'erreur dans la page du formulaire, j'aimerai savoir comment faire et que faut t-il changer dans <form action="???">
Deplus lorsque l'envoi est effectué j'aimerai que le formulaire disparraisse et a la place le texte "Votre demande a bien été envoyée et sera traitée dans les plus brèves délai" y soit
Merci de bien vouloir m'orienter sur des pistes

Reply

Marsh Posté le 03-11-2006 à 16:57:50    

Faut pas utiliser exit, faut stocker les messages dans un tableau. Et si y'a une erreur, réafficher le formulaire.
 
Et t'as pas corrigé la faille

Reply

Marsh Posté le 03-11-2006 à 19:56:21    

Voilà ce que j'ai fait, mais je ne sais pas terminé , je pense qu'il faut utiliser une boucle for() mais je ne sais pas comment ... :??:  

Code :
  1. $erreur=array( "Vous devez remplir tous les champs",
  2.    "Votre e-mail est invalide",
  3.    "Votre demande a bien été envoyée et sera traitée dans les plus brèves délai" );
  4. if ( empty($nom) || empty($email) || empty($texte))
  5.  {echo $erreur[0];
  6.  }
  7. if ( !ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,3})*$",$email))
  8.  {echo $erreur[1];
  9.  }
  10. if ( mail($contact,$sujet,$texte,$headers))
  11.  {echo $erreur[2];
  12.  }
  13. ?>


 
Depluis pour la faille pourriez-vous me l'expliquer plus simplement sans me dire la réponse s'il vous plait

Message cité 1 fois
Message édité par analfabete le 03-11-2006 à 19:58:32
Reply

Marsh Posté le 04-11-2006 à 00:05:03    

Pour valider rapidement ton formulaire tu fais ca
 

Code :
  1. $err = array ( 'Mesage trop court', 'Email invalide', ' nimporte koi');
  2. foreach($_POST as $k => $v)
  3. {
  4. if(strlen($_POST[$k])==0 || strlen($_POST[$k])>=250){
  5.   header('Location: ./formulaire.php?err=1');die;
  6. }
  7. }
  8. //filtrage specifique
  9. $pattern = "@[_a-z0-9-]+\.[a-z]+\.[a-z]+@";
  10. if ( !preg_match($pattern,$_POST['email']) ) {
  11. header('Location: ./form.php?err=2);die;
  12. }


 
Tu px reflechir a tes filtres en regardant une table ascii.
 
T'as le choix entre "tout refuser par defaut" ou "accepter en replacant les erreur".
 
fonctions utiles:
 
-preg_match
-preg_replace
-preg_quote
-ob_start(callback)
-strcmp, strlen


Message édité par supermofo le 04-11-2006 à 00:07:58
Reply

Marsh Posté le 04-11-2006 à 00:06:20    

putin ca a foiré


Message édité par supermofo le 04-11-2006 à 00:07:34
Reply

Marsh Posté le 04-11-2006 à 10:46:08    

analfabete a écrit :

Depluis pour la faille pourriez-vous me l'expliquer plus simplement sans me dire la réponse s'il vous plait


Tu met directement l'email dans les headers :

$headers ='From:'.$email.'\n';


 
Maintenant imagine si quelqu'un, dans $email s'amuse à mettre :

moi@truc\nBcc: spam1@machin.com, spam2@machin.com, spam3@machin.com\n


 
Le résultat de ta variable $headers va être :

From: moi@truc.com
Bcc: spam1@machin.com, spam2@machin.com, spam3@machin.com


 
Autrement dit, les headers peuvent êtres modifiés pour rajouter un champ "envoyer aussi à". Et suffit de mettre une jolie liste de prix pour du viagra dans le corps, et on peut ainsi spammer la terre entière via ton formulaire... Et donc être quasimment indétectable...
 
Alors comme tu peux le voir, il faut rajouter un retour chariot après l'email pour injecter le header Bcc. Solution, virer tous les \n (et les \r), en les remplaçant par un espace, ou par rien

Reply

Marsh Posté le 04-11-2006 à 13:46:39    

Um daccord merci pour tout

Reply

Marsh Posté le 05-11-2006 à 09:58:27    

Um voilà après m'etre beaucoup renseigner j'ai entièrement modifier mon code et intégré le dit code a ma page contact.php
cependant j'ai a faire à un dernier problème: lorsqu'une erreur surgit celle-ci s'affiche en haut du form mais tout les bon champs sont effacer  :(  
Voilà mon code:

Code :
  1. <? function formulaire($nom="", $email="", $sujet="", $texte="" ) { ?>
  2.    <form action="<? echo $PHP_SELF ?>" method="post" >
  3.    <p>
  4.               <label>Votre nom</label>
  5.               <input type="text" class="textfield" name="nom" size="18" value=""
  6.     <?php echo trim(htmlentities($nom)) ?> />
  7.             </p>
  8.             <p>
  9.               <label for="Email"> E-mail</label>
  10.               <input class="textfield" type="text" name="email" size="18" value=""
  11.     <?php echo trim(htmlentities($email)) ?> />
  12.             </p>
  13.             <p>
  14.               <label for="Sujet">Sujet</label>
  15.               <select class="textfield" name="sujet" value="" />
  16.                 <option>Question</option>
  17.                 <option>Suggestion</option>
  18.                 <option>Probl&egrave;me</option>
  19.                 <option>Autre</option>
  20.               </select>
  21.             </p>
  22.             <p>
  23.               <label>Texte</label>
  24.               <textarea name="texte" cols="30" rows="5"  <?php echo trim(htmlentities($texte)) ?>></textarea>
  25.             </p>
  26.             <p style="text-align:center; padding-top:6px;">
  27.               <input name="envoyer" src="img/bouton_envoyer.png" type="image" />
  28.             </p>
  29.           </form>
  30.    <?php
  31. }
  32. if(!isset($nom)) {
  33. formulaire();
  34. }
  35. else {
  36. $form_nom=$_POST["nom"];
  37. $form_email=$_POST["email"];
  38. $form_sujet=$_POST["sujet"];
  39. $form_texte=$_POST["texte"];
  40. $contact="gferge@fsd.com";
  41. if (empty($form_nom) || empty($form_email) || empty($form_texte)) {
  42.  echo "<p1>Vous devez remplir tous les champs</p1>";
  43.  $erreur=1;
  44. }
  45. if (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-_.]?[0-9a-z])*\\.[a-z]{2,4}$",$form_email) && ($erreur<>1)){
  46.  echo "<p1>Votre e-mail est invalide</p1>\n";
  47.  $erreur=1;
  48. }
  49. if ($erreur==1) {
  50.  formulaire($nom="", $email="", $sujet="", $texte="" );
  51. }
  52. else {
  53.  mail($contact,$sujet,$texte,"From: $email" ) ;
  54.  echo "<p style=\"text-align:center\">Votre demande a bien été envoyée et sera traitée dans les plus brèves délai.</p>\n" ;
  55. }
  56. }
  57. ?>

Reply

Marsh Posté le 05-11-2006 à 10:51:27    

Il faut remettre la valeur dans les champs, c'est normal. Pour le navigateurs, c'est une autre page, il affiche donc les champs tel qu'on lui indique, donc par défaut sans valeurs. Il faut remettre ce qui a été pris dans $_POST dans les input via l'attribut value

Reply

Marsh Posté le 05-11-2006 à 15:02:03    

J'ai changer les morceau de code de chaque champ de cette manière:

Code :
  1. <label>Votre nom</label>
  2.               <input type="text" class="textfield" name="nom" size="18" value="<? $form_nom; ?>"
  3.      />


 
Mais sa ne change rien  :sleep:

Reply

Marsh Posté le 05-11-2006 à 15:18:02    

Code :
  1. value="<? echo htmlentities($_POST["nom"]); ?>"


Message édité par dwogsi le 05-11-2006 à 15:19:16
Reply

Marsh Posté le 05-11-2006 à 15:26:43    

A oui daccord je viends de comprendre quelque chose merci  
Voilà le sujet enfin résolu merci a tous

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed