Apprendre PHP (Hors-série) - Inscription et authentification via un fichier texte

In this French‑language tutorial, the presenter walks through building a simple user registration and login system in PHP that stores user data in a plain‑text file. He creates four PHP scripts: index.php (registration form), login.php (authentication form), session.php (protected page), and a logout script. The video demonstrates step‑by‑step form validation using regular expressions for name and first name, basic checks for empty login and password fields, and password confirmation. When validation passes, the script opens the data file in "a+" mode, appends a line containing the name, first name, login and an MD5‑hashed password, ensuring a newline separator. For authentication, the login script reads the file line‑by‑line in read‑only mode, splits each line on the colon delimiter with explode, trims the trailing newline, and compares the supplied login and MD5‑hashed password against the stored values. Upon a successful match, a session is started, user details are stored in session variables, and the user is redirected to session.php, which checks the session before displaying the protected content. A logout script destroys the session. The tutorial also notes practical considerations such as handling Windows line endings, the limitation of not checking login uniqueness, and the insecure nature of MD5 hashing, but keeps the implementation simple for educational purposes.
Chapters
Bonjour à tous et bienvenue dans cette nouvelle vidéo. Aujourd'hui, nous allons voir un exercice sur l'authentification via un fichier texte. L'objectif en fait, c'est de permettre aux utilisateurs de s'inscrire sur notre site web. Leurs informations personnelles comme le nom, le prénom, le login et le mot de passe seront stockées dans un fichier texte. On aura donc besoin de créer les fichiers suivants: index.php qui permet l'inscription de l'utilisateur et qui contient le formulaire d'inscription. Login.php qui contient le formulaire d'authentification, la page session.php qui est la page confidentielle dont l'accès n'est autorisé qu'aux personnes qui se sont correctement authentifiées, la page déconnexion qui permet de détruire la session, et le fichier texte qui contient les informations personnelles des utilisateurs. La première opération à faire, c'est la programmation de l'inscription. On va donc se rendre dans la page index.php qui est la page d'inscription dont le rendu ressemble à ceci sur le navigateur. On a bien un formulaire qui contient le nom, le prénom, le login et le mot de passe qu'il faut saisir à 2 reprises afin de le confirmer. Au début, j'ai placé un script qui permet de récupérer les différents posts. On a déjà vu ce script avant. Maintenant, on va vérifier si l'utilisateur a posté le formulaire afin de faire le traitement nécessaire. Nous allons vérifier si le nom est valide et pour ce faire, on va se servir des expressions régulières de la manière suivante. On va dire que le nom contient que des caractères alphabétiques minuscules, majuscules et quelques symboles comme le tiret ou l'espace. On va donc faire ceci: l'espace et le tiret. Mais notez que le tiret est un caractère spécial au sein des crochets, il faut donc l'antislasher. On va placer les délimiteurs de l'expression et on va dire que ça commence par et ça finit par. On mettra un+ pour dire qu'il faut mettre au moins un caractère. Et si vous voulez prendre en considération les caractères en accent, alors on va les ajouter comme ceci, etc. Bien sûr, il faut prendre en considération tous les caractères accentués éventuels. Alors on va dire que ça c'est l'expression qui correspond à un nom valide. On va donc vérifier si le nom correspond à cette expression, alors c'est bon. Sinon alors on va afficher une erreur. On mettra donc ici not pour dire que si l'expression n'est pas valide, on mettra erreur, égal nom invalide. Comme ceci. On exécute déjà pour voir le résultat. Si je mets rien et que je clique sur m'inscrire, donc ça m'affiche nom invalide, mais il y a une petite erreur ici. Visiblement, il y a une erreur sur l'expression. On va vérifier. Ah oui, donc je devrais mettre un z minuscule, voilà, parce que l'intervalle n'est pas correct. Donc de a à z minuscule et de A à Z majuscule, etc. Maintenant, on réexécute. Alors ça m'affiche nom invalide. Bon, si je mets par exemple des chiffres, Bon, encore nom invalide, mais quand je mets des caractères alphabétiques ou n'importe lesquels, dans ce cas j'ai plus d'erreurs. Je peux aussi inclure les caractères en accent, ceux que j'ai déclarés bien sûr. Donc ça marche toujours. Maintenant on va faire le même traitement pour le prénom, et pour faire simple on va afficher une erreur à la fois. Ça veut dire on va vérifier si le nom est invalide, alors on va afficher le message et on va ignorer les autres champs. Sinon, ça veut dire si le nom est valide, on va vérifier si le prénom est valide, etc. Ça veut dire on va progresser étape par étape. On va donc mettre ici un else if. Et je vais copier ce code. Maintenant je vais juste mettre ici prénom. Voilà, comme ceci. Et là le message c'est prénom invalide. Bon, l'expression est la même parce que dedans et le prénom contiennent pratiquement les mêmes caractères. On refait le test. Alors prénom invalide. Bon, si je mets n'importe quoi maintenant c'est bon. En ce qui concerne le login, normalement il faut vérifier l'unicité. Ça veut dire si le login n'existe pas déjà. Mais pour ne pas trop surcharger le code, on ignorer cette étape, c'est-à-dire qu'il est possible que 2 logins qui se ressemblent figurent dans le même fichier. Bon, même si ce n'est pas pratique, mais n'oubliez pas que le principe c'est de comprendre comment ça se fait via les fichiers. Bon, ça veut dire on va pas s'intéresser à tous les détails. Alors pour le login, on va juste se contenter de vérifier s'il n'est pas laissé vide. On mettra donc ici else if petit login et le message C'est login invalide. Bon, maintenant quand je clique login invalide et quand je mets n'importe quoi, dans ce cas le message disparaît. En ce qui concerne le mot de passe, on va dire que l'utilisateur peut saisir n'importe quel mot de passe à condition qu'il soit pas laissé vide. Bien entendu, pour plus de sécurité, on peut étoffer notre expression et on va dire que le login doit contenir des minuscules, des majuscules, etc. Mais bon, pour ne pas trop compliquer la tâche, on va se contenter de dire que le login ne doit pas être laissé vide. On mettra donc le même traitement qu'ici. Voilà, mot de passe laissé vide. Et pour la confirmation, il faut qu'il corresponde au mot de passe qui est écrit initialement. On mettra donc là Donc si le mot de passe est différent de la confirmation de celui-ci, on mettra mot de passe non identique par exemple. Voilà, comme ça. Donc maintenant on fait le test. Alors mot de passe laissé vide. Bon, si je mets par exemple aaa en minuscule, Donc non identique. Voilà, maintenant c'est bon. En ce qui concerne le type du champ, on peut mettre type password. D'ailleurs, c'est le meilleur. Voilà, mettre ici pour masquer la saisie des mots de passe. Voilà, comme ça c'est bon. Donc maintenant, si tous les champs sont valides, on va procéder au traitement qui va inscrire les informations de l'utilisateur dans le fichier texte Comme ceci. Else, première opération à faire, c'est l'ouverture du fichier dans le mode lecture et écriture. On mettra donc fp. Si on met le mode d'ouverture r+, ça veut dire lecture et écriture. Le problème, c'est que le curseur ou bien le pointeur sera placé au début, alors que l'objectif, c'est d'ajouter une nouvelle ligne par utilisateur. Ça veut dire que je vais me placer à la fin du fichier. Et je vais ajouter une nouvelle ligne qui contient mes informations d'utilisateur. On mettra donc A+, qui signifie création, lecture et écriture en plaçant le curseur à la fin. Bien entendu, la création du fichier sera faite si celui-ci n'existe pas. Alors ce n'est pas le cas parce que fichier.txt existe bel et bien. Dans ce cas, A+ deviendra l'équivalent de R+, autrement dit lecture et écriture, à différence près que le curseur sera placé cette fois à la fin. Ensuite, on va inscrire dans le fichier les informations de l'utilisateur à l'aide de fputs. Les informations, on va les afficher de cette manière: le nom, deux points, le prénom, deux points, le login, deux points, et le mot de passe haché en MD5. On mettra donc nom concaténé avec deux points Prénom, login, et à la fin mb5 du mot de passe, comme ceci. Mais comme je viens de le dire, chaque ligne contiendra l'information d'un utilisateur unique, alors il faut assurer un retour à la ligne. On mettra donc là concaténé avec \n pour dire on va se rendre dans une nouvelle ligne. Alors exécutons maintenant pour voir le résultat. Quand je mets par exemple A, A, m'inscrire, bon je n'ai aucun message, c'est-à-dire que je n'ai aucune erreur. On va maintenant vérifier le fichier texte s'il contient les informations que je viens d'inscrire. Et voilà, donc j'ai le nom, le prénom, le login et le mot de passe haché en MD5. Et vous avez vu l'apparition de la ligne 2 parce que maintenant je suis sur la nouvelle ligne. Juste une remarque, sur certains systèmes d'exploitation, il est préférable de mettre anti-slash r, anti-slash n comme ça pour dire retour chariot et nouvelle ligne. Bon, principalement sur Windows on fait ce genre de traitement, mais sinon anti-slash n est largement suffisante. Donc maintenant je vais faire une nouvelle inscription qui est plus propre que ça. Par exemple, je mettrai mon nom. Pour le login, je mettrai Mon nom toujours, le mot de passe je vais mettre 123. Voilà, maintenant on va se rendre dans le fichier texte et j'ai l'utilisateur qui vient d'être rajouté. Donc nom, prénom, login et le mot de passe haché en MD5. C'est bon, maintenant on va se rendre dans le fichier login.php pour faire le traitement d'authentification. Alors même chose, on va vérifier si l'utilisateur a posté le formulaire. Dans ce cas, ce qu'on va faire, c'est parcourir le fichier texte du début à la fin, ligne par ligne, et on va vérifier si les informations correspondent, et principalement le login et le mot de passe. On va donc faire ceci. Voilà, pour le mode d'ouverture, j'ai mis RA, c'est-à-dire lecture seule, parce que j'ai pas besoin de modifier le fichier. Et en plus, le curseur sera placé au début de celui-ci. Dans ce cas je vais parcourir ligne par ligne à l'aide d'une boucle de la manière suivante. Ça veut dire tant que j'ai pas atteint la fin du fichier identifié par fp, je vais récupérer la ligne courante. Alors maintenant la chaîne de caractères str est contient la ligne entière, à savoir le nom, le prénom, le login et le mot de passe qui sont espacés par deux points. Et comme vous l'avez deviné, je vais maintenant briser ma chaîne au niveau des deux points pour isoler chacune des informations. Ça veut dire je vais créer un tableau dont les index contiennent respectivement le nom, le prénom, le login et le mot de passe. Je mettrai donc tab égale explode. Le caractère qui permet de décomposer la chaîne, c'est deux points. Et dans ce cas, je vais avoir un tableau qui contient les informations de la ligne. Et du coup, le tableau contient quatre index. Ce qui m'intéresse le plus, c'est l'index numéro deux et numéro trois. Il faut bien qu'il vérifie les informations qui ont été saisies par l'utilisateur au moment de l'authentification. On mettra donc ici if login, c'est-à-dire le login saisi par l'utilisateur. Égal à tab2 et le mot de passe que je vais hacher bien entendu. Parce que n'oubliez pas que le mot de passe est déjà haché dans le fichier texte et je peux pas récupérer le mot de passe initial. Alors je vais tout simplement hacher le mot de passe saisi par l'utilisateur et je vais le comparer avec celui qui est déposé dans le fichier. Qui correspond à tab3. Il y a juste un truc s'il vous plaît, c'est que ici j'ai le mot de passe qui contient normalement 32 caractères. Mais n'oubliez pas qu'il y a un antislash n qui est placé juste après. Donc ce que je vais faire, c'est écarter l'antislash n. C'est un caractère de plus. Ou bien je vais tout simplement récupérer les 32 premiers caractères de tab3 comme ceci. Voilà, donc substr qui permet l'extraction d'une fraction de la chaîne en commençant à la position 0 et en retournant 32 caractères. Donc maintenant, si une ligne y correspond, alors automatiquement cette condition sera vraie. Ce qu'on va faire donc, c'est initialiser la variable de session comme d'habitude. Pour dire que j'autorise l'utilisateur d'accéder à la page confidentielle. Mais n'oubliez pas d'initialiser les sessions ici. Et je vais aussi créer une variable de session qui contient les informations d'utilisateur, à savoir le nom et le prénom, qui correspondent respectivement à tab 0, étape 1. Bon, je vais mettre concaténé avec un espace comme ça. Et si vous voulez formater le nom et le prénom en mettant par exemple ça en majuscule, on mettra str_to_upper. Donc maintenant il va tout mettre en majuscule. Et juste après, on va rediriger le navigateur vers la page session.php. Voilà, comme ça. Si vous voulez mettre un break pour dire que j'arrête prématurément la boucle, mais pas la peine parce que la redirection sera effectuée avant. Alors on enlève cette ligne. Voilà. Mais maintenant imaginez qu'il n'y a aucune ligne qui correspond aux informations qui ont été saisies par l'utilisateur. Donc à la fin de la boucle, c'est-à-dire si la boucle est finie et il n'y a aucune redirection vers la password.php, ça signifie tout simplement que le login et le mot de passe saisis par l'utilisateur ne sont pas valides. Je mettrai donc là erreur comme ceci. Alors exécutons pour voir le résultat. Bon, quand je mets m'authentifier, ça m'affiche mauvais login ou mot de passe. En ce qui concerne cette erreur, c'est tout simplement la dernière ligne qui est en train d'être explorée par le script. Il trouve pas de motif de pont pour éclater la chaîne et du coup il n'a pas pu générer les index 0, 1, etc. Alors on va tout simplement masquer cette erreur à l'aide des@. Comme ceci. Donc maintenant ça m'affiche mon vide login et mot de passe. Et quand je mets par exemple mon login avec mon mot de passe, donc ça me redirige bel et bien vers la page session.php. Maintenant dans la page session.php, je vais essayer d'afficher mon nom et mon prénom ici. Et bien entendu le traitement le plus important c'est de limiter l'accès à cette page. De telle sorte à ce que seules les personnes qui se sont correctement authentifiées puissent y accéder. On va donc se rendre ici, on mettra comme d'habitude session_start. Et ensuite on va vérifier la variable de session autorisée que j'ai initialisée ici. Si elle est différente de UI, c'est que l'utilisateur ne s'est pas authentifié. On mettra donc if. Alors immédiatement je vais rediriger le navigateur vers la page login.php. Et bien sûr exit en guise de précaution. Maintenant à la place de nom et prénom, je vais afficher le nom et prénom que j'ai enregistré ici. Donc c'est la variable de session, nom et prénom tout court comme ça. Voilà, exécutons maintenant. Alors ça m'affiche bien mon nom et mon prénom. Et quand je mets déconnexion pour me rendre sur la page déconnexion.php qui va écraser la session et que j'essaie d'accéder directement à la page session.php, normalement il ne me laisse pas passer. Mais la variable n'est pas initialisée et du coup elle n'est pas reconnue. Alors je vais comme d'habitude mettre un@ avant comme ceci. Alors voilà, je suis redirigé instantanément vers la page login.php. Donc maintenant on va faire une autre inscription, par exemple test, prénom c'est test, login c'est user et le mot de passe par exemple c'est abc. Voilà, maintenant on va s'authentifier à l'aide de cet utilisateur, donc user abc, et voilà ça m'affiche bonjour test test. Alors, ça sera tout pour cette vidéo. Merci pour votre attention et à la vidéo prochaine.
More from Yamossoun

Algorithme de calcule de la racine carrée par dichotomie #dichotomy #squareroot #algorithm









