Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VALIDATION D'UN COMPTE PAR MAIL AVEC URL...


Information sur la source

Description

Ce script valide un compte membre par mail avec URL integrée.
Il faut:
- 2 pages, une pour l'inscription (avec votre formulaire html biensur) et une pour la verification.
- 2 tables, une pour le compte provisoir et une pour les comptes validés (definitif)

-La page d' inscription envoie les données du formulaire et une clé aleatoire dans la table compte_provisoir.
-La page de verification compare la clé et l id, si elles sont identiques les données de la table compte_provisoir seront effacées et deplacées dans la table compte_definitif

Heu je suis debutant et c est mon tout premier script que je post ici


 

Source

  • //------------------------------
  • // PAGE D INSCRIPTION
  • //------------------------------
  • //creation d une variable qui genere une clé a 10 chiffres
  • $numero = "0123456789";
  • $clef = str_shuffle($numero);
  • //envoi des données dans la table compte_provisoir avec la clé
  • if (sizeof($_POST))
  • {
  • if (isset($_POST['pseudo']) and isset($_POST['password']) and isset ($_POST['mail']))
  • {
  • $pseudo = $_POST['pseudo'];
  • $password = $_POST['password'];
  • $mail = $_POST['mail'];
  • mysql_connect("localhost", "root", "");
  • mysql_select_db("test");
  • mysql_query("INSERT INTO compte_provisoir VALUES('', '$clef', '$pseudo', '$password', '$mail')")or die(mysql_error());
  • $reponse_id = mysql_query("SELECT id FROM compte_provisoir WHERE pseudo = '$pseudo'")or die(mysql_error());
  • mysql_close();
  • echo "tu vas recevoir un mail";
  • //le mail est envoyé, l'url contient la clé et l'id pour la comparaison (page verification)
  • while ($donnees = mysql_fetch_array($reponse_id))
  • {
  • $id = $donnees['id'] ;
  • $mail_destinataire = $_POST['mail'];
  • $sujet = " validation de l'inscription";
  • $message = "Ton mot de passe est: $password \n Ton pseudo est: $pseudo \n \n Pour valider ton inscription clique sur le lien suivant: \n http://127.0.0.1:81/Php/zone_membre_validation.php?id=$id&clef=$clef";
  • $head = "Salut $pseudo ";
  • mail($mail_destinataire, $sujet, $message, $head);
  • }
  • }
  • //-----------------------------
  • // PAGE VERIFICATION (http://127.0.0.1:81/Php/zone_membre_validation.php?id=$id&clef=$clef)
  • //-----------------------------
  • //ici on recupere la clé et l id de l'url
  • if (isset($_GET['id']) and isset($_GET['clef']))
  • {
  • $recherche_id= $_GET['id'];
  • $recherche_clef = $_GET['clef'];
  • //on recupere les données de la table compte_provisoir
  • mysql_connect("localhost", "root", "");
  • mysql_select_db("test");
  • $reponse_comparaison = mysql_query("SELECT id, clef FROM compte_provisoir WHERE id = '$recherche_id'")or die(mysql_error());
  • $reponse_provisoir = mysql_query("SELECT clef, pseudo, password, mail FROM compte_provisoir WHERE id = '$recherche_id'")or die(mysql_error());
  • mysql_close();
  • while ($donnees_provisoir = mysql_fetch_array($reponse_provisoir))
  • {
  • $clef = $donnees_provisoir['clef'];
  • $pseudo = $donnees_provisoir['pseudo'];
  • $password = $donnees_provisoir['password'];
  • $mail = $donnees_provisoir['mail'];
  • }
  • while ($donnees_comparaison = mysql_fetch_array($reponse_comparaison))
  • {
  • //ici le plus important on compare la clé de la table compte_provisoir a celle de l'url, idem pour l'id, si elles sont identiques alors on en fait une requette pour balancer les données dans le compte_definitif et on supprime celles du compte provisoir
  • if ($donnees_comparaison['clef'] == $recherche_clef and $donnees_comparaison['id'] == $recherche_id)
  • { echo "compte validé"};
  • mysql_connect("localhost", "root", "");
  • mysql_select_db("test");
  • mysql_query("INSERT INTO compte_definitif VALUES('', '$clef', '$pseudo', '$password', '$mail')")or die(mysql_error());
  • mysql_query("DELETE FROM compte_provisoir WHERE clef = '$clef '")or die(mysql_error());
  • mysql_close();
  • }
  • else {echo "echec validation";}
  • //si la variable clé (de la table compte_provisoir)
  • if (empty($clef))
  • { echo "votre compte est deja validé";}
  • }
//------------------------------
// PAGE D INSCRIPTION 
//------------------------------

//creation d une variable qui genere une clé a 10 chiffres 
$numero = "0123456789";
$clef = str_shuffle($numero);

//envoi des données dans la table compte_provisoir avec la clé
if (sizeof($_POST))
{
    if (isset($_POST['pseudo']) and isset($_POST['password']) and isset ($_POST['mail'])) 
          {
    
             $pseudo = $_POST['pseudo'];
             $password = $_POST['password'];
             $mail = $_POST['mail'];   

             mysql_connect("localhost", "root", ""); 
             mysql_select_db("test"); 
             mysql_query("INSERT INTO compte_provisoir VALUES('', '$clef', '$pseudo', '$password', '$mail')")or die(mysql_error()); 
             $reponse_id = mysql_query("SELECT id FROM compte_provisoir WHERE pseudo = '$pseudo'")or die(mysql_error());
            mysql_close(); 
	
            echo "tu vas recevoir un mail";

           //le mail est envoyé, l'url contient la clé et l'id pour la comparaison (page verification)	
            while ($donnees = mysql_fetch_array($reponse_id)) 
	  {
	       $id = $donnees['id'] ;
                       $mail_destinataire = $_POST['mail'];             
                       $sujet = " validation de l'inscription";
                       $message = "Ton mot de passe est: $password \n Ton pseudo est: $pseudo \n \n Pour valider ton inscription clique sur le lien suivant: \n http://127.0.0.1:81/Php/zone_membre_validation.php?id=$id&clef=$clef";
                       $head = "Salut $pseudo ";
                       mail($mail_destinataire, $sujet, $message, $head);
                  }
             }

//-----------------------------
// PAGE VERIFICATION (http://127.0.0.1:81/Php/zone_membre_validation.php?id=$id&clef=$clef)
//-----------------------------

//ici on recupere la clé et l id de l'url
if (isset($_GET['id']) and isset($_GET['clef']))
   {
       $recherche_id= $_GET['id'];
       $recherche_clef = $_GET['clef'];

       //on recupere les données de la table compte_provisoir
       mysql_connect("localhost", "root", ""); 
       mysql_select_db("test"); 
       $reponse_comparaison = mysql_query("SELECT id, clef FROM compte_provisoir WHERE id = '$recherche_id'")or die(mysql_error());
       $reponse_provisoir = mysql_query("SELECT clef, pseudo, password,   mail FROM compte_provisoir WHERE id = '$recherche_id'")or die(mysql_error());
      mysql_close(); 

       while ($donnees_provisoir = mysql_fetch_array($reponse_provisoir))
        {
           $clef = $donnees_provisoir['clef'];
           $pseudo = $donnees_provisoir['pseudo'];
           $password = $donnees_provisoir['password'];
           $mail = $donnees_provisoir['mail'];
        }

        
        while ($donnees_comparaison = mysql_fetch_array($reponse_comparaison))
       {    
                //ici le plus important on compare la clé de la table compte_provisoir a celle de l'url, idem pour l'id, si elles sont identiques alors on en fait une requette pour balancer les données dans le compte_definitif et on supprime celles du compte provisoir
	if ($donnees_comparaison['clef'] == $recherche_clef  and  $donnees_comparaison['id'] == $recherche_id)
                { echo "compte validé"};  	  
                 mysql_connect("localhost", "root", ""); 
                 mysql_select_db("test"); 
                 mysql_query("INSERT INTO compte_definitif VALUES('', '$clef', '$pseudo', '$password', '$mail')")or die(mysql_error());
                 mysql_query("DELETE FROM compte_provisoir WHERE clef = '$clef '")or die(mysql_error());	  
	 mysql_close(); 
       }      
         
         else  {echo "echec validation";}  
          
         //si la variable clé (de la table compte_provisoir)
         if (empty($clef))
	  { echo "votre compte est deja validé";}

   }

Conclusion

Vous pouvez ameliorer le script par exemple: effacer un compte de la table compte_provisoir au bout d'une semaine grace à la date...
J attends vos remarques
merci

 

Commentaires et avis

signaler à un administrateur
Commentaire de tooms2028 le 11/03/2005 12:02:28

Excusez moi j'ai oublié une accolade dans la page d inscription

signaler à un administrateur
Commentaire de tooms2028 le 11/03/2005 12:02:52

Excusez moi j'ai oublié une accolade dans la page d inscription

signaler à un administrateur
Commentaire de cseagle le 11/03/2005 12:31:19

Salut,

Remplace :

$reponse_id = mysql_query("SELECT id FROM compte_provisoir WHERE pseudo = '$pseudo'")or die(mysql_error());

par :

$reponse_id = mysql_insert_id();
Récupère l'id de l'enregistrement précédent.

Et de plus moi j'aurais crypté la clé par md5, mais bon.

Sinon sympa comme source.

signaler à un administrateur
Commentaire de mutkas10 le 11/03/2005 12:51:49

Pour un debut en php, bravo.

signaler à un administrateur
Commentaire de mutkas10 le 11/03/2005 12:51:57

Pour un debut en php, bravo.

signaler à un administrateur
Commentaire de keymaker le 11/03/2005 13:59:41

tu pourrait peut-etre, je n'ai pas verifié si c'etait plus rapide, generer ta clef avec un nombre aleatoire...

sinon, c'est sympa, et ca a l'air de marcher...

signaler à un administrateur
Commentaire de malik7934 le 11/03/2005 14:47:31

Hello, j'ai lu le script en diagonal... j'utilise un système similaire sur mon site avec un petit script en plus bien pratique que je te conseille d'implémenter: il efface de mes tables les inscriptions provisoires non validées au bout de 24 heures... histoire de pas avoir de résidus!

Pour le check automatique -> cron

++

signaler à un administrateur
Commentaire de fg85 le 11/03/2005 17:26:11

Ouai moi aussi j'ai créé un script similaire sur mon site mais j'efface de mes tables les inscriptions provisoires non validées au bout de 24 heures...

----------------------------------
http://fg.logiciel.free.fr

signaler à un administrateur
Commentaire de juki_webmaster le 11/03/2005 18:15:02

Salut,

Oué, c'est ça le principe et merci de l'avoir montrer publiquement, parcontre;

Tu remet dans la db (table definitif), un champ 'clef' or il ne sert plus à rien.

Deplus, $clef & $id sont tout deux, deux chaines de caractére numerique, tu na mis aucune protection et tu t'expose à une faille d'injection sql (et oui ce n'est pas negligeable!), tu peux :
- utiliser un test pour savoir si ce sont deux chaines strictement numerique ctype_digit(); http://www.nexen.net/docs/php/annotee/function.ctype-digit.php
(à partir de php4, voir nexen.net).

- utiliser une expression reguliere permettant de detecter et te renvoyer un booeleen si la chaine ne contient que des chiffres [...]


Deplus, tu na pas securiser les données entrente [...]
Et je voit que tu te connecte/deconnecte de la base sql intempestivement!

A part ça, bien jouer, d'avoir proposer ce type de validation (par trés presente sur ce site)

7/10

Bonne continuation.

signaler à un administrateur
Commentaire de tooms2028 le 11/03/2005 18:26:08

merci a tous pour vos commentaires

signaler à un administrateur
Commentaire de tooms2028 le 11/03/2005 21:30:54

Ok je vais voir ca pour la securité et ameliorer le script

Le champ clé dans la table definitif est inutile, en fait c'est moi je m en sert dans un autre script pour mon site, j'ai oublié de l enlever pour presenter le code ici desolé.

Si j'ai bien compri une personne peut faire une injection sql en modifiant l url de validation???

signaler à un administrateur
Commentaire de juki_webmaster le 13/03/2005 11:24:47

Tout à fait, tu inclut la valeur des variables directement dans la requette sql sans formatage, resultat: possiblité de ce faire gazer un site (ou une db).


http://schouthibaut.free.fr/article.php?sid=54&&mode=&order=0&thold=0 premier tuto qui m'est tomber sous la main.

signaler à un administrateur
Commentaire de GiUsTiNo le 14/03/2005 20:25:06

J'en profite qu'on parle de ca pour demander quelque chose...
J'ai completement oublié comment, dans un requête mysql, envoyer un "timer" => genre effacement d'une table client au bout de 24 heures :p
Merci de votre réponse :-)

Giustino, Admin VegaGames

signaler à un administrateur
Commentaire de chanlle le 25/08/2005 16:19:16

Pour les debutants, l'incolade , elle vas ou?

signaler à un administrateur
Commentaire de keke_boys le 24/02/2006 19:12:09

# //ici on recupere la clé et l id de l'url
# if (isset($_GET['id']) and isset($_GET['clef']))
#    {
#        $recherche_id= $_GET['id'];
#        $recherche_clef = $_GET['clef'];
.................

simpa le code , mais j'ai un ptit problème (plutot chi***)
voilà pour le moment la base de donnée et le site sont hébergés chez multimania , je sais pas si le problème vient de là , mais les GET marchent pas, jusqu'à l'inscription ca marche nikel , j'ai verifié ds la table compte_provisoir c'est bien rentré , mais dès que la page verification est ouverte , j'ai fait un test d'affichage des valeur de $recherche_id et $recherche_clef  et ca m'affiche rien...
donc si quelqu'un peut m'éclairer sur le problème ca serait simpa ;)
merci d'avance

signaler à un administrateur
Commentaire de Tit0x le 18/05/2006 09:25:48

>>keke_boys : bon depuis février t'as peut être trouvé mais j'pense que chez multimania(lycos) ils utilisent une URL de " masquage " comme chez ifrance. C'est à dire que tu ne verras pas l'url du fichier que tu lis (si tu vas sur ton site en tappant l'adresse : http://ton-site.com et que tu clic sur un lien tu n'auras pas cette adresse : http://ton-site.com/ton-fichier.php) Il garde toujours la même adresse comme pour les redirections en .fr.st // .fr.cx  // etc...

Donc les $_GET ne fonctionneront pas...  

signaler à un administrateur
Commentaire de keke_boys le 18/05/2006 23:55:23

>>Titox :
ouais j'ai laisse tombé le $_GET pour une autre méthode, mais bon à mon avis ca vient de multimania, un pote a testé sous free et il n'a pas de problème.
merci quand meme pour ta reponse ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.