IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Mail] Envoyer e-mail d'activation [Fait]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 151
    Points
    151
    Par défaut [Mail] Envoyer e-mail d'activation
    salut
    comment envoyer un Mail d'activation a un membre qui vient de s'inscrire et l'empechant d'acceder à son espace membre avant de cliquer sur ce lien ?
    merci et @+
    Ubuntu 8.04 LTS Hardy

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ce n'est que Théorie j'ai jamais testé...

    Dans ton mail tu mets ton lien avec une certaine chaine qui aura pour but d'aller sur ton site et de lancer une opération dans le header.php par exemple.

    Cette opération se connectera à la bdd et modifiera un champ de ta bdd du style compte activé (user_active) se qui permettra au client de se connecter.

    Bien sur il faut que ce champ soit faux avant le lancement de cette page...

    Tu vois un peu mon idée...

    Maintenant il faut trouver le $_GET que tu vas mettre dans l'url pour montrer au header que c'est une activation et le user_id du client.

    Tu approuves ou pas ?? lol

    ps: on me dira que c'est quasiment comme ca que les forums phpbb mais bon j'en ai un donc je base dessus lol

  3. #3
    Membre habitué Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 151
    Points
    151
    Par défaut
    merci
    voila j'envoie a chaque nouveau membre un lien vers une page activaton.php, le lient va emporter le Id_membre, et la page permetra de changer un champ de la table membre de 0 a 1, ouvrir une session puis le redireger vers l'index.
    et au moment de l'authentification je test a chaque fois si le membre a activer son compte ou non.
    c'est tous? y'a pas d'autres details?
    @+
    Ubuntu 8.04 LTS Hardy

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Si la session est déjà ouverte pas besoin de retester si le compte est activé je pense...

    Mais si pas de session et qu'il y a tentative de connection il faudrait effectivement tester le champ user_active...

    Sinon à part tout ce que j'ai dis (proposé) je vois pas ce qui pourrait manquer...Teste et tiens nous au courant et s'il manque quelque chose on completera

  5. #5
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Il faut un code d'activation en plus.

    Vous ajoutez un champ cod_activation de type CHAR(8) non nul dans votre base.
    Vous ajoutez un champ de type activation de type DATETIME pouvant être nul.
    Vous générez un mot aléatoire de 8 lettres.
    Vous insérez votre utilisateur dans la base en insérant le code activation mais pas la date d'activation qui reste nulle évidemment.

    INSERT INTO UTILISATEUR
    (ID_UTILISATEUR,MAIL_UTILISATEUR,MDP_UTILISATEUR,COD_ACTIVATION)
    VALUES (5,'toto@example.org','aaaaaaaaaaa','abcdefghi');

    Vous envoyez un mail contenant un lien avec le numéro de membre et le code d'activation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Bonjour toto,
     
    Cliquez sur ce lien pour activer votre compte :  http://www.example.org/activation.php?id=5&activation=abcdefghi
     
    Bye bye
    Su la page d'activation, vous vérifiez qu'à l'id_membre correspond bien
    au code activation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE  UTILISATEUR 
       SET ACTIVATION=CURRENT_DATETIME 
     WHERE ID_UTILISATEUR=5 
       AND COD_UTILISATEUR='abcdefghi' 
       AND ACTIVATION IS NULL
    Si la requête ne modifie aucune ligne, alors c'est que :
    • le code est erroné
    • l'utilisateur a été effacé
    • le compte est déjà activé
    Dans la page d'identification, vous ajoutez un test qui vérifie que la date d'activation n'est pas nulle.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ca aussi c'est bien

  7. #7
    Membre habitué Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 151
    Points
    151
    Par défaut
    merci Alexandre T egalement Kerod c'est super
    d'apres mes connaisses, on envoie un lien d'activation à un nouveau membre pour etre sur que son adresse e-mail est valide.
    mais avec cette methode je pense que c'est plus que ça ?est ce c'est pour des raison de securité ?

    Citation Envoyé par Alexandre T
    Si la requête ne modifie aucune ligne, alors c'est que :
    • le code est erroné
    • l'utilisateur a été effacé
    • le compte est déjà activé
    comment un code peut etre erroné?
    @+
    Ubuntu 8.04 LTS Hardy

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Quand on raisonne comme un internaute honnête, c'est impossible. L'utilisateur reçoit son mail, clique sur le lien et le code est trop logiquement bon.

    Maintenant je vais conter une petite histoire...

    Il était une fois toto, un internaute malhonnête, il veut venir vous insulter mais ne pas laisser son email... Il ne reçoit pas le mail d'activation. Il doi pourtant l'activer pour poster sa propagande, ses insultes, etc... Alors il se demande "Comment le webmaster a-t-il normmé la page et trouve que la page d'activation ?" . La page d'identification est identification.php ... La page de recherche est recherche.php... Il réfléchit et tente logiquement :

    http://www.example.org/activation.php

    Au pire il fait une recherche sur google de toutes les pages du site http://www.example.org !

    Bref, il trouve la page... Là le message d'erreur lui dit que son identifiant n'est pas renseigné....

    Il va sur la page de consultation de profil, d'un autre membre et il lit :
    http://www.example.org/visualisation.php?id=24

    Ok les identifiants sont sous le code id

    Son id est 32. Ok alors il tente :
    http://www.example.org/activation.php?id=32

    Il ne connait pas son id ? Aucun problème, il commencera à 1 et montera jusqu'à 300....

    Si il n'y a aucun test sur le code d'activation alors il activera tous les comptes du site... Pourtant il a filé une adresse mail erronée !

    Si il ya un code d'activation qui est testé et vérifié, il n'essaiera pas toutes les combinaisons... C'est trop long !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  9. #9
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    le code peut etre errone si par exemple, en le copiant dans l'URL par ctrl+C ctrl+V (recommender avec certains hebergeur), il lui manque une lettre, caractere.

    Ce systeme est plus sur egalement, je pense, pour les bot qui peuvent s'amuser a s'inscrire en remplissant les formulaires tout seul.

    De plus, ca te permet de virer tous les boulets qui ont pas validés leur compte au bout d'un mois

    Et si tu garde l'adresse email, tu peux faire le bon vieu test de un compte par adresse email aussi ^^
    n'oubliez pas la balise

  10. #10
    Membre habitué Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 151
    Points
    151
    Par défaut
    voila une très bonne information qui s'ajoute.
    une dernière question :
    -> comment generer un mot aléatoire de 8 lettre ??
    -> "select * from membre where login=$log and mdp=$passe and dat_activ<> NULL"
    c'est bonne pour l'authentification??
    et @+
    Ubuntu 8.04 LTS Hardy

  11. #11
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Avec un for avec un $i allant de 0 à 7 et à l'intérieur une concaténation de char(rand(0,25)+95)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for($i=0;$i<8;$i++)
    chaine .= char(rand(0,25)+95);
    Pour le rand il faut vérifier j'en suis plus trop sur pour le code caractère

    pour le select je serai plutot partant pour un (mais ce serait apres l'activation ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from membre where login='$log' and mdp='$passe' and dat_activ<> NULL

  12. #12
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Si vous voulez des codes d'activation "phonétiquement prononçable il y a cela aussi : http://pear.php.net/package/Text_Password
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  13. #13
    Membre habitué Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 151
    Points
    151
    Par défaut
    et pour la fonction mail() sa marche au local
    c'est à dire si je la test au local je reçois l'e-mail envoyé ou non??
    @+
    Ubuntu 8.04 LTS Hardy

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par riesseg
    De plus, ca te permet de virer tous les boulets qui ont pas validés leur compte au bout d'un mois
    Bonjour, je serai intéressé de savoir comment faire.

    Est ce qu'il faut lancer une tâche cron toutes les 48heures (dans mon cas) ?
    Est ce qu'il faut lancer un script en l'appelant dans l'URL ?

    Moi je ferais un script delestage.php, qui contient un script qui :

    - se connecte à la base de données,
    - sélectionne tous les membres dont le compte n'a pas été activé depuis 48heures
    - delete les membres concernés
    - tous les 2 jours je lance le script en tapant http://www.exemple.com/delestage.php

    Merci beaucoup

  15. #15
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par ayvong
    Bonjour, je serai intéressé de savoir comment faire.
    Est ce qu'il faut lancer une tâche cron toutes les 48heures (dans mon cas) ?
    Plusieurs solutions sont possibles

    1 - Faire un "cron", appelez la page delestage.php via lynx. Mais cette méthode consomme un peu plus de ressources que la méthode 2 (lancement de lynx, utilisation d'apache, php puis mysql). De plus n'importe quel imbécile, peut appeler la page delestage.php
    2 - Faire un "cron", lancer un script SQL via le client mysql
    3 - En utilisant MySQL5.2, utiliser le gestionnaire d'évènements (j'ai écrit un tutoriel à ce sujet : http://atranchant.developpez.com)
    4 - En faisant comme tu le fais
    5 - En installant sur ta machine un cron qui va interroger via un navigateur tel lynx ta page delestage.php

    Les points un et deux nécessitent un accès sur le serveur pour paramétrer cron. Typiquement, il faut un serveur dédié ou virtuellement dédié. Certains hébergeurs proposent des solutions palliatives. Mais tous les hébergeurs ne le permettent pas. Yellis le fait et tu n'es même pas obligé de prendre un serveur dédié. Il y a un robot php et un robot SQL que tu paramètres un peu comme tu veux.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mail] Envoyer un mail sans logiciel
    Par poitierjohan dans le forum Langage
    Réponses: 3
    Dernier message: 16/08/2006, 06h49
  2. [Mail] Envoyer un mail avec retour d'erreur
    Par phpaide dans le forum Langage
    Réponses: 1
    Dernier message: 19/04/2006, 15h49
  3. [Mail] Envoyer un mail
    Par Poutchou dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2006, 12h19
  4. [Mail] Envoyer des mails simplement avec PHP
    Par mailou dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2006, 17h21
  5. [Mail] envoyer un mail qui n'est pas anonyme
    Par mzt.insat dans le forum Langage
    Réponses: 21
    Dernier message: 10/12/2005, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo