Association Shodaria : Forum de la communauté, aide et création de jeux gratuits en ligne
Nouvelles: Ouverture du forum de l'association Shodaria !
 
*
Bienvenue, Invité. Veuillez vous connecter ou vous enregistrer. 29 Août 2008, 21:37


Connexion avec identifiant, mot de passe et durée de la session


« sujet précédent | | sujet suivant »
Pages: [1] Imprimer
Auteur Sujet: Valider un compte par EMAIL  (Lu 623 fois)
dante
Administrator
Sr. Member
*****

Karma: 21
Hors ligne Hors ligne

Messages: 380



Voir le profil WWW Courriel
Valider un compte par EMAIL
« le: 23 Janvier 2007, 11:31 »

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 :

Code:
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 :

Code:
<?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
Code:
<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
Code:
<?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.
Journalisée
Pages: [1] Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  

Propulsé par MySQL Propulsé par PHP Association Shodaria : Forum de la communauté, aide et création de jeux gratuits en ligne | Powered by SMF 1.0.9.
© 2001-2006, Lewis Media. All Rights Reserved.

phpMyVisites
XHTML 1.0 Transitionnel valide ! CSS valide ! Dilber MC Theme by HarzeM