Créer un espace membres en PHP


Certaines informations et fonctionnalités d'un site web sont accessibles à tous les internautes mais d'autres sont situées sur certaines pages accessibles seulement à certains internautes préalablement inscrits. Ces pages, uniquement accessibles après avoir saisi un identifiant et un mot de passe reconnus constituent un espace membres. Il indispensable pour un programmeur web de savoir intégrer un espace membre dans un site web comme le font la plupart des organismes (administrations, banques, associations, commerces...) qui proposent des accès à des comptes adhérents ou à des compte clients.

De nombreuses pages web traitent de la création d'un espace membre. Parmi elles on trouve, à la date du 21 janvier 2019, une ébauche claire et concise d'espace membre, basé sur l'utilisation des sessions, sur le site www.lephpfacile.com/howto

• Dans ce qui suit, on crée une version simplifiée d'espace membre présentant les caractéristique suivantes :

  • Séparation, à l'aide de fichiers php différents, des formulaires de saisie d'une part et des traitements effectués sur ces formulaires d'autre part;
  • Explication détaillées sur le contenu des fichiers et sur leur articulation;
  • Présentation des écrans affichés dans les différents cas de figure;
  • Code source complet, testé avec succès dans un espace d'hébergement de type formule MutuStart de Phpnet avec les réglages PHP et MySQL de l'hébergeur par défaut (cf fichier php.ini).

1) Présentation générale

L'espace membre détaillé ci-après fonctionne avec une base de données MySQL dotée d'une table membres comprenant deux champs de type text; (un champs login dont la valeur doit être unique et un champs mot de passe) L'espace membre comprend également les 8 fichiers php suivants qui fonctionnent de concert avec la base de données.

  • Le fichier index.php est le fichier principal du site web qui est doté de l'espace membre. Il contient un bouton d'accès à cet espace membre qui renvoit vers le fichier "accueil.php".
  • Le fichier connect.php contient les noms du serveur et de la base de données ainsi que l'identifiant et le mot de passe d'accès à cette base.
  • Le fichier accueil.php contient le formulaire de connexion à l'espace membre ainsi qu'un lien vers le formulaire d'inscription à cet espace.
  • Le fichier connexion.php traite les données saisies dans le formulaire de connexion. Si l'internaute est déjà inscrit, il le connecte à l'espace membre.
  • Le fichier espace-membre.php représente la page principale de l'espace membre; cette page est dotée d'un bouton de déconnexion.
  • Le fichier deconnexion.php assure la déconnexion de l'espace membre, de l'internaute.
  • Le fichier inscription.php contient le formulaire d'inscription à l'espace membre.
  • Le fichier vérification.php vérifie que les données d'inscription, saisies dans le formulaire d'inscription, conviennent. Si c'est le cas, il inscrit le nouveau membre dans la base, sinon il renvoit directement l'internaute vers la page d'accueil.

Le schéma suivant résume l'articulation de ces différents fichiers ainsi que les enchainements d'écrans correspondants.

00

2) Créer la base de données

On commence par créer une base de données avec PHPMyAdmin ( cf page "Créer et utiliser une base de données MySQL" accessible depuis la rubrique Création de sites web). Depuis phpMyAdmin on crée, à l'aide de la commande suivante dans la partie "requêtes SQL", une table membres comprenant trois champs (pk pour la clef primaire de la table, id pour le login et md5 pour le mot de passe)
CREATE TABLE membres (
pk int(10) NOT NULL auto_increment,
id text NOT NULL,
md5 text NOT NULL,
PRIMARY KEY (pk)
) ENGINE=MyISAM;
Il est à noter que le serveur MySQL incrémentera toujours de +1 la valeur de pk à chaque fois qu'un enregistrement nouveau est inséré (si on supprime ensuite un enregistrement précédent, la valeur du pk correspondant n'est pas récupérée...).

01

phpMyAdmin retourne un message indiquant que la table a bien été créée et qu'elle ne contient aucune ligne (ce qui est normal puisque aucun enregistrement n'a été inséré dans cette table pour le moment).

02

Pour vérifier la structure de la table, il suffit de cliquer le bouton "Structure" de la base de données puis de cocher la case correspondant à la table "membres" et de cliquer le bouton "Structure" de cette table.

03

3) Ecrire les fichiers PHP

Le contenu des fichiers mentionnés ci-dessus est le suivant.

3.1) Fichier "index.php"

Le fichier index.php constitue la page principale du site. C'est généralement dans cette page que se trouve le bouton d'accès à l'espace membres. Dans le cas présent, simplifié au maximm, la page principale du site est vide et le bouton d'accès à l'espace membres est remplacé par un simple lien html. Le schéma suivant montre le code source du fichier "index.php" ainsi que l'écran correspondant.

04

3.2) Fichier "connect.php"

Le fichier connect.php contient les noms du serveur et de la base de données MySQL ainsi que l'identifiant et le mot de passe d'accès à cette base. Il appartient au programmeur web de remplacer les valeurs suivantes, effacées en noir, par les valeurs fournies par l'hébergeur :
nom du serveur contenant la base de donnée pour SERVEUR
identifiant de l'administrateur de la base de données pour LOGIN
mot de passe administrateur pour MDP
nom de la base de données pour BDD

05

3.3) Fichier "accueil.php"

Le fichier accueil.php affiche le formulaire de connexion à l'espace membre et fournit un lien vers le formulaire d'inscription à cet espace destiné aux internautes qui ne sont pas déjà inscrits.

06

3.4) Fichier "connexion.php"

Le fichier connexion.php traite les données saisies dans le formulaire de connexion présent dans le fichier "accueil.php" une fois que l'internaute a cliqué le bouton "Connexion". Si l'internaute est connu (déjà inscrit), le fichier "connexion.php" le connecte directement à l'espace membre (page "espace-membre.php")sinon il affiche un message d'erreur ainsi qu'un lien permettant à l'internaute de revenir à la page "accueil.php".

07

La fonction PHP isset() détermine si une variable est définie et si elle est différente de la valeur NULL.

La requête MySQL SELECT COUNT(*) FROM membres WHERE condition permet de connaitre le nombre d'enregistrement de la table qui satisfont à la condition.

La fonction mysql_escape_string permet de transformer une chaine de caractère quelconque contenant des caractères ' (apostrophes) en une chaine dans laquelle ces caractères sont "échappés", c'est à dire transformés en en une chaine de caractère \'. Par exemple mysql_escape_string ("c'est une chaine échappée") va donner "c\'est une chaine échapée"

La fonction md5() est une fonction qui transforme une chaine de caractères quelconque en une chaine de 32 caractères appelée empreinte qui ne permet pas de retrouver la chaine originale. Ainsi si un pirate parvient à prendre connaissance des données d'une table, il connait alors seulement les empreintes des mots de passe mais pas les mots de passe eux mêmes. La sécurité de ce procédé découle du fait qu'il n'existe pas d'algorithme permettant de retrouver le mot de passe à partir de l'empreinte.
Par exemple md5("jean") donne "b71985397688d6f1820685dde534981b" mais il n'existe pas de fonction permettant de retrouver "jean" à partir de "b71985397688d6f1820685dde534981b".

La fonction PHP die() affiche un message and quitte le script en cours.

La fonction mysql_fetch_array() retourne un tableau qui conitent le résultat obtenu suite à une requête mySQL.

La fonction mysql_free_result() libère la mémoire et les ressources utilisées suite à une requête MySQL.

La fonction mysql_close() ferme la connexion au serveur MySQL associée à l'identifiant en cours. L'omission de cette fonction ne devrait pas être dommageable dans la mesure où la connexion au serveur MySQL est automatiquement coupée à la fin du programme.

Une session PHP est un moyen de stocker des valeurs de variables utilisateur dans la variable PHP globale $_SESSION en vue de vérifier leur présence ou de les utiliser dans différentes pages. Un appel de la fonction session_start() permet de démarrer une session PHP. Une fois une session PHP démarrée, on peut ranger dans la variable globale PHP $_SESSION toutes les valeurs de variables que l'on souhaite associer à cette session. Ces valeurs peuvent être ensuite récupérées dans toutes autres pages du site dans lesquelles on aura écrit l'instruction session_start() en début de page.
Ainsi, la ligne 21 démarre une nouvelle session. Cette session sera récupérée dans la page "espace-membres.php".
La ligne 22 contient l'instruction $_SESSION['login'] = $_POST['login']; qui permet de ranger le login de utilisateur dans la variable $_SESSION['login']. L'exiistence de ce login sera vérifiée dans la page "espace-membres.php" une fois la session récupérée.
Ce mécanisme empêche un internaute de pouvoir se connecter directement à la page "espace-membre.php", sans passer par le formulaire de connexion, en saisissant directement l'url de la page dans la barre d'adresse de son navigateur.

3.5) Fichier "espace-membre.php"

Le fichier espace-membre.php représente la page principale de l'espace membre. Cette page est dotée d'un bouton de déconnexion. Ce bouton, s'il est cliqué, renvoit automatiquement l'internaute à la page "index.php" du site

08

On démarre une session PHP en début de page et on vérifie que la variable $_session['login'] a bien été précédemment renseignée. Si c'est le cas, l'internaute accède au contenu de la page sinon il est automatiquement renvoyé vers la page "index.php".
Le schéma suivant montre la page qui est automatiquement affichée (la page "index.php") si on saisit directement l'adresse "espace-membre.php" dans la barre d'adresse du navigateur (à condition bien entendu qu'une session ne soit pas déjà en cours sinon il faut déconnecter préalablement).

08a

La fonction PHP htmlentities() retourne une chaine de caractère dans laquelle les caractères spéciaux présents dans la chaine d'origine ont été convertis en leur caractère équivalent codé en HTML. Ceci permet d'éviter d'éventuelles erreurs d'interprétation du navigateur au moment de l'affichage.

La fonction PHP trim() retourne une chaine de caractère sans les espaces qui étaient éventuellement présents au début et/ou à la fin de la chaine initiale.

3.6) Fichier "deconnexion.php"

Le fichier deconnexion.php, appelé depuis la page "espace-membre-php", assure la déconnexion de l'internaute de l'espace membre et son renvoi à la page "index.php" du site. cette déconnexion est importante car elle met fin à la session en cours. Cela permet d'éviter qu'un utilisateur mal intentionné, puisse, pendant l'absence de la personne identifiée, accéder directement à l'espace-membre de cette personne en utilisant son poste de travail et en saisissant directement l'url de la page "espace-membre.php" dans la barre d'adresse de son navigateur (sans passer par le formulaire de connexion).

08b

3.7) Fichier "inscription.php"

Le fichier inscription.php contient le formulaire d'inscription à l'espace membre. Quand on clique le bouton "vérification", le fichier "verification.php" est appelé.

09

3.8) Fichier "verification.php"

Le fichier vérification.php vérifie que les données d'inscription, saisies dans le formulaire du fichier inscription.php, conviennent. Si c'est le cas, il inscrit le nouveau membre dans la base, sinon il renvoit directement l'internaute vers la page d'accueil.

10

La fonction PHP empty() regarde si une variable est vide.

La requête MySQL INSERT INTO membres VALUES (...) permet d'insérer un nouvel enregistrement dans la table membres.

La fonction mysql_error() retourne le texte associé à l'erreur rencontrée lors de la dernière requête MySQL.

4) Utiliser l'espace membre

4.1) Inscrire un nouveau membre

4.1.1) Inscription échouée - 2 mots de passes différents

Si on inscrit l'utilisateur martin par exemple avec le mot de passe rene mais qu'on fait une erreur de saisie en renee sur le second mot de passe. Un message d'erreur s'affiche dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

11a

4.1.2) Inscription réussie

Au départ, la table membres est vide. On insère ici deux nouveaux membres : dupont (avec le mot de passe jean) et durant (avec le mot de passe jacques) en utilisant le formulaire d'inscription. En se connectant à la base de données avec phpMyAdmin, on peut vérifier que les deux enregistrements ont bien été insérés, avec les mots de passe hachés md5 comme souhaité.

11

4.1.3) Inscription échouée - Un champs est vide

Si on laisse un champs vide lors de l'inscription d'un nouveau membre, un message d'erreur s'affiche dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

11b

4.1.4) Inscription échouée - login déjà utilisé

Si un membre existant dans la base de données possède un login identique à celui saisi, un message d'erreur s'affiche dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

11b

4.2) Supprimer un membre existant

On peut facilement upprimer un enregistrement existants depuis l'interface phpMyAdmin. par exemple pour supprimer l'enregistrement durant, on coche la case correspondante et on clique le bouton "Supprimer" puis on clique OK pour confirmer

12

On vérifie, avec phpMyAdmin, que l'enregistrement durant a bien été supprimé; Puis on inscrit un nouveau membre dubois (avec le mot de passe marc). On vérifie que cet enregistrement a bien été ajouté et on peut constater que le pk correspondant a été automatiquement incrémenté à 3 car le dernier enregistrement supprimé avait un pk égal à 2 qui est désormais abandonné. Donc le serveur MySQL incrémente toujours de +1 la valeur de pk à chaque fois qu'un enregistrement nouveau est inséré et si on supprime un enregistrement, la valeur du pk correspondant n'est pas récupérée...).

13

4.3) Connecter un membre existant

4.3.1) Connexion réussie

La saisie du login dupont suivie du mot de passe jean dans la page "accueil.php" conduit à la connexion à la page principale espace-membre.php de l'espace membre

14

4.3.2) Connexion échouée - champs vide

Si, lors de la saisie, le champs login ou le champs mot de passe sont laissés vides, un message d'erreur indiquant qu'au moins un des champs est vide est affiché dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

14b

4.3.3) Connexion échouée - login ou mot de passe non reconnu

Si, lors de la saisie, le champs login ou le champs mot de passe sont erronés, un message indiquant que le login ou le mot de passe ne sont pas reconnus est affiché dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

14c

4.3.4) Connexion échouée - enregistrements multiples

Pour provoquer cette erreur, on commence par se connecter à la base de données avec phpMyAdmin et on duplique l'enregistrement dupont par exemple.
Pour cela, on sélectionne la table membres puis on clique Parcourir. On sélectionne ensuite l'enregistrement dupont puis on clique Copier puis Executer. On peut alors vérifier que deux enregistrements identiques dupont avec le même mot de passe existent dans la base avec des valeurs de pk respectivement égales à 1 et à 4.

17

On se trouve alors dans le cas ou un ou plusieurs membres existants dans la base de données possèdent un login et un mot de passe identiques. La saisie de ce login et ce mot de passe dans la page "accueil.php" conduit à un message d'erreur dans la page "connexion.php" et l'internaute peut revenir à la page d'accueil en cliquant le lien "Accueil".

18

Pour supprimer cet enregistrement en double, on se connecte à phpMyAdmin. On sélectionné l'enregistrement dupont doté du pk=4 (par exemple) et on clique "Supprimer" puis "OK". On peut vérifier que cet enregistrement est bien supprimé.

19

Il est à noter que si on inscrit ensuite un nouveau membre (login durant et mot de passe jacques par exemple), celui ci est inséré dans la table membres avec un pk égal à 5 (ce qui est normal puisque le pk égal à 4 n'est plus utilisé).

20

Code source

Le code source des 8 fichiers index.php , connect.php, accueil.php, connexion.php, espace-membre.php, deconnexion.php, inscription.php et vérification.php est contenu dans l'archive suivante créée avec Xarchiver : espace-membre.tar.bz2