begin process at 2012 05 27 21:27:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI SPAM (FORM TO MAIL)

FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI SPAM (FORM TO MAIL)


 Information sur la source

Note :
Aucune note
Catégorie :E-Mail / Messagerie Classé sous :email, formulaire, captcha, antispam, courriel Niveau :Débutant Date de création :06/03/2011 Date de mise à jour :07/03/2011 14:32:20 Vu / téléchargé :5 592 / 734

Auteur : cod57

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour

Petite source qui est souvent traitée sur le forum

- Protection captcha basique
- Contrôle des champs en PHP et JS
- Une fonction PHP de contrôle de mail (la votre ou un autre snippet ...)
- Une fonction PHP pour pas se faire poster des romans et un peu de protection xss
- Protection contre le double-post, double validation (par $_SESSION).
- Bouton de reload pour le captcha.
- Contrôle javascript des champs avec alert en plus du contrôle php.

Le code est à but pédagogique pour les débutants qui cherchent une méthode de traitement
Ici un 'form To mail' mais cela peut être un formulaire pour poster des annonces ...

a++

Source

  • <?php
  • session_start();
  • function VerifierAdresseMail($mail){
  • $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
  • if(preg_match($Syntaxe,$mail)){
  • return true;
  • }else{
  • return false;
  • }
  • }
  • /* PetitClean($var,$lg) */
  • /* $var la varible à traiter */
  • /* la longueur de sortie */
  • function PetitClean($var,$lg){
  • $var=strip_tags($var);
  • /* troncature on va pas me poster un roman (-: */
  • if(strlen($var)>$lg){
  • $var = substr($var, 0, $lg);
  • $last_space = strrpos($var, " ");
  • $var = substr($var, 0, $last_space);
  • }else{
  • $lg=0;
  • }
  • return $var;
  • }
  • $error=NULL;
  • if(isset($_POST['nom']) && !empty($_POST['nom'])){
  • $nom=$_POST['nom'];$error=NULL;
  • //filtrage
  • $nom=PetitClean($nom,30); /*30 caractères maxi*/
  • }else{
  • echo $error='<h3 align="center">Le nom est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • if(isset($_POST['mail']) && !empty($_POST['mail'])){
  • $mail=$_POST['mail'];$error=NULL;$mail=htmlentities($mail);
  • //filtrage
  • $mail=PetitClean($mail,60);
  • }else{
  • echo $error='<h3 align="center">Le e-mail est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • if(isset($_POST['objet']) && !empty($_POST['objet'])){
  • $objet=$_POST['objet'];$error=NULL;
  • //filtrage
  • $objet=PetitClean($objet,100);
  • }else{
  • echo $error='<h3 align="center">L\'objet est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • if(isset($_POST['message']) && !empty($_POST['message'])){
  • $message=$_POST['message'];$error=NULL;
  • //filtrage
  • $message=PetitClean($message,300);
  • }else{
  • echo $error='<h3 align="center">Le message est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • if(VerifierAdresseMail($mail)){
  • //echo 'mail ok';
  • }else{
  • echo $error='<h3 align="center">Votre adresse e-mail n\'est pas valide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • if($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['code']) && !empty($_POST['code']) && $_POST['code']===$_SESSION['verif']){
  • /*un mail, un enregistrement mysql, une ouverture de fichier ... un traitement */
  • $destinataire="xxxxxxxxxxxxxxx@free.fr"; /*ICI LE MAIL QUI RECEPTIONNE*/
  • $subject=$objet;
  • $body=$message;
  • /*format du mail*/
  • $headers = "MIME-Version: 1.0\r\n";
  • $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
  • /*ici on détermine l'expediteur et l'adresse de réponse*/
  • $headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP";
  • /*tout est ok*/
  • if (mail($destinataire,$subject,$body,$headers)){
  • /*petite secu*/
  • $message=NULL;
  • $mail=NULL;
  • $nom=NULL;
  • $objet=NULL;
  • $_POST=NULL;
  • $_SESSION['verif']=NULL; /*anti double post*/
  • $destinataire=NULL;
  • echo '<h3 align="center">Votre message est envoyé, merci ! - <a href="javascript:history.back();">Retour au formulaire</a><br /></h3>';exit;
  • /* ou redirection header('Location: http://unsite.fr/merci.html');exit; ... */
  • }else{
  • /*petite secu*/
  • $message=NULL;
  • $mail=NULL;
  • $nom=NULL;
  • $objet=NULL;
  • $_POST=NULL;
  • $_SESSION['verif']=NULL; /*anti double post*/
  • $destinataire=NULL;
  • echo '<h3 align="center">Désolé votre message n\'a pas pu être envoyé ! - <a href="javascript:history.back();">Retour au formulaire</a><br /></h3>';exit;
  • /* ou redirection header('Location: http://unsite.fr/erreur.html');exit; ... */
  • }
  • /*petite secu*/
  • $message=NULL;
  • $mail=NULL;
  • $nom=NULL;
  • $objet=NULL;
  • $_POST=NULL;
  • $destinataire=NULL;
  • } else {
  • echo $error='<h3 align="center">ERREUR SUR LE CODE DE SECURITE - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
  • }
  • ?>
<?php
session_start();

function VerifierAdresseMail($mail){
$Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($Syntaxe,$mail)){
return true;
}else{
return false;
}
}


/* PetitClean($var,$lg) */
/* $var la varible à traiter */
/* la longueur de sortie */  

function PetitClean($var,$lg){
$var=strip_tags($var);
  /* troncature on va pas me poster un roman (-: */
  if(strlen($var)>$lg){
  $var = substr($var, 0, $lg);
  $last_space = strrpos($var, " ");
  $var = substr($var, 0, $last_space);
  }else{
  $lg=0;
  } 
return $var;
}
    
$error=NULL;

if(isset($_POST['nom']) && !empty($_POST['nom'])){
$nom=$_POST['nom'];$error=NULL;
//filtrage 
$nom=PetitClean($nom,30); /*30 caractères maxi*/
}else{
echo $error='<h3 align="center">Le nom est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}

if(isset($_POST['mail']) && !empty($_POST['mail'])){
$mail=$_POST['mail'];$error=NULL;$mail=htmlentities($mail);
//filtrage
$mail=PetitClean($mail,60);
}else{
echo $error='<h3 align="center">Le e-mail est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}

if(isset($_POST['objet']) && !empty($_POST['objet'])){
$objet=$_POST['objet'];$error=NULL;
//filtrage
$objet=PetitClean($objet,100);
}else{
echo $error='<h3 align="center">L\'objet est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}

if(isset($_POST['message']) && !empty($_POST['message'])){
$message=$_POST['message'];$error=NULL;
//filtrage
$message=PetitClean($message,300);
}else{
echo $error='<h3 align="center">Le message est vide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}

if(VerifierAdresseMail($mail)){
//echo 'mail ok';
}else{
echo $error='<h3 align="center">Votre adresse e-mail n\'est pas valide - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}

if($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['code']) && !empty($_POST['code']) && $_POST['code']===$_SESSION['verif']){ 

/*un mail, un enregistrement mysql, une ouverture de fichier ... un traitement */

$destinataire="xxxxxxxxxxxxxxx@free.fr";  /*ICI LE MAIL QUI RECEPTIONNE*/
$subject=$objet;
$body=$message;

/*format du mail*/
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
/*ici on détermine l'expediteur et l'adresse de réponse*/
$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP";
/*tout est ok*/
    
    if (mail($destinataire,$subject,$body,$headers)){
    /*petite secu*/
    $message=NULL;
    $mail=NULL;
    $nom=NULL;
    $objet=NULL;
    $_POST=NULL;
    $_SESSION['verif']=NULL; /*anti double post*/
    $destinataire=NULL;
    echo '<h3 align="center">Votre message est envoyé, merci ! - <a href="javascript:history.back();">Retour au formulaire</a><br /></h3>';exit; 
    /* ou redirection header('Location: http://unsite.fr/merci.html');exit; ... */
    }else{
    /*petite secu*/
    $message=NULL;
    $mail=NULL;
    $nom=NULL;
    $objet=NULL;
    $_POST=NULL;
    $_SESSION['verif']=NULL;  /*anti double post*/
    $destinataire=NULL;
    echo '<h3 align="center">Désolé votre message n\'a pas pu être envoyé ! - <a href="javascript:history.back();">Retour au formulaire</a><br /></h3>';exit;
    /* ou redirection header('Location: http://unsite.fr/erreur.html');exit; ... */
    }

/*petite secu*/
$message=NULL;
$mail=NULL;
$nom=NULL;
$objet=NULL;
$_POST=NULL;
$destinataire=NULL;

} else {
echo $error='<h3 align="center">ERREUR SUR LE CODE DE SECURITE - <a href="javascript:history.back();">Retour au formulaire</a></h3>';exit;
}
?>

 Conclusion

- Ce petit bout de code est facilement adaptable à divers situation, 4 fichiers.
- Dans le zip c'est un 'form to mail' mais cela peut devenir un formulaire de login ou d'annonces ...
- Le reste est dans le zip.
- La présentation est spartiate (je sais, je suis pas un designer)
- Si vous utilisez mon code un petit mail pour le fun avec votre page.

bne prog

a++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

06 mars 2011 21:35:29 :
Correction de fautes d'ortographes + ajout css
07 mars 2011 14:22:14 :
Ajout controle javascript (client) au formulaire
07 mars 2011 14:32:20 :
nouvelle capture

 Sources du même auteur

Source avec Zip Source avec une capture GENERATEUR DE BOUTONS DE PARTAGES POUR RESEAUX SOCIAUX
Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ...
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ...
Source avec Zip Source avec une capture PAGINATION JAVASCRIPT PHP MYSQL
Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES

 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope
ENCODEUR D'ADRESSES EMAILS par Boris090

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture GÉNÉRATION DE FORMULAIRES HTML PERSONNALISÉS. par beejeridou
Source avec Zip FORMULAIRE EMAIL AVEC PIECE JOINTE REPRIS DE LITTLEBUBU par cfndiaye
Source avec Zip Source avec une capture ANTI-SPAM SIMPLE À INSERER MAIS NÉCESSITE BDD par azumi13
Source avec Zip Source avec une capture CLASSE DE MESSAGERIE par janhsh

Commentaires et avis

Commentaire de inwebo le 09/03/2011 00:24:30

Bonjour,

Je viens de parcourir rapidement cette source, petite indication il existe depuis la version 5.2 de PHP les fonctions sanitize/validate.

Pour plus d'information voir : http://www.php.net/manual/en/filter.filters.validate.php

Qui sera je pense plus rapide que la fonction VerifierAdresseMail()

Cordialement

Commentaire de cod57 le 09/03/2011 09:32:24

bonjour

@inwebo(lA REMARQUE EST JUSTE)
En effet les fonctions sanitize/validate (efficaces) existent et sont souvent oubliées.
Libre à chacun de les utiliser et de remplacer les fonctions du script.

Ce script je l'ai mis en place afin de montrer comment organiser classiquement son code, en esperant qu'il apporte une aide aux débutants. Coté securité on pourra encore le blindé.

Pour ceux qui s'intéressent à la sécurité et aux problèmes d'injections
http://www.phpsecure.info/v2/article/MailHeadersInject.php
http://www.securephpwiki.com/index.php/Email_Injection
http://www.tonyspencer.com/2005/12/15/email-injection-exploit-through-a-php-contact-form/

a++

a++

Commentaire de inwebo le 09/03/2011 18:24:52

Bonjour,

Dernière remarque : il faut éviter de mettre <h3 align="center"> c'est déprécié !

Peut être mettre les variables, $destinataire, et la taille des variables utilisées dans la fonction petitClean dans un fichier conf, ini (voir parse_ini_file : http://php.net/manual/fr/function.parse-ini-file.php), cela permet de centraliser tout cela, c'est plus simple d'éditer un fichier que de parcourir tout le code pour le mettre à sa sauce, ce qu'un débutant ne fera sans doute pas.

Cordialement.

Commentaire de cod57 le 09/03/2011 22:28:24

Bonsoir

oui un fichier ini serait le bienvenue

@inwebo : par contre h3 'deprecié' ... pourrais tu préciser

pour ceux qui veulent avec le ini : http://abyz.free.fr/form2mail/f_ini.zip
vous comprendrez le principe à vous de jouer, editer configuration.ini
je laisse la source comme avant sur phpcs, vous pouvez donc comparer les deux

a++

Commentaire de inwebo le 09/03/2011 22:41:33

bonsoir,

Il vaut mieux mettre tout cela dans une feuille de style externe css, car pour l'instant il faut éditer directement le code php, SI tout cela est dans une feuille de style css c'est centralisé, on sépare donc bien le travail, l'affichage et le traitement.

Cordialement

Commentaire de cod57 le 09/03/2011 23:18:32

bonsoir
oui un css externe ... là chacun fait ce qu'il veut
c'est vrai que coté css j'ai pas cherché
bon je laisse le truc dans l'état chacun personnalise comme il veut
le code n'est pas touffu, de plus dans la version ini c'est plus léger déjà
a++

Commentaire de icemaker2 le 14/03/2011 08:49:27

Bonjour,
Concernant la fonction FILTER_VALIDATE_EMAIL il me semble qu'elle ne fonctionne correctement qu'avec la version de php 5.2.0 !
Voir le commentaire et le test sur la page http://www.php.net/manual/en/filter.filters.validate.php
J'ai fait le test avec php 5.3.4 le résultat est négatif.
Merci pour ce script.

Commentaire de vinceslas le 10/04/2011 14:07:35

Bonjour,
Lors de l'envoie d'un mail je reçois une erreur du genre:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\Formulaire\envoi.php on line 86
Ça peux être du à quoi?

Commentaire de cod57 le 10/04/2011 15:12:58

bonjour

dans php.ini
tu dois activer ton smtp, exemple sfr

[mail function]
; For Win32 only.
SMTP = smtp.sfr.fr
smtp_port = 25
c'est une question pour le forum

a++

Commentaire de begueradj le 11/07/2011 14:00:26

Tous les codes que vous faites, COD57, sont très utiles et je vous en remercie.
begueradj

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

AIDEZ MOI !!! Formulaire et Email [ par xevslipknot ] XeVsLiPkNoTJ'aimerai savoir un trucG fai mon formulaire htmlJe recupere les valeur sur une autre page en phpMais j'aimerai aussi les recuperer en mail Mail et formulaire [ par Jackboy ] J'aimerai créer un formulaire, assez complexe (pas seulement email, nom, message,...) et j'aimerai avoir ce formulaire envoyer dans un email et format formulaire pour e-mail invisible [ par pyranhaz ] Bonjour,Je cherche à élaborer un formulaire php afin que les clients de mes petites annonces puissent envoyer leur réponse sans connaître le e-mail du formulaire en email vers deux adresses [ par metis15 ] Bonjour,toujours ce script qui se termine comme ça pour m'envoyer le formulaire par mail :$recipient = "moi@wanadoo.fr";$subject = "FormulaireGT";$mai Email en php sans formulaire aide merci ! [ par escrow ] bonsoir , apres avoir nivagué des heures et des heuresje n'ai pas reussi a trouver un code php qui me permet d'envoyer un email sans formulaire de cet email formulaire [ par astrolabbcracker ] bonjour, apr&#232;s avoir lutt&#233; pendant 2 heures pour trouver mon bonheur, finalement d&#233;&#231;u, je me lance pour vous poser une question.je validation de courriel [ par luciano12 ] Bonjour,J'aurais besoin de votre aide pour m'aider à faire la chose suivante:Je voudrais que les visiteurs qui visitent mon site Intenret puissent rem formulaire [ par thikomoon ] Rebonjour à tousdébutant php, je cherche un fichier source de formulaire pour mettre sur mon siteafin de recolter des email sur mon email seul petit h Mini formulaire... [ par lard ] Bonjour,Je débute en PHP donc soyez indulgent....Voici ma demande:Sur une page Web, je voudrais que les utilisateurs puissent entrer leurs adresses Em Question sur le formulaire (vérification email) [ par developvbdebut ] Bonsoir tout le mondeJe souhaiterai savoir si il y a un code qui permet de v&#233;rifier si c'est bien une adresse email qui &#224; &#233;tait rentr&#


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales