Nous allons voir ici comment forcer la validation d'un compte par Email.
Le procédé est assez simple, et si vous avez déjà valider un compte par ce moyen, vous avez du facilement comprendre comment faire.
Vous avez donc déjà votre table sql qui contient la liste des login / mot de passe et autres broutilles non ?
Si ce n'est pas le cas, imaginons une table assez simpliste :
CREATE TABLE `membre` (
`id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` VARCHAR( 40 ) NOT NULL ,
`mdp` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 70 ) NOT NULL ,
`date_inscription` INT( 10 ) NOT NULL ,
`cle` VARCHAR( 40 ) NOT NULL ,
`etat` SMALLINT( 1 ) NOT NULL DEFAULT '1'
) ENGINE = innodb;
Pour plus d'informations, se rapporter à un script de création d'espace membre.
Deux champs nous intéressent ici : "
cle" et "
etat"
La clé sera une chaine de caractères et de chiffres aléatoires uniques (étant donné les chances d'avoir 2 fois une même clé, nous la considérerons comme unique) et un champ de type petit entier, "etat" qui fonctionnera comme ceci :
etat = 1 // en attente de validation
etat = 2 // membre validé
etat = etc ... // ce que vous voulez, exemple : compte gelé (triche)
Je fais ici abstraction des du formulaire d'inscription.
Voici le script qui recoit les variables. Imaginons que le méthode soit "POST", et les champs portant les mêmes noms que notre table. Nous aurions donc le script suivant pour l'inscription au jeu :
<?php
// on appelle tous vos fichiers d'entête contenant connexion à la bdd, fonctions ...
require ( ' config.php ' ) ;
// test des variables
if ( !isSet($_POST['login'], $_POST['mdp'], $_POST['email']) ) {
$_SESSION['inscription']['erreur'] = 'Tous les champs sont obligatoires';
header('Location:inscription.php'); // redirection vers le formulaire
} else {
$login = htmlentities(addslashes( $_POST['login'] ));
$mdp = md5('motquevousvoulez'.htmlentities(addslashes( $_POST['mdp'] ))); // mdp crypté
$email = htmlentities(addslashes( $_POST['email'] ));
// vérification des login / email déja existant que je passe ici, cf espace membre
// liste des lettres/chiffres qui composeront la clé
$lettre=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0');
$cle = '';
// clé de 16 caracteres ici
for($i=0;$i<=15;$i++) $cle.=$lettre[rand(0,35)];
mysql_query('INSERT INTO `membre` ( `id` , `login` , `mdp` , `email` , `date_inscription` , `cle`)
VALUES ("", "'.$login.'", ".$mdp.'", ".$email.'", '.time().', "'.$cle.'")');
$message='Bienvenue sur le jeu http://www.votre-jeu.com/
Nous vous rappelons vos identifiants :
Login de connexion : '.$login.'
Mot de passe : '.htmlentities(addslashes( $_POST['mdp'] )).'
Mais pour pouvoir valider votre compte, cliquez sur le lien : http://www.votre-jeu.com/valide.php?cle='.$cle.'&login='.$login.'
Si le lien ne marche pas, allez sur la page http://www.votre-jeu.com/valide.php et entrez la clé : '.$cle.'
Merci de votre intérêt pour notre jeu ! Et nous espèrons qu\'il vous plaira, n\'hésitez pas à passer sur le forum.';
$destinataire = $email;
$expediteur = "admin@votre-jeu.com";
$objet = 'Inscription à votre-jeu.com';
//on envoie le mail
mail($destinataire, $objet, $message, "From: $expediteur\r\nReply-To: $expediteur");
header('Location:inscription.php?action=termine');
}
?>
Ce code enregistre uniquement les varaibles nécessaires à notre joueur. Si vous en voulez plus, libre à vous !
Maintenant voyons la page "valide.php" qui vérifie tout ça :
Le formulaire ressemble à ca :
valide_formulaire.htm <form action="valide.php" method="get">
Login : <input type="text" name="login" /> <br>
Clé : <input type="text" name="cle" /> <br>
<input type="submit" value="Valider le compte" />
</form>
valide.php<?php
// on appelle tous vos fichiers d'entête contenant connexion à la bdd, fonctions ...
require ( ' config.php ' ) ;
// test des variables
if ( !isSet($_GET['login'], $_GET['cle']) ) {
// si les champs sont non renseignés on les demande
require ( ' valide_formulaire.htm ' ) ;
} else {
$login = htmlentities(addslashes( $_POST['login'] ));
$cle = htmlentities(addslashes( $_POST['mdp'] ));
// on vérifie que tout est bon : clé, login et état
$requete = mysql_query('SELECT 1 FROM `membre` WHERE cle = "'.$cle.'" AND login = "'.$login.'" AND etat = 1 LIMIT 1');
if(mysql_num_rows($requete) == 1) {
mysql_query ('UPDATE `membre` SET etat = 2 WHERE login = "'.$login.'" LIMIT 1');
echo 'Compte validé';
} else {
echo 'Clé invalide avec ce login ou compte déjà activé';
require ( ' valide_formulaire.htm ' ) ;
}
}
?>
Rudimentaire mais simple et rapide à mettre en place. Si vous avez des questions, posez les ici.