Vous êtes ici Codes PHP et MySQL > Formulaires > Formmail sécurisé

 

Formmail sécurisé

Script de formmail pour que les visiteurs de votre site puisse contacter par mail plusieurs personnes.
 
le rouge
Site de l'auteur voir
Code vu 9988 fois
Enregistré le 19 Juin 2007
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Formmail sécurisé
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Formmail sécurisé                                         */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts277-PHP.htm              */
/* Auteur         : le rouge                                                  */
/* Date édition   : 19 Juin 2007                                              */
/* Website auteur : http://www.jazzparade.ch/                                 */
/*                                                                            */
/******************************************************************************/

 
// TITRE

echo"<h1>Contact</h1>\n";

// APPEL DES FONCTIONS

// AFFICHER

if(!$_POST)
{
  formulaire_contact($connexion$_POST);
}

// VERIFIER/ENVOYER

elseif($_POST)
{
  // ON VERIFIE LES CHAMPS

  if(verifier_contact($_POST))
  {
    envoyer_contact($connexion$_POST);
  }
  else
  {
    formulaire_contact($connexion$_POST);
  }
}

// FORMULAIRE

function formulaire_contact($connexion$_POST)
{
  // ON DEFINIT LES VALEURS PAR DEFAUT

  if(!($_POST))
  {
    $nom 'Prénom et nom';
    $adresse 'Adresse';
    $lieu 'Code postal et lieu';
    $email '@';
    $sujet 'Sujet';
    $texte 'Texte';
    $copie 'on';
  }
  else
  {
    $nom $_POST['nom'];
    $adresse $_POST['adresse'];
    $lieu $_POST['lieu'];
    $email $_POST['email'];
    $sujet $_POST['sujet'];
    $texte $_POST['texte'];
    $texte $_POST['copie'];
  }

  // FORMULAIRE

  echo"<h2>Formulaire</h2>\n";

  echo"<form action=\"contact.html\" method=\"post\">\n";

  echo"<p><label for=\"contact\">Contact *</label><br />\n";

  //CONTACTS

  echo"<select name=\"contact\" id=\"contact\" title=\"Contact\"" .
" tabindex=\"1\">\n";
  echo"<option selected=\"selected\">Webmaster</option>\n";

  // AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES
// ETC.

  echo"</select></p>\n";

  // PRENOM ET NOM

  echo"<p><label for=\"nom\">Prénom et nom *</label><br />\n";
  echo"<input type=\"text\" name=\"nom\" id=\"nom\" value=\"".$nom.
"\" title=\"Prénom et nom\" tabindex=\"2\" onfocus=\"this.select();\"" .
" /></p>\n";

  // ADRESSE

  echo"<p><label for=\"adresse\">Adresse</label><br />\n";
  echo"<input type=\"text\" name=\"adresse\" id=\"adresse\" value=\"".$adresse.
"\" title=\"Adresse\" tabindex=\"3\" onfocus=\"this.select();\" /></p>\n";

  // CODE POSTAL ET LIEU

  echo"<p><label for=\"lieu\">Code postal et lieu *</label><br />\n";
  echo"<input type=\"text\" name=\"lieu\" id=\"lieu\" value=\"".$lieu.
"\" title=\"Lieu\" tabindex=\"4\" onfocus=\"this.select();\" /></p>\n";

  // Email

  echo"<p><label for=\"email\">Email *</label><br />\n";
  echo"<input type=\"text\" name=\"email\" id=\"email\" value=\"".$email.
"\" title=\"Email\" tabindex=\"5\" onfocus=\"this.select();\" /></p>\n";

  // SUJET

  echo"<p><label for=\"sujet\">Sujet *</label><br />\n";
  echo"<input type=\"text\" name=\"sujet\" id=\"sujet\" value=\"".$sujet.
"\" title=\"Sujet\" tabindex=\"6\" onfocus=\"this.select();\" /></p>\n";

  // TEXTE

  echo"<p><label for=\"texte\">Texte *</label><br />\n";

  echo"<textarea name=\"texte\" id=\"texte\" cols=\"100\" rows=\"5\"" .
" title=\"Texte\" tabindex=\"7\" onfocus=\"this.select();\">".$texte."</textarea></p>\n";

  // COPIE

  echo"<p><input checked=\"checked\" type=\"checkbox\" name=\"copie\"" .
" id=\"copie\" value=\"".$copie."\" title=\"Recevoir une copie de l'email\" tabindex=\"8\"" .
" onfocus=\"this.select();\" /> <label for=\"copie\">Recevoir une copie de" .
" l'email</label></p>\n";

  // CHAMPS OBLIGATOIRES

  echo"<p>* Champs obligatoires</p>\n";

  // ENVOYER/ANNULER

  echo"<p><input type=\"submit\" value=\"Envoyer\" title=\"Envoyer\"" .
" tabindex=\"9\" /> <input type=\"reset\" value=\"Annuler\" title=\"Annuler\"" .
" tabindex=\"10\" /></p>\n";

  echo"</form>\n";
}

// VERIFIER

function verifier_contact($_POST)
{
  // VERIFICATION DES CHAINES DE CARACTERES

  function verifier_chaines($chaine)
  {
    $mauvaises_chaines = array('content-type:''mime-version:''content-transfer-encoding:''bcc:''cc:');

    foreach($mauvaises_chaines as $caracteres_inautorises)
    {
      if(strpos($chaine$caracteres_inautorises) !== false)
      {
        return false;
      }
    }
    return true;
  }

  // ON VERIFIE LES CHAMPS

  // PRENOM ET NOM

  if(!($_POST['nom']) || $_POST['nom'] == 'Prénom et nom' ||!verifier_chaines(
$_POST['nom']))
  {
    $erreur '"Prénom et nom"';
  }

  // ADRESSE

  if(!verifier_chaines($_POST['adresse']))
  {
    if(($erreur))
    {
      $erreur ''.$erreur.', "Adresse"';
    }
    else
    {
      $erreur ''.$erreur.'"Adresse"';
    }
  }

  // LIEU

  if(!($_POST['lieu']) || $_POST['lieu'] == 'Code postal et lieu' ||!
verifier_chaines($_POST['lieu']))
  {
    if(($erreur))
    {
      $erreur ''.$erreur.', "Code postal et lieu"';
    }
    else
    {
      $erreur ''.$erreur.'"Code postal et lieu"';
    }
  }

  // EMAIL

  if(!($_POST['email']) || $_POST['email'] == '@' || !preg_match(
'/^[A-z0-9][\w\.\-]*@[A-z0-9][\w\.\-]+\.[A-z0-9]{2,6}$/'$_POST['email']) ||!verifier_chaines($_POST['email']))
  {
    if(($erreur))
    {
      $erreur ''.$erreur.', "Email"';
    }
    else
    {
      $erreur ''.$erreur.'"Email"';
    }
  }

  // SUJET

  if(!($_POST['sujet']) ||!verifier_chaines($_POST['sujet']))
  {
    if(($erreur))
    {
      $erreur ''.$erreur.', "Sujet"';
    }
    else
    {
      $erreur ''.$erreur.'"Sujet"';
    }
  }

  // TEXTE

  if(!($_POST['texte']) || $_POST['texte'] == 'Texte' ||!verifier_chaines($_POST
['texte']))
  {
    if(($erreur))
    {
      $erreur ''.$erreur.', "Texte"';
    }
    else
    {
      $erreur ''.$erreur.'"Texte"';
    }
  }

  // SI DES CHOSES NE SONT PAS CORRECTES, ON AFFICHE UN MESSAGE D'ERREUR ET ON
// RETOURNE "FALSE"

  if(($erreur))
  {
    // POUR UN CHAMP INVALIDE

    if(!strrpos($erreur','))
    {
      echo"<p>Le champ ".$erreur." est invalide.</p>\n";
    }

    // POUR PLUSIEURS CHAMPS INVALIDES

    else
    {
      // ON REMPLACE LA DERNIERE VIRGULE PAR ET

      $nouvelle_erreur substr_replace($erreur' et'strrpos($erreur,','), 
'1');

      // ON RETOURNE LA NOUVELLE ERREUR

      echo"<p>Les champs ".$nouvelle_erreur." sont invalides.</p>\n";
    }

    // ON RETOURNE L'ERREUR
    
    return false;
  }

  // ON ENVOIE LE MAIL

  return true;
}

// ENVOYER

function envoyer_contact($connexion$_POST)
{
  // CHOIX DU DESTINATAIRE

  if($_POST['contact'] == 'Webmaster')
  {
    $dest 'webmaster@tonsite.com';
  }

  else
  {
    // AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES
// ETC.
    
  }

  // ON PREPARE L'ENTETE

  // AVEC COPIE

  if(($_POST['copie']))
  {
    $entete "bcc: ".$_POST['email']."\r\n";
    $entete .= "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
  }

  // SANS COPIE

  elseif(!($_POST['copie']))
  {
    $entete "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
  }

  $entete .= "reply-to: ".$_POST['nom']." <".$_POST['email'].">\r\n";
  $entete .= "return-path: Tonsite - ".$_POST['nom']." <".$_POST['email'].
">\r\n";
  $entete .= "mime-version: 1.0";
  $entete .= "content-type: text/plain; charset=iso-8859-1";
  $entete .= "x-mailer: php/" phpversion();
  $entete .= "x-sender: Ton site - ".$_POST['nom']." <".$_POST['email'].">";
  $entete .= "x-auth-smtp-user: localhost";

  // PUIS LE MESSAGE

  // NOM ET PRENOM

  $message "Prénom et nom : ".$_POST['nom']."\n\n";

  // SI IL Y A UNE ADRESSE

  if(($_POST['adresse']) && $_POST['adresse'] != 'Adresse')
  {
    $_POST['lieu'] = "".$_POST['adresse'].", ".$_POST['lieu']."";
  }

  // LIEU

  $message .= "Lieu : ".$_POST['lieu']."\n\n";

  // MESSAGE

  $message .= "Message : \n\n".$_POST['texte']."";

  // SI TOUT VA BIEN ON ENVOIE LE MAIL

  if(mail($dest$_POST['sujet'], $message$entete))
  {
    // MESSAGE DE CONFIRMATION

    echo"<p>Ton message a bien été envoyé.</h2>\n";

    echo"<h3>Infos détaillées</h3>\n";

    echo"<ul />\n";
    echo"<li>Contact : ".htmlentities($_POST['contact'])."</li>\n";
    echo"<li>Prénom et nom : ".htmlentities($_POST['nom'])."</li>\n";
    echo"<li>Code postal et lieu : ".htmlentities($_POST['lieu'])."</li>\n";
    echo"<li>Email : ".$_POST['email']."</li>\n";
    echo"<li>Sujet : ".htmlentities($_POST['sujet'])."</li>\n";

    // AVEC COPIE

    if(($_POST['copie']))
    {
      echo"<li><span>Copie :</span> Oui</li>\n";
    }

    // SANS COPIE

    elseif(!($_POST['copie']))
    {
      echo"<li><span>Copie :</span> Non</li>\n";
    }

    echo"</ul>\n";

    echo"<h3>Message</h3>\n";

    echo"<p>".nl2br(htmlentities($_POST['texte']))."</p>\n";

    // RETOUR

    echo"<p><a href=\"contact.html\" title=\"Retour\">Retour</a></p>\n";
  }
}

?>

 

Fonctions du code

: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Crée un tableau - (PHP 4, PHP 5)
: Trouve la position d'un caractère dans une chaîne - (PHP 4, PHP 5)
: Expression rationnelle standard - (PHP 4, PHP 5)
: Trouve la position de la dernière occurrence d'un caractère dans une chaîne -...
: Remplace un segment dans une chaîne - (PHP 4, PHP 5)
: Retourne le numéro de la version courante de PHP - (PHP 4, PHP 5)
: Envoi de mail - (PHP 4, PHP 5)
: Convertit tous les caractères éligibles en entités HTML - (PHP 4, PHP 5)
: Insère un retour à la ligne HTML à chaque nouvelle ligne - (PHP 4, PHP 5)
Commentaires
bonjour j'ai pas compris ce qu'il doit y avoir dans contact.html

merci d'avance !

manu
 
regardez la ligne suivante :
-->> echo"\n";

Vous pouvez apelez votre fichier du nom qu'il vous plait, mais vous devez renomez celui-ci. Dans l'exemple, le fichier doit s'apeler contact.html
 
Désolé de voir cela que maintenant, en fait le code est un code qui s'appelle de lui-même par fonction, si tu veux l'appeler mail.html par exemple il suffit juste de modifier cette ligne :




Code:
echo"<form action=\"contact.html\" method=\"post\">\n";


Et ensuite juste modifier le lien retour encore.

Sinon, ben il faut un htaccess pour avoir les .html...

Voilà
 
Bonjour,

Ayant intégré ce script à mon site, je me demande à quoi sert la page nommée contact.html

En effet, lorsque l'on remplit le formulaire et que l'on clique sur "Envoyer", on est bien redirigé vers "http://site/contact.html mais le formulaire n'a pas l'air de fonctionner (en tout cas je ne reçois pas les infos que j'ai rempli.)

 
Bonjour Le Rouge,

J'aurais une petite question concernant ton formulaire de contact qui m'intéresse beaucoup, car j'ai besoin que l'on puisse choisir le destinataire du message.

J'ai modifié le fichier pour entrer mon adresse (celle du webmaster), car je teste déjà avec une seule adresse, et lorque j'envoie, je ne reçois aucun mail : ni chez le webmaster ni chez l'auteur du message en copie.

Merci d'éclairer ma lanterne. Quant au .htaccess, je signale juste que je ne l'ai pas créé.
 
Pour le destinataire il vous faut ajouter un champ au formulaire

Quand à l'envoie du mail si vous ne recevez rien, c'est certainement un problème d'entete, si le rouge veut bien modifier son code et l'actualiser car ce genre d'entete doit pas passer sur tous les hebergeurs, deja retirer le localhost serait bien

$entete .= "x-auth-smtp-user: localhost

Vous pouvez trouvez une entete valide ici:

http://www.phpsources.org/scripts505-PHP.htm

++

Isaki
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

Formulaires

 
 

PHP

 
 
 
PHP et MySQL Livre PHP

PHP et MySQL
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité