Inscription et validation de compte par mail

Soyez le premier à donner votre avis sur cette source.

Vue 28 419 fois - Téléchargée 26 896 fois

Description

Voici un petit bou de code d'inscription de membre et validation de compte :
J'utilise deux tables(comptes_provisoirs et comptes_definitifs).
voici le deroulement du prog dans l'ordre chronologique :

INSCRIPTION :
1 - L'utilisateur s'inscrit grace au formulaire d'inscription
2 - Envoi des données dans la table "comptes_provisoirs" si le formulaire est rempli correctement(champs remplis, expressions regulières, mot de passe et pseudo valide)
3 - le mail est envoyé dans la boite de l'utilisateur, il contient un lien de validation avec deux variables GET, pseudo et clef(nombre aleatoire)

VALIDATION DU COMPTE : (le lien dirige vers la meme page inscription.php)
5 - Connexion à la bd si les variables GET['pseudo'] et GET['clef] existent dans la table "comptes provisoirs"
6 - Transfert des données de la table comptes_provisoirs à la table comptes_definitifs
7 - suppression des données dans la table comptes_provisoirs

Dans le zip vous trouverez :
- un fichier SQL pour creer les deux tables "comptes_provisoirs" et "comptes_definitifs"
- un fichier php "inscription.php" qui contient le code d'inscription, validation et le formulaire html
- un fichier php "pcdb.php", include pour les requettes mysql(password, adresse, login, et tables)
note : les deux fichiers php doivent etre dans le dossier "codes", pour modifier les parametres de connexion mysql faites le dans le fichier "pcdb.php", creez une base nomé "Codes" et importer les deux tables du fichier sql

Si vous avez des remarques n'esitez pas

Source / Exemple :


<?php

                                                        //--------------------------------------------------------------------------------
														// INSCRIPTION ET VALIDATAION DE COMPTE PAR MAIL
														//Hawaks le 21 Décembre 2005
														//  ------------------------------------------------------------------------------

//--------------------------------------------
// FORMULAIRE D'INSCRIPTION 
//
// Envoi des données dans la table "comptes_provisoirs" si les conditions sont remplies
// -------------------------------------------

// variable initialisée à zero pour tester les conditions
$nb_faux = 0;

if (isset($_POST['pseudo']) && isset($_POST['password']) && isset($_POST['confirm_password']) && isset($_POST['mail']))
{
 $pseudo = $_POST['pseudo'];
 $password = $_POST['password'];
 $confirm_password = $_POST['confirm_password'];
 $mail = $_POST['mail'];
 
	// incrémenter la variable $nb_faux si les champs du formulaire sont  vides 
    if (empty($_POST['pseudo'])  || empty($_POST['password']) || empty($_POST['confirm_password']) || empty($_POST['mail']))
    {         
     ?>Champs non remplis<br/><? 
     $nb_faux++;
    }     
	
	// incrementer la variable $nb_faux si des caracteres ne sont pas autorisés pour le pseudo
    if (!preg_match('`^(\w{4,15})$`', $pseudo))
    {
     ?>Caractères non autorisés pour le pseudo<br/><? 
	 $nb_faux++;
    }
	
	// incrementer la variable $nb_faux si des caracteres ne sont pas autorisés pour le mot de passe et sa confirmation
    if (!preg_match('`^(\w{4,15})$`', $password) or !preg_match('`^(\w{4,15})$`', $confirm_password ))	
	{
	 ?>Caractères non autorisés pour le mot de passe<br/><? 
	 $nb_faux++;
	}
	
	// incrementer la variable $nb_faux si le mot de passe et la confirmation du mot de passe ne sont pas les meme
	if ($password != $confirm_password)
	{
	 ?>Mauvais pass<br/><?
     $nb_faux++;
	}
	
	// incrementer la variable $nb_faux si le pseudo existe dans la base de donnée
	if ($nb_faux >= 0)
	{
	 include("pcdb.php");
	 $connexion = mysql_connect($hote, $utilisateur, $mdp) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
     $choix_base = mysql_select_db($data_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>'); 
	 $requete = "SELECT pseudo FROM $table_cp WHERE pseudo='$pseudo'";
	 $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
	 $ligne = mysql_fetch_array($resultat);
	 
	    
        if ($pseudo == $ligne['pseudo'])
	    {
	     ?>Ce pseudo existe déja sur ce site<br/><? 
	     $nb_faux++;
	    }
	}
	
    //  incrémenter la variable $nb_faux si la case à cocher "conditions"  est null         
    if (isset($_POST['conditions']) == null)
    {
     ?>Conditions non coché<br/><? 
     $nb_faux++;	
    }
  	
	// affectation de la chaine "oui" ou "non" dans une variable pour la newsletter
	if (isset($_POST['newsletter']) != null)
    {
     $newsletter = "oui";
    }
	else
	{
	 $newsletter = "non";
	}
	
	if (isset($_POST['pays']) || isset($_POST['ville']) || isset($_POST['sexe']) || isset($_POST['jours']) 
	|| isset($_POST['mois']) || isset($_POST['annees']))
    {   
	 $pays = $_POST['pays'];
     $ville = $_POST['ville'];
     $sexe = $_POST['sexe'];
     $date_naissance = ($_POST['jours']) ."/". ($_POST['mois']) ."/". ($_POST['annees']);
	}
  
    // connexion à la base de donnée si il n'y a pas d'erreur (champs oubliés, expressions régulirères, vérification de mot de passe, vérification du pseudo)
    if ($nb_faux == 0) 
    {   
     include("pcdb.php"); 
	 
	 // affecter un nombre aléatoire dans la variable clef qui servira  a la validation du compte par mail
	 $clef = "0123456789";
     $clef = rand();
		 
     // requette envoi les données de l utilisateur dans la table comptes_provisoirs
     $connexion = mysql_connect($hote, $utilisateur, $mdp) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
     $choix_base = mysql_select_db($data_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>'); 
     $requete = "INSERT INTO $table_cp VALUES
	            ('', '$pseudo', '$password', '$mail', '$newsletter', '$pays', '$ville', '$sexe', '$date_naissance', '$clef')";
     $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
     mysql_close($connexion); 
	 
	    // Envoyer le mail si la requête à fonctionnée
	    if ($resultat == true)
		{
	     ?>Vous allez reçevoir un mail pour la validation de votre compte<br/><?
		 
		 $mail_destinataire = $_POST['mail'];             
         $sujet = "jeu, validation de l'inscription";
         $message = "Cet email a été envoyé à partir de http://www.jeu.com Ton mot de passe est: $password \n Ton pseudo est: $pseudo 
            		 Pour valider ton inscription clique sur le lien suivant. Nous te demandons ca  pour s'assurer que l'adresse mail que tu as entrée était correcte.
					 Ceci pour prévenir du spam et des abus. 
					 http://127.0.0.1/Codes/inscription.php?&amp;pseudo=$pseudo&amp;clef=$clef
					 Le Webmaster";
         $head = "Salut $pseudo ";
         mail($mail_destinataire, $sujet, $message, $head);
        }
   } 
}

//--------------------------------------------------------------------
// VALIDATION DU COMPTE APRES INSCRIPTION
//
// Verification du lien de validation via mail :
// 1 - connexion  si la clef et le pseudo existe dans la table "comptes_provisoirs"
// 2 - transfert des données dans la table "comptes_definitifs"
// 3 - suppression des données dans la table "comptes_provisoirs"
//--------------------------------------------------------------------

if (isset($_GET['pseudo']) && isset($_GET['clef']))
{
 $pseudo = $_GET['pseudo'];
 $clef = $_GET['clef'];

 include("pcdb.php"); 
 
 // requette chercher les données lorsque le champs pseudo et le champs clef existent dans la table "comptes_provisoirs"
 $connexion = mysql_connect($hote, $utilisateur, $mdp) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>'); 
 $choix_base = mysql_select_db($data_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>'); 	                                                          
 $requete = "SELECT pseudo, password, mail, newsletter, pays, ville, sexe, date_naissance FROM $table_cp WHERE pseudo = '$pseudo' AND clef = '$clef'";
 $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
    
	// affecter les infos utilisateurs si la clef et le pseudo existent dans la table "comptes_provisoirs"
    if($donnees = mysql_fetch_array($resultat))
    {
	 $pseudo = $donnees['pseudo'];
	 $password = $donnees['password'];
	 $mail = $donnees['mail'];
	 $newsletter = $donnees['newsletter'];
	 $pays = $donnees['pays'];
	 $ville = $donnees['ville'];
	 $sexe = $donnees['sexe'];
	 $date_naissance = $donnees['date_naissance'];
	 
	 // requette transferer les données de la table "comptes_provisoirs" à la table "comptes_definitifs"
	 $requete = "INSERT INTO $table_cd VALUES('',  '$pseudo', '$password', '$mail', '$newsletter', '$pays', '$ville', '$sexe', '$date_naissance')";
	 $resultat = mysql_query($requete) or die('<br/>3 Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
     // requette suppression des données provisoir de la table "comptes_definitifs"
	 $requete = "DELETE FROM $table_cp WHERE clef = '$clef' AND pseudo = '$pseudo'";
	 $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>'); 
	 mysql_close($connexion); 
	 ?>Votre compte est validé<br/><?
	}
	else
	{
	 ?>Votre compte est deja validé ou le lien de validation est incorrect<br/><?
	}
}

?>

<link rel="stylesheet" media="screen" type="text/css" title="index" href="includes.css" />

<form action="inscription.php" method="post">

Inscription :

<fieldset>
     <legend>Infos obligatoires</legend>
	 
     <table>
         <tr><td>Pseudo :</td><td><input type="text" name="pseudo"/ size="9"></td></tr>
         <tr><td>Mot de passe :</td><td><input type="password" name="password" size="9"/></td></tr>
		 <tr><td>Confirmer le mot de passe :</td><td><input type="password" name="confirm_password" size="9"/></td></tr>
         <tr><td>Mail :</td><td><input type="text" name="mail"/ size="15"></td></tr>
     </table>
     <input type="checkbox" name="conditions"/> J'ai lu et j'accepte les conditions générales d'utilisation de titre (trouver un nom) .<br/>
     <input type="checkbox" name="newsletter" checked="checked"/> Je souhaite recevoir la newletter dans ma boite mail .
</fieldset>

<fieldset>
     <legend>Infos personelles</legend>
	 <table>
	 <tr><td>Pays :</td><td width="170"><input type="text" name="pays" size="15" value="vide"/></td><td>
	 Sexe : <input type="radio" name="sexe" value="homme"/> Homme <input type="radio" name="sexe" value="femme"/> Femme <input type="radio" name="sexe" value="assexué" checked="checked"/> Assexué</td></tr>
	 <tr><td>Ville :</td><td width="170"><input type="text" name="ville" size="15" value="vide"/></td><td>
	 Date de naissance : <select name="jours">
    	                 <option></option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="O4">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option>
                         </select> /
                         <select name="mois">
    	                 <option></option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="O4">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option>
                         </select> /
                         <select name="annees">
                         <option></option><option value="1987" >1987</option><option value="1986" >1986</option><option value="1985" >1985</option><option value="1984" >1984</option><option value="1983" >1983</option><option value="1982" >1982</option><option value="1981" >1981</option><option value="1980" >1980</option><option value="1979" >1979</option><option value="1978" >1978</option><option value="1977" >1977</option><option value="1976" >1976</option><option value="1975" >1975</option><option value="1974" >1974</option><option value="1973" >1973</option><option value="1972" >1972</option><option value="1971" >1971</option><option value="1970" >1970</option><option value="1969" >1969</option><option value="1968" >1968</option><option value="1967" >1967</option><option value="1966" >1966</option><option value="1965" >1965</option><option value="1964" >1964</option><option value="1963" >1963</option><option value="1962" >1962</option><option value="1961" >1961</option><option value="1960" >1960</option><option value="1959" >1959</option><option value="1958" >1958</option><option value="1957" >1957</option><option value="1956" >1956</option><option value="1955" >1955</option><option value="1954" >1954</option><option value="1953" >1953</option><option value="1952" >1952</option><option value="1951" >1951</option><option value="1950" >1950</option><option value="1949" >1949</option><option value="1948" >1948</option><option value="1947" >1947</option><option value="1946" >1946</option><option value="1945" >1945</option><option value="1944" >1944</option><option value="1943" >1943</option><option value="1942" >1942</option><option value="1941" >1941</option><option value="1940" >1940</option><option value="1939" >1939</option><option value="1938" >1938</option><option value="1937" >1937</option><option value="1936" >1936</option><option value="1935" >1935</option>
                         </select></td></tr>
	 </table>
</fieldset>

<input type="submit" value="Valider"/>

</form>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
41
31 août 2012 à 15:58
tu n'as dérangé personne :)

n'hésite pas a poser des questions sur le forum.
cs_DPO
Messages postés
33
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
31 août 2012

31 août 2012 à 14:39
Bonjour,

Merci Maxime pour l'info, je comprend tout à fait que depuis 7 ans le code php évolue, hé heureusement.
Le php est pour moi tout nouveau, je comprend le fonctionnement, mais pas pour tout, et puis à mon jeune Age 55 ans, c'est pas trop tard pour mis intéresser.
désolé pour le dérangement, nous risquons de nous rencontrer de nouveau sur le sujet,(php)

Cordialement,
Didier
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
41
31 août 2012 à 14:18
La balise
<?
doit-être désactivée par default dans les nouvelles versions sur php.

La source a quand même 7 ans et php est un langage qui évolue assez vite.

Cordialement,

Maxime
cs_DPO
Messages postés
33
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
31 août 2012

31 août 2012 à 12:01
Bonjour à tous,

en testant le script en local, j'ai ce message d'erreur:

Parse error: syntax error, unexpected $end in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Codes\inscription.php on line 225

Pouvez vous me donner une info !
Merci
Rykets24
Messages postés
7
Date d'inscription
mardi 29 novembre 2011
Statut
Membre
Dernière intervention
7 décembre 2011

23 févr. 2012 à 22:47
Bonsoir a tous.
pour se qui comme moi ont pris se script, quelque modif on été apporté acr pour ma par sa merdouillé quand je cliquais sur mon lien de confirmation.

1- Dans les 2 bases, j'ai modifier le type de CLEF pour le passer a "text". //Perso sa me metté tjrs la même clef a tous le monde
2- j'ai modifier le lien a partir de "?" se qui donne dans l'adresse: monsite.fr/dossier/validation.php?pseudo=pseudo&clef=clef
3- j'ai modifier la partie VALIDATION DU COMPTE APRES INSCRIPTION notamment au début ou je suis passé de POST a GET et vers la fin, j'ai modifier aussi la requète d'insert bers la base définitif, la aussi sa bloquait et sa me donne ceci:

perso, j'ai extérnisé mes paramètres de connection a la base.

<?php

//--------------------------------------------------------------------
// VALIDATION DU COMPTE APRES INSCRIPTION
//
// Verification du lien de validation via mail :
// 1 - connexion si la clef et le pseudo existe dans la table "comptes_provisoirs"
// 2 - transfert des données dans la table "comptes_definitifs"
// 3 - suppression des données dans la table "comptes_provisoirs"
//--------------------------------------------------------------------

if (isset($_GET['pseudo']) && isset($_GET['clef']))
{
$pseudo = $_GET["pseudo"];
$clef = $_GET["clef"];

include("../scripts/dbconnect.php");

// requette chercher les données lorsque le champs pseudo et le champs clef existent dans la table "comptes_provisoirs"
$connexion = mysql_connect($hote, $utilisateur, $mdp) or die('
Connexion au serveur impossible.
Contactez le webmaster si le problème n\'est pas résolu.
');
$choix_base = mysql_select_db($data_base, $connexion) or die('
Sélection de la base de donnée echouée.
Contactez le webmaster si le problème n\'est pas résolu.
'); $requete "SELECT pseudo, password, mail FROM $table_cp WHERE pseudo '$pseudo' AND clef = '$clef'";
$resultat = mysql_query($requete) or die('
Execution de la requete (recherche des données provisoire - L23) impossible.
Contactez le webmaster si le probleme n\'est pas resolu.
');

// affecter les infos utilisateurs si la clef et le pseudo existent dans la table "comptes_provisoirs"
if($donnees = mysql_fetch_array($resultat))
{
$pseudo = $donnees['pseudo'];
$password = $donnees['password'];
$mail = $donnees['mail'];
// requette transferer les données de la table "comptes_provisoirs" à la table "comptes_definitifs"
$requete = "INSERT INTO $table_cd(id,pseudo,password,mail)";
$requete .= " VALUES('','$pseudo','$password','$mail')";

$resultat = mysql_query($requete) or die('
Execution de la requete (transfert des donnees provisoire vers definitif - L35) impossible.
Contactez le webmaster si le probleme n\'est pas resolu.
');
// requette suppression des données provisoir de la table "comptes_definitifs" $requete "DELETE FROM $table_cp WHERE clef '$clef' AND pseudo = '$pseudo'";
$resultat = mysql_query($requete) or die('
Execution de la requete (suppression des donnees provisoire - L38) impossible.
Contactez le webmaster si le probleme n\'est pas resolu.
');
mysql_close($connexion);
?>Votre compte est validé
<?
}
else
{
?>Votre compte est deja valide ou le lien de validation est incorrect
<?
}
}

?>
Afficher les 64 commentaires

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.