Votre question

Créer un espace membre, voici de l'aide !

Tags :
  • Adresse IP
  • Programmation
Dernière réponse : dans Programmation
1 Août 2007 01:13:41

ESPACE MEMBRE


Nous allons voir comment créer un espace membre. Il y a plusieurs raisons de créer un espace membre, la première peut être la sécurité. Il peut être intéressant de laisser tout le monde lire des messages sur notre forum, mais seulement ceux qui sont membres d'y écrire. Nous avons ainsi de moyen de savoir qui a écrit le message, son adresse IP...

Nous allons voir:

* Inscription
* Authentification
* Oublie de mot de passe
* Déconnection

L'Inscription

L'inscription d'un membre est l'occasion d'obtenir diverses informations sur l'usager. Voici une structure de table possible qu'il faut installer via phpmyadmin par exemple :
  1. DROP TABLE IF EXISTS `membre`;
  2. CREATE TABLE `membre` (
  3. `MEM_NOMEMBRE` int(11) NOT NULL auto_increment,
  4. `MEM_NOM` varchar(30) NOT NULL default '',
  5. `MEM_PRENOM` varchar(30) NOT NULL default '',
  6. `MEM_NOMUSAGER` varchar(30) NOT NULL default '',
  7. `MEM_MOTPASSE` varchar(30) NOT NULL default '',
  8. `MEM_COURRIEL` varchar(30) NOT NULL default '',
  9. `MEM_TYPE` int(11) NOT NULL default '0',
  10. `MEM_SITEWEB` varchar(100) default NULL,
  11. `MEM_SIGNATURE` varchar(50) default NULL,
  12. `MEM_NBMESSAGE` int(11) default '0',
  13. `MEM_ENREGISTRE` int(11) default '0',
  14. PRIMARY KEY (`MEM_NOMEMBRE`)
  15. ) TYPE=MyISAM AUTO_INCREMENT=9 ;

Au niveau du code, il suffit de créer un formulaire. Afin de limiter les inscriptions automatiques par des scripts malicieux ou robots, il est possible d'ajouter une série de lettres dans une image. L'usager devra taper ces lettres.

Protection

Tel que dit précédemment, il est important d'ajouter une protection afin d'éviter des inscriptions multiples. Afin de mettre en oeuvre cette protection, nous allons générer une suite de lettre de façon aléatoire et ensuite créer une image avec ces lettres. Il est ainsi beaucoup plus complexe d'obtenir la valeur des lettres.
  1. function gen_reg_key() {
  2.  
  3. //on initialise la variable $key à "vide"
  4.  
  5. $key = "";
  6.  
  7. //on définit la taille de la chaine (6 caractères ca suffit ;))
  8.  
  9. $max_length_reg_key = 6;
  10.  
  11. //on définit le type de caractères ascii de la chaine (l'alphabet suffit amplement, mais libre a vous)
  12.  
  13. $chars = array(
  14.  
  15. "a","b","c","d","e","f","g","h","i","j","k","l","m",
  16.  
  17. "n","o","p","q","r","s","t","u","v","w","x","y","z");
  18.  
  19. //on comptabilise le nombre total de caractères possibles (26 pour l'alphabet)
  20.  
  21. $count = count($chars) - 1;
  22.  
  23. //on initialise la fonction rand pour le tirage aléatoire
  24.  
  25. srand((double)microtime()*1000000);
  26.  
  27. //on tire aléatoirement les $max_length_reg_key caracteres de la chaine
  28.  
  29. for($i = 0; $i < $max_length_reg_key; $i++) $key .= $chars[rand(0, $count)];
  30.  
  31. //on renvois la clé générée
  32.  
  33. return($key);
  34.  
  35. }

Maintenant que la chaîne est générée, nous allons créer une image cette chaîne. Noter que la source ci-dessus provient d'une source inconnue.
  1. //En-tête définissant le format png header
  2.  
  3. header ("Content-type: image/png");
  4.  
  5. //Crée une nouvelle image à palette d'une taille de 100 pixels de largeur par 50 pixels de hauteur
  6.  
  7. $im = @ImageCreate (100, 50) or die ("Erreur lors de la création de l'image");
  8.  
  9. //Alloue une couleur pour le fond de l'image
  10.  
  11. $bgcolor = ImageColorAllocate ($im, 0xC0, 0xC0, 0xC0); //Ca correspond à #C0C0C0
  12.  
  13. //Alloue une couleur pour le texte de l'image
  14.  
  15. $font = ImageColorAllocate ($im, 0x00, 0x00, 0x00);
  16.  
  17. ImageString ($im, 5, 20, 15,base64_decode($_GET['code']),$font);
  18.  
  19. //Envoie l'image PNG vers le navigateur
  20.  
  21. ImagePng ($im);
  22.  
  23. //Désalloue la mémoire de l'image
  24. ImageDestroy($im);

La chaîne générée est passée à ce script d'où le $_Get. La protection ainsi que les données entrées par l'usager doivent être validées afin d'insérer des données uniquement valides dans la base de données. Au niveau des validations, vous pouvez vérifier si le courriel est valide, si le nom de l'utilisateur est déjà présent.

Envoie du courriel

Il est très aisé d'envoyer un courrier en PHP. Le code ci-dessous est employé pour activer le mot compte de l'usager lors de son inscription. Il faut s'assurer d'avoir la fonction PHP mail().

  1. function envoiecourrielvalidation($nom, $nomusager, $to, $motpasse, $nomembre)
  2. {
  3. /* sujet */
  4. $subject = "Inscription: VOTRE SUJET";
  5.  
  6. /* message */
  7. $message = "Bonjour, ".$nom." ! \n\nMerci de vous être enregistré. Vous êtes priés de conserver cet e-mail dans vos archives. \nVoici les informations concernant votre compte : \n \nNom d'utilisation : ".$nomusager." \nMot de passe: ".$motpasse." \n \nPour activer votre compte, veuillez cliquer sur ce lien : <a href="http://www.VOTREURL.com/activation.php?mem_nomembre=" rel="nofollow" target="_blank">http://www.VOTREURL.com/activation.php?mem_nomembre=</a>$nomembre \n\nL'équipe de VOTRE TEXTE";
  8.  
  9. $headers = "From: VOTRE SUJET <VOTREEMAIL@VOTREEMAIL.com>\r\n";
  10. /* and now mail it */
  11. mail($to, $subject, $message, $headers);

Ce qui donnera :
  1. Bonjour, Jean dupont !
  2. Merci de vous être enregistré.
  3. Vous êtes priés de conserver ce courriel dans vos archives.
  4.  
  5. Voici les informations concernant votre compte :
  6. Nom d'utilisation : xxxx
  7. Mot de passe: yyyy
  8.  
  9. Pour activer votre compte, veuillez cliquer sur ce lien : <a href="http://www.VOTREURL.com/activation.php?mem_nomembre=1" rel="nofollow" target="_blank">http://www.VOTREURL.com/activation.php?mem_nomembre=1</a>
  10.  
  11. L'équipe de VOTRE TEXTE";

Validation du courriel

Une manière de limiter les abus est de valider le compte de l'usager en lui envoyant un courriel. Cette façon permet de savoir si le courriel inscrit par l'usager est valide et assure de pouvoir retracer l'usager si nécessaire. La validation du courriel se fait si toutes les données entrées par l'usager sont valides. Utiliser la fonction mail de PHP pour envoyer un courriel. Utiliser un gabarit tel que:
  1. Bonjour, JEAN Dupont !
  2. Merci de vous être enregistré.
  3. Vous êtes priés de conserver ce courriel dans vos archives.
  4.  
  5. Voici les informations concernant votre compte :
  6. Nom d'utilisation : xxxx
  7. Mot de passe: yyyy
  8.  
  9. Pour activer votre compte, veuillez cliquer sur ce lien : <a href="http://www.VOTREURL.com/activation.php?mem_nomembre=1" rel="nofollow" target="_blank">http://www.VOTREURL.com/activation.php?mem_nomembre=1</a>
  10.  
  11. L'équipe de VOTRE TEXTE";

Dans le script activation, on vérifie si l'usager à déjà activer son compte. Le champ MEM_ENREGISTRE sert à savoir si l'usager a déjà activé son compte. Si la valeur est 0, son compte n’est pas actif.
  1. connectionbd();
  2. entete("Activation","");
  3.  
  4. $mem_nomembre = $_GET['mem_nomembre'];
  5.  
  6.  
  7. $requete = mysql_query("SELECT mem_nomembre, mem_motpasse, mem_type, mem_enregistre from membre where mem_nomembre=$mem_nomembre ");
  8.  
  9. $ligne = mysql_fetch_assoc($requete);
  10.  
  11. //verifier dans la bd si le compte est déjà actif... si oui on affiche un message
  12. if($ligne["mem_enregistre"] == 1){
  13.  
  14. echo '<div>Activation</div>';
  15. echo'<div>';
  16.  
  17. echo"Votre compte a déjà été activé. Merci";
  18.  
  19. echo'</div>';
  20.  
  21. }
  22. else{
  23.  
  24. $_SESSION['username'] = $username;
  25. $_SESSION['password'] = $password;
  26. $_SESSION['mem_nomembre'] = $mem_nomembre;
  27.  
  28. mysql_query("update membre set mem_enregistre = 1 where mem_nomembre= $mem_nomembre ");
  29.  
  30. echo '<div >Activation</div>';
  31. echo'<br/><div>';
  32. echo"Vous venez d'activer votre compte, vous pouvez maintenant envoyez des messages et participer au site. Merci";
  33.  
  34. echo'</div>';
  35.  
  36. }
  37. closebd();
  38. piedpage();
  39. }

Si le compte de l'usager n'est pas encore actif, il le devient et on enregistre des variables de session afin que l'usager puise avoir accès aux fonctions réservées au membre.

Authentification

Cette partie consiste à vérifier le nom d'utilisateur ainsi que le mot de passe entrée par l'usager, si les informations sont valides, l'usager à accès au site et on enregistre dans des variables de session quelques informations (tel que vue précédemment). Le code nécessaire pour vérifier les données est identique à celui montré précédemment. Si les données sont valides, nous pouvons rediriger l'usager par exemple dans une section spéciale du site.

Oublie de mot de passe

Il est possible, qu'un usager oublie son mot de passe pour de multiples raisons. Un script qui génèrera un mot de passe aléatoire permettra de nouveau à l'usager de se connecter au site. Le script pour générer un mot aléatoire qui a été utilisé lors d'un l'inscription de l'usager peut être réutilisé de nouveau pour l'oublie d'un mot de passe. Le nouveau mot de passe est envoyé par courriel à l'usager. Un gabarit qui pourrait ressembler à celui montré dans la section Validation du courriel peut être utilisé.

Déconnection

Cette fonctionnalité supprime les variables de session créée lors de la connexion de l'usager et redirige l'usager sur la page principale du site.
  1. session_start();
  2. if(session_is_registered("username")){
  3. session_destroy();
  4. $url="/index";
  5. header("location: $url");

Fonctionnalité

Une fois que l'utilisateur est connecté, tous vous est permis. Prenons exemple sur ce site, une fois connecté, vous pouvez participer au site, modifiez votre profil...

Nous avons vu quelques fonctionnalités de base pour gérer un espace membre sur un site. D'autres fonctionnalités peuvent être ajoutées, un chat en ligne, amélioration de la sécurité... afin d'avoir un espace membre encore plus riche.


Ce tuto que j'ai modifié est de Marc Collin

Voilà j'espère que cela en aidera quelqu'uns !
Maintenant c'est à vous de jouer !

Autres pages sur : creer espace membre aide

1 Août 2007 11:57:31

C'est plutot pas mal encore mieu si tu l'avais fait entierement toi même ;) , le truc que tu devrais rajouter c'est un schéma, montrant comment l'information est traiter avec des flèches pour bien montrer ce qu'elle devient.

J'ai lu vite fait, mais tu pourrais aussi rajouté un petit chapitre sur : Niveau d'acces.
Car le membre peut s'inscrire, mais cela lui fait pas un espace membre !
Il faut que selon le membre, les données de la page lui soit personnel. Par exemple, la creation d'un tableau du type :

membre[0] = id;
membre[1] = pseudo;
membre[2] = ip;
membre[3] = niveau d'acces;

Ainsi, il suffira d'appeller ce tableau dans les pages pour un peu plus de dynamisme, et une simple condition permettrait de laisser libre acces à la page ou non ;) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS