Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1530 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu]Mon formulaire de contact...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]Mon formulaire de contact...

n°1470094
analfabete
Posté le 03-11-2006 à 14:56:13  profilanswer
 

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
mood
Publicité
Posté le 03-11-2006 à 14:56:13  profilanswer
 

n°1470100
FlorentG
Unité de Masse
Posté le 03-11-2006 à 14:58:24  profilanswer
 

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

n°1470108
analfabete
Posté le 03-11-2006 à 15:01:43  profilanswer
 

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
 

n°1470112
FlorentG
Unité de Masse
Posté le 03-11-2006 à 15:02:49  profilanswer
 

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

n°1470133
analfabete
Posté le 03-11-2006 à 15:14:56  profilanswer
 

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 ...

n°1470134
FlorentG
Unité de Masse
Posté le 03-11-2006 à 15:15:27  profilanswer
 

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

n°1470141
analfabete
Posté le 03-11-2006 à 15:19:17  profilanswer
 

Moué et j'en est une autre ligne 31

n°1470142
FlorentG
Unité de Masse
Posté le 03-11-2006 à 15:20:32  profilanswer
 

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

n°1470174
analfabete
Posté le 03-11-2006 à 15:36:26  profilanswer
 

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


Message édité par analfabete le 03-11-2006 à 15:43:35
n°1470190
FlorentG
Unité de Masse
Posté le 03-11-2006 à 15:50:00  profilanswer
 

Normal, avec les espaces qui squattent dedans

mood
Publicité
Posté le 03-11-2006 à 15:50:00  profilanswer
 

n°1470218
analfabete
Posté le 03-11-2006 à 16:02:40  profilanswer
 

non sa change rien

n°1470219
FlorentG
Unité de Masse
Posté le 03-11-2006 à 16:03:46  profilanswer
 

Ca serait pas plutôt !ereg ?

n°1470237
analfabete
Posté le 03-11-2006 à 16:24:12  profilanswer
 

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

n°1470259
FlorentG
Unité de Masse
Posté le 03-11-2006 à 16:57:50  profilanswer
 

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

n°1470371
analfabete
Posté le 03-11-2006 à 19:56:21  profilanswer
 

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
n°1470435
supermofo
Hello World !
Posté le 04-11-2006 à 00:05:03  profilanswer
 

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
n°1470437
supermofo
Hello World !
Posté le 04-11-2006 à 00:06:20  profilanswer
 

putin ca a foiré


Message édité par supermofo le 04-11-2006 à 00:07:34
n°1470482
FlorentG
Unité de Masse
Posté le 04-11-2006 à 10:46:08  profilanswer
 

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

n°1470538
analfabete
Posté le 04-11-2006 à 13:46:39  profilanswer
 

Um daccord merci pour tout

n°1470705
analfabete
Posté le 05-11-2006 à 09:58:27  profilanswer
 

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. ?>

n°1470719
FlorentG
Unité de Masse
Posté le 05-11-2006 à 10:51:27  profilanswer
 

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

n°1470796
analfabete
Posté le 05-11-2006 à 15:02:03  profilanswer
 

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:

n°1470803
dwogsi
Défaillance cérébrale...
Posté le 05-11-2006 à 15:18:02  profilanswer
 

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


Message édité par dwogsi le 05-11-2006 à 15:19:16
n°1470811
analfabete
Posté le 05-11-2006 à 15:26:43  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu]Mon formulaire de contact...

 

Sujets relatifs
[MFC][résolu] Librairie chargée à la volée avec des contrôles ActiveX[Résolu] Question Poo en delphi
Remplir le champ d'un formulaire par une variableContrôle formulaire côté serveur / retour sur erreur?
[résolu] Hook win32 voulu global...[VBA] Formulaire / sous formulaire et les requêtes.
[HTML]Formulaire de contact.[resolu] Pas fait pour les ordis portables les menus déroulants ?!
[Résolu]Générer xhtml avec xsl sous ie 
Plus de sujets relatifs à : [Resolu]Mon formulaire de contact...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR