Activation du compte

Fermé
max1395 - 24 sept. 2009 à 13:38
 max1395 - 4 oct. 2009 à 11:30
Bonjour,
je suis webmaster d'un site et je voudrais faire un systeme d'activation du compte : je voudrais que quand une personne s'inscrit sa lui envoie un mail avec un lien sur lequel la personne doit cliquer pour valider son inscription.
je ne sais pas du tout comment faire , je n'est pas de code de depart si vous pouviez m'aider ?

merci beaucoup

28 réponses

natsu46 Messages postés 3 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 24 septembre 2009
24 sept. 2009 à 13:43
tu le fais comment ton site?
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
24 sept. 2009 à 13:52
salut.

je ne sais pas a quel niveau tu en es, si tu as déja créé les comptes ou pas.

dans ta base de données, dans la table "utilisateurs", tu vas avoir les champs login, mot_de_passe (à crypter en md5 ou sha1, et comparer les mots de passes cryptés pour plus de sécurité), activation et email

lors de l'inscription, tu mettras "activation" à 0
si quelqu'un veut se loguer avec un compte dont l'activation est à 1, tu l'autorise, sinon, tu le refuses.

lors de l'inscription, après avoir inséré les données dans la base de données, tu envoies un mail (fonction mail, vas voir les exemples en ligne)

ce mail doit contenir un lien qui pointe sur une page "activation". Ce lien contiendras dans les paramètres le login de la personne (et meme un champs de sécurité si tu veux

exemple: http://www.monsite.com/activation?login=blabla&securite=6844fs4f
poru calculer la valeur de securite, tu peux par exemple faire
$securite = md5($login."ma securité")

dans le script activation, tu vas verifier que la clef de sécuité est cororecte
if($_GET['securite']==md5(md5($_GET['login]."ma securité")))
{
ta requete sql pour updater l'etat de activation dans la table utilisateurs pour les entrées dont le login correspond à celui qui est communiqué
}

et voila....

si tu ne comprends pas une partie, je veux bien détailler un peu plus, mais il faut que tu sois précis
je n'ai pas de code tout prêt à te donner

n'hésites pas à donner du code que tu as déja fait, ou de nous dire à quel état d'avancement tu en est dans le site
0
Merci j'ai bien lis et relis est j'ai donc un petit code . voila j'ai mis dans ma table un champ activation avec la valeur 0 par default . Ensuite j'ai mis dans ma page de traitement de l'inscirption ce code :
mt_srand((float) microtime()*1000000);

$securite = mt_rand(0, 100) ;
$email = $_POST["email"] ;

     $headers ='From: "mon site"<$email>'."\n"; 
     $headers .='Reply-To: '."\n"; 
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'; 

     $message ="<html><head><title>Un titre ici</title></head><body>

lien d'activation : http://monsite.com/activation.php?login=$pseudo&securite=$securite<br />
</body></html>";


     if(mail('$email', 'Activation compte', $message, $headers)) 
     { 
          echo 'Le message a été envoyé avec succès .Nous allons vous répondre le plus rapidement possible .<br>
		  Cliquer <a href="index.php">ici </a>pour revenir a index. Merci
'; 
     } 
     else 
     { 
          echo 'Le message n\'a pu être envoyer
		Cliquer <a href="index.php">ici pour revenir a index. Merci'; 

     } 


Ensuite je dois introduire le code générer dans la case code ( un autre champ de ma table). il faut après que je fasse la page avec un code qui récupère le pseudo , le code d'activation et compare le code avec celui enregistrer , si c'est le même sa update le champ activation a 1 . Et c bon . c'est ça ? merci de m'aider pour la page qui traite de récupérer les donnée et d'updaté . Pouvez vous me dire si mon code marche ?
merci beaucoup
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
26 sept. 2009 à 12:11
sans avoir essayé, oui je pense que ca marche (sinon ca n'en est pas loin).
le seule truc, c'est que pour la sécurité, tu le crée de manière aléatoire, entre 1 et 100... et tu n'enregistres pas le résultat dans la base de données!!! moi je créais ca a partir d'un cryptage md5 (donc pas aléatoire du tout, mais dépendant du login) et je n'avais donc pas besoin de l'enregistrer dans la base de données

lis les tutopriaux sur les base de données du siteduzero pour utiliser la base de donénes

pour la page d'activation, interesses toi à cette partie:

$securite = md5($login."ma securité")

//dans le script activation, tu vas verifier que la clef de sécuité est correcte
if($_GET['securite']==md5(md5($_GET['login]."ma securité")))
{
$requete="update utilisateurs set activation = 1 where login = $_GET[login]";
//et la t'executes la requete ..

.....
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci je suis en train de réaliser la page qui envoie l'email et j'ai un petit problème . Voila quand j'essaye sa me mets : Le mail na pu être envoyer . Donc le mauvais message . Si vous pouviez regarder le code et me dire ce qui ne va pas . merci Sinon tout a l'aire de marcher , j'introduis dans ma bdd le code de sécurité et je n'est pas encore fais la page de traitements d'activation . Quand j'introduis dans ma bdd les informations , c'est toutes les informations donc c'est pour ça que il y a beaucoup d'informations .

voila le code qui envoie le message :

// activation du compte
mt_srand((float) microtime()*1000000);

$securite = mt_rand(0, 100) ;
$email = $_POST["email"] ;

// envoie l'email

     $headers ='From: $email '; 
     $headers .='Reply-To: maxime4213@orange.fr'; 
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'; 

     $message ="<html><head><title>Activation de compte Max-fric.com</title></head><body>

lien activation : http://membres.lycos.fr/max13952/activation.php?login=$pseudo&securite=$securite<br />
</body></html>";


     if(mail('$email', 'Activation compte', $message, $headers)) 
     { 
          echo 'Le message a été envoyé avec succès .Nous allons vous répondre le plus rapidement possible .<br>
		  Cliquer <a href="index.php">ici </a>pour revenir a index. Merci'; 
     } 
     else 
     { 
          echo 'Le message n\'a pu être envoyer
		Cliquer <a href="index.php">ici pour revenir a index. Merci'; 

     } 


        //On balance le tout dans notre table
		
Mysql_query('INSERT INTO membre (id,pseudo,email,passe,prenom,naissance,pays,sexe,activation) 
VALUES ("","'.$pseudo.'", "'.$email.'", "'.$passe.'", "'.$prenom.'", "'.$naissance.'", "'.$pays.'", "'.$sexe.'","'.$securite.'") ')
 or die (mysql_error());

Au passage sa me mets aussi comme erreur : Column count doesn't match value count at row 1 si vous pouviez aussi m'aider a résoudre ce probleme .
merci beaucoup de votre aide qui m'aie d'une grande utilité car j'ai besoin de finir mon site très vite .
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
27 sept. 2009 à 14:21
essayes de regler ton serveur smtp avec la fonction set_ini("smtp","......")
en, completant l'adresse du smtp
0
Non ce n'est pas le probleme car quand je veux envoyer un message en l'indiquant directement sa marche
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
28 sept. 2009 à 09:56
tu ne trouves pas bizarre le ."\n" au bout de ta 3° ligne de headers ?
moi, ce que je trouve encore plus bizarre, c'est qu'il n'y ai pas son petit copain "\r" avec lui !
regardes l'exemple 4: https://www.php.net/manual/fr/function.mail.php

toutes les lignes de headers doivent se terminer par \r\n
0
bon j'ai corriger comme ça mes ça ne marche toujours pas :

<code>
<?php
$headers ='From: $email "\r\n" ';
$headers .='Reply-To: '."\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'. "\r\n";
$headers .='Content-Transfer-Encoding: 8bit';

$message ="<html><head><title>Un titre ici</title></head><body>

voter lien est http://**************/activation.php?email=$email&securite=$securite

</body></html>";



if(mail('$email', 'site', $message, $headers))
{
echo 'Le message a été envoyé avec succès ..<br>
Cliquer <a href="index.php">ici </a>pour revenir a index. Merci
';
}
else
{
echo 'Le message n\'a pu être envoyer
Cliquer <a href="index.php">ici pour revenir a index. Merci';
}
?>
0
Ca me marque : le message n'a pu etre envoyer
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
29 sept. 2009 à 09:11
avant de dire que ca fonctionne pas, regardes ce que tu as fait:

$headers ='From: $email "\r\n" ';
$headers .='Reply-To: '."\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'. "\r\n";
$headers .='Content-Transfer-Encoding: 8bit';

et regardes l'exemple:

$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Anniversaire <anniversaire@example.com>' . "\r\n";
$headers .= 'Cc: anniversaire_archive@example.com' . "\r\n";
$headers .= 'Bcc: anniversaire_verif@example.com' . "\r\n";


donc tu étudies ca, et tu reproposes un code...
0
bon j'ai refais mon code est ça donne ça :
     $headers ='From: $email'. "\r\n"; 
     $headers .='Reply-To: '."\r\n"; 
     $headers .='Content-Type: text/html; charset="iso-8859-1"'. "\r\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'. "\r\n";  

     $message ="<html><head><title>Un titre ici</title></head><body>

voter lien est http://membres.lycos.fr/max13952/activation.php?email=$email&securite=$securite 

</body></html>";



     if(mail('$email', 'site', $message, $headers)) 
     { 
          echo 'Le message a été envoyé avec succès ..<br>
		  Cliquer <a href="index.php">ici </a>pour revenir a index. Merci
'; 
     } 
     else 
     { 
          echo 'Le message n\'a pu être envoyer
		Cliquer <a href="index.php">ici pour revenir a index. Merci'; 
     } 


et ça marche pas .......
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
30 sept. 2009 à 09:14
message 6
0
Mail la fonction mail est activé !
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
30 sept. 2009 à 13:39
je te disais de vérifier que le smtp était bien précisé ...

1- es ce que tu travailles en local (avec easyphp, wamp ou autre), ou directement sur ton hébergeur ?
2- que retournes cette ligne de commande: echo ini_get('SMTP');
0
je trvaille sur un hebergeur gratuit , et ça ne renvoie rien
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
30 sept. 2009 à 16:12
et tu es sur que l'envoi d'emails depuis ton site est autorisé ?
chez free par exemple,c 'est autorisé, mais limité (1000 ou 2000 mails par semaine)

essayes peut etre en local, avec easyphp, et utilises la fonction ini_set pour parametrer le SMTP de ton FAI
0
nn je ne crois pas que ça soit le probleme . il n'y aurait pas un probleme de code ?
0
up
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 17:23
si echo ini_get('SMTP'); ne renvoie rien,c a veut dire que la fonction mail ne saura pas quel serveur utiliser. Ca ne marchera pas.

il faut forcement préciser un serveur smtp (soit c'est déja fait, soit c'est à toi de le faire)
0