Création d`un mail de confirmation en PHP

Transcription

Création d`un mail de confirmation en PHP
Création d'un mail de confirmation en PHP
par MathieuGut
Date de publication : 6 avril 2008
À l'heure où les inscriptions robots sont de plus en plus fréquentes et où il est difficile de
distinguer un utilisateur réel d'un utilisateur factice, la création d'un mail de confirmation
permet de diminuer considérablement les inscriptions indésirables...
Complexité de l'article : Débutant (Bases requises : PHP/MySQL)
Création d'un mail de confirmation en PHP par MathieuGut
1.Problématique........................................................................................................................................................... 3
2.Enjeux et choix techniques.......................................................................................................................................4
3.Code.......................................................................................................................................................................... 5
4.Conclusion.................................................................................................................................................................8
5.Remerciements......................................................................................................................................................... 9
-2Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
1.Problématique
Face à un phénomène grandissant qui est celui des inscriptions automatiques et autres multi-comptes, un des
systèmes les plus efficaces reste à ce jour la confirmation par mail.
Vous savez, c'est le genre de message que l'on reçoit pour activer notre compte après une inscription sur un forum,
site, jeu...
Pour lutter contre se fléau, nous allons créer un petit module qui enverra automatiquement un mail lors de la validation
du formulaire d'inscription. Ce mail contiendra alors la procédure à suivre (un lien internet) pour finaliser l'inscription
du nouveau compte.
Cet article part sur le principe que vous possédez une
Base de Données (BDD) et
que vous maîtrisez sa gestion.
Dans cet article, PDO sera le système pour gérer les relations avec la base de données.
-3Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
2.Enjeux et choix techniques
Cet article s'adresse principalement aux Webmasters désireux de limiter les inscriptions factices et par conséquent
diminuer le temps perdu à la maintenance et à la vérification de validité des données...
Avant de commencer, il nous faut quelques petits équipements :
•
•
•
La fonction Mail() pour l'envoi du Mail.
L'extension PDO pour les relations avec la base de données.
Une page validation.php (à créer).
En premier lieu et avant de faire quoi que ce soit, il nous faut rajouter deux champs à
notre table "membres" :
•
•
Le champ cle de type varchar de taille 32 ; contiendra la clé de vérification pour l'activation du compte.
Le champ actif de type integer (INT ou ENTIER) ; prendra la valeur 0 d'origine et permettra de savoir si un
compte est actif.
Une fois nos champs ajoutés, nous n'auront plus besoin de modifier la structure de la table membres.
Voici les tâches que l'on va accomplir pour la conception de ce module ;
Premier Temps (Ajouts à apporter sur votre page de validation de l'inscription) :
I
II
III
IV
Récupération du login et de l'adresse mail du prétendant.
Génération aléatoire d'une clé et stockage de celle-ci dans la base de données.
Envoi du mail contenant la procédure à suivre pour l'activation.
Avertissement à l'utilisateur qu'un mail vient de lui être envoyé pour confirmer son inscription.
Réception du mail...
Second Temps (Sur votre nouvelle page validation.php) :
I
II
III
IV
Récupération de la clé correspondant au login provenant du lien du mail.
Comparaison de la clé de la base de données avec celle provenant du lien du mail.
Modification de la valeur du champ actif dans la base de données.
Avertissement à l'utilisateur sur l'état de l'activation de son compte.
Dernier Temps (Sur votre page de connexion par exemple) :
I
II
III
Récupération de la valeur du champ actif dans la BDD pour le login correspondant à la demande de
connexion.
Vérification de son état (0 ou 1).
Autorise ou pas la connexion du membre en fonction de l'état du champ actif.
Pour comprendre plus en détail les opérations citées ci-dessus, les codes suivants seront commentés.
-4Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
3.Code
Les codes présentés ci-dessous sont à titre d'exemples. Pour éviter toute erreur, ils ne doivent pas être Copiés/
Collés. À vous d'adapter les exemples à votre situation...
I. Ajouts à apporter sur votre page de validation de l'inscription (exemple : inscriptionvalid.php)
<?php
//...
// Votre code
//...
// Connexion à la base de données
//...
// Vérification des données saisies par l'utilisateur
//...
// Enregistrement des données dans la base
//...
// Récupération des variables nécessaires au mail de confirmation
$email = $_POST['email'];
$login = $_POST['login'];
// Génération aléatoire d'une clé
$cle = md5(microtime(TRUE)*100000);
// Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
$stmt = $dbh->prepare("UPDATE membres SET cle=:cle WHERE login like :login");
$stmt->bindParam(':cle', $cle);
$stmt->bindParam(':login', $login);
$stmt->execute();
// Préparation du mail contenant le lien d'activation
$destinataire = $email;
$sujet = "Activer votre compte" ;
$entete = "From: [email protected]" ;
// Le lien d'activation est composé du login(log) et de la clé(cle)
$message = 'Bienvenue sur VotreSite,
Pour activer votre compte, veuillez cliquer sur le lien ci dessous
ou copier/coller dans votre navigateur internet.
http://votresite.com/activation.php?log='.urlencode($login).'&cle='.urlencode($cle).'
--------------Ceci est un mail automatique, Merci de ne pas y répondre.';
mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
//...
// Fermeture de la connexion
//...
// Votre code
//...
Ces extraits de codes doivent être rajoutés sur la page contenant la vérification de la conformité des données saisies
par l'utilisateur et leurs enregistrements dans la base.
Exemple de réception du mail de confirmation :
Je valide le formulaire avec entre autres les informations suivantes :
Login : mathieugut
Email : [email protected]
Voilà alors le mail que je vais recevoir :
-5Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
Mail reçu
Sujet : Activer votre compte
Expéditeur : [email protected]
Message :
Bienvenue sur VotreSite,
Pour activer votre compte, veuillez cliquer sur le lien ci dessous ou copier/coller dans votre
navigateur internet.
http://votresite.com/activation.php?
log=mathieugut&cle=1e374561851a32afcd802cf5bc97b707
--------------Ceci est un mail automatique, Merci de ne pas y répondre.
Une fois le mail reçu et le clic sur le lien, l'utilisateur se retrouve alors sur la page validation.php, c'est donc cette
page qui va nous permettre d'activer le compte en fonction du résultat de la comparaison des deux clés (celle du
lien du mail et celle de la base de données).
II. La page validation.php
<?php
//...
// Votre code
//...
// Connexion à la base de données
//...
// Récupération des variables nécessaires à l'activation
$login = $_GET['log'];
$cle = $_GET['cle'];
// Récupération de la clé correspondant au $login dans la base de données
$stmt = $dbh->prepare("SELECT cle,actif FROM membres WHERE login like :login ");
if($stmt->execute(array(':login' => $login)) && $row = $stmt->fetch())
{
$clebdd = $row['cle']; // Récupération de la clé
$actif = $row['actif']; // $actif contiendra alors 0 ou 1
}
// On teste la valeur de la variable $actif récupéré dans la BDD
if($actif == '1') // Si le compte est déjà actif on prévient
{
echo "Votre compte est déjà actif !";
}
else // Si ce n'est pas le cas on passe aux comparaisons
{
if($cle == $clebdd) // On compare nos deux clés
{
// Si elles correspondent on active le compte !
echo "Votre compte a bien été activé !";
// La requête qui va passer notre champ actif de 0 à 1
$stmt = $dbh->prepare("UPDATE membres SET actif = 1 WHERE login like :login ");
$stmt->bindParam(':login', $login);
$stmt->execute();
}
}
else // Si les deux clés sont différentes on provoque une erreur...
{
echo "Erreur ! Votre compte ne peut être activé...";
}
//...
// Fermeture de la connexion
//...
// Votre code
-6Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
II. La page validation.php
//...
Maintenant que notre champ actif est opérationnel et à jour, il ne nous reste plus qu'à l'utiliser pour vérifier la validité
d'un compte lors de la procédure de connexion de celui-ci...
III. La page de connexion (exemple:login.php)
<?php
//...
// Votre code
//...
// Connexion à la base de données
//...
// Récupération des données nécessaires à la connexion
//...
// Récupération des variables necessaires à la vérification du champ 'actif' de la BDD
$login = $_POST['login'];
// Récupération de la valeur du champ actif pour
$stmt = $dbh->prepare("SELECT actif FROM membres
if($stmt->execute(array(':login' => $login)) &&
{
$actif = $row['actif']; // $actif contiendra
}
le login $login
WHERE login like :login ");
$row = $stmt->fetch())
alors 0 ou 1
// Il ne nous reste plus qu'à tester la valeur du champ 'actif' pour
// autoriser ou non le membre à se connecter
if($actif == '1') // Si $actif est égal à 1, on autorise la connexion
{
//...
// On autorise la connexion...
//...
}
else // Sinon la connexion est refusé...
{
//...
// On refuse la connexion et/ou on previent que ce compte n'est pas activé
//...
}
//...
// Fermeture de la connexion
//...
// Votre code
//...
Tous les noms d'objets et de variables utilisés dans cet article sont à titre d'exemples...
Veillez à bien les remplacer par vos propres noms.
-7Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
4.Conclusion
Cet article touche à sa fin, sachez que les exemples de codes sont à titre d'exemples et ne peuvent fonctionner par
un simple Copier/Coller.
À vous de les adapter en fonction de vos besoins...
La vérification pour la validation d'un compte à l'aide du login et d'une clé est une façon très simpliste de faire, des
améliorations sont bien sûr possibles, comme l'ajout en paramètre d'un délai à respecter pour la validation, ou encore
l'ajout d'un captcha pour plus de sûreté... Libre à votre imagination :)
Envoyer un mail en PHP (Excellent article d'Adrien Pellegrini sur l'utilisation de la fonction Mail() de PHP).
La FAQ PHP (pdo) (Apprendre et comprendre PDO).
-8Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/
Création d'un mail de confirmation en PHP par MathieuGut
5.Remerciements
Merci à Yogui et à Yoshio pour les corrections apportées à l'article.
-9Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 MathieuGut. Aucune reproduction, même partielle, ne peut
être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
http://m-gut.developpez.com/tutoriels/php/mail-confirmation/