Formulaire vers courriel basique avec contrôle captcha anti spam (form to mail)

Soyez le premier à donner votre avis sur cette source.

Vue 13 676 fois - Téléchargée 2 707 fois

Description

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

icemaker2
Messages postés
5
Date d'inscription
lundi 6 janvier 2003
Statut
Membre
Dernière intervention
14 juin 2007
-
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.
cs_vinceslas
Messages postés
12
Date d'inscription
vendredi 25 décembre 2009
Statut
Membre
Dernière intervention
31 mai 2013
-
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?
cod57
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
8 -
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++
begueradj
Messages postés
291
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
25 août 2014
1 -
Tous les codes que vous faites, COD57, sont très utiles et je vous en remercie.
begueradj
Commenter la réponse de inwebo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.