Activation du compte

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
Configuration: Windows Vista
Firefox 3.5.3

28 réponses

Résumé de la discussion

La problématique porte sur la mise en place d'un système d'activation de compte par inscription avec envoi d'un mail contenant un lien d'activation. Pour la sécurité, il est conseillé de générer une clé d'activation et de la vérifier sans la stocker, par exemple via md5(login + 'ma securité'). Dans le script d'activation, on compare la clé reçue avec celle calculée et, si elle est correcte, on met à jour l'activation à 1. En outre, des tests locaux et une gestion robuste des en-têtes et de la sécurité côté serveur évitent les limitations d'envoi et les risques d'exposition.

Bobot (l’IA à votre service)
  1. Je ne peux pas essayer justement je n'est pas encore configurer le serveur . Mais je vais reformuler le code alors . Ce ne sont que des choiffre la securite
    1. Contributeur
      if(isset($_COOKIE["ID_UTILISATEUR"]))
      {
      header("Location: index.php");
      }

      ==>>> perso, j'utiliserai les sessions à ta place, c'est plus passse partout. Car si ton navigateur n'accèpte pas les cookies, les sessions se feront dans l'url

      f(!ereg("^[0-9]+$", $_GET["id"]) || !ereg("^[a-f0-9]{8}$", strtolower($_GET["securite"])))
      ==> comprend aps les expressiosn régulières moi ;) dsl

      et quadn tu dis "ca marche pas".... est ce que tu sais ou ca passe ???? dans quel coin ca plante? le message affiché ?
      1. Bon en attendant j'ai fais la page d'activation , elle n'a pas l'air de marcher si vous pouviez regarder

        <?php
        include('include.php');
        ?>
        <?
        
        // Redirige l'utilisateur s'il est déjà identifié
        if(isset($_COOKIE["ID_UTILISATEUR"]))
        {
             header("Location: index.php");
        }
        else
        {
             
             // Vérifie que de bonnes valeurs sont passées en paramètres
             if(!ereg("^[0-9]+$", $_GET["id"]) || !ereg("^[a-f0-9]{8}$", strtolower($_GET["securite"])))
             {
                  header("Location: index.php");
             }
             else
             {
                  
                  // Connexion à la base de données
                  // Valeurs à modifier selon vos paramètres configuration
                  mysql_connect("localhost", "max13952","lola130895");
                  mysql_select_db("max13952_db");
                  
                  // Sélection de l'utilisateur concerné
                  $result = mysql_query("
                       SELECT activation , securite , email
                       FROM membre
                       WHERE email = '" . $_GET["email"] . "'
                       AND securite = '" . strtolower($_GET["securite"]) . "'
                  ");
                  
                  // Si une erreur survient
                  if(!$result)
                  {
                       $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
                  }
                  else
                  {
                       
                       // Si aucun enregistrement n'est trouvé
                       if(mysql_num_rows($result) == 0)
                       {
                            header("Location: index.php");
                       }
                       else
                       {
                            
                            // Récupération du tableau de données retourné
                            $row = mysql_fetch_array($result);
                            
                            // Vérification que le compte ne soit pas déjà activé
                            if($row["activation"] != 0)
                            {
                                 $message = "Votre compte utilisateur a déjà été activé";
                            }
                            else
                            {
                                 
                                 // Activation du compte utilisateur
                                 $result = mysql_query("
                                      UPDATE 
                                      SET activation = '1'
                                      WHERE email = '" . $_GET["id"] . "'
                                      AND securite = '" . strtolower($_GET["clef"]) . "'
                                 ");
                                 
                                 // Si une erreur survient
                                 if(!$result)
                                 {
                                      $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
                                 }
                                 else
                                 {
                                      $message = "Votre compte utilisateur a correctement été activé";
                                 }
                                 
                            }
                            
                       }
                       
                  }
                  
                  // Fermeture de la connexion à la base de données
                  mysql_close();
                  
             }
             
        }
        
        ?>
        <p><?php
         echo $message; 
        ?></p>
        

        merci .
        1. Contributeur
          rien ne t'empèche de t'assurer que la fonction fonctionne bien en testant en local avec easyphp ou wamp
          1. a ok merci donc j'attendrais pour finir ça d'avoir mon hebergeur definitif car la c'est un hebergeur grauit ^^ .
            merci
            1. oui mais la ça depend de l'adresse de la peronne qui s'inscrit don je ne peux pas savoir
              1. Contributeur
                non, c'est faux. Je sais as ou tu as cru lire ca ...

                l'adresse SMTP est soit celle de TON FAI si tu héberge le site chez toi
                soit celle de ton hébergeur si ton site est hébergé par un pro
            2. Contributeur
              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)
              1. nn je ne crois pas que ça soit le probleme . il n'y aurait pas un probleme de code ?
                1. Contributeur
                  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
                  1. Contributeur
                    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');
                    1. 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 .......
                      1. Contributeur
                        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...
                        1. 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';
                          }
                          ?>
                          • 1
                          • 2