Registre des membres pauvres php. Construire un système d'enregistrement incroyablement simple en PHP et MySQL

Créer un site basé sur l’adhésion semble être une tâche ardue au début. Si vous avez toujours voulu le faire vous-même, puis que vous avez abandonné lorsque vous avez commencé à réfléchir à la manière dont vous allez le mettre en place en utilisant vos compétences PHP, alors cet article est pour vous. Nous allons vous guider à travers tous les aspects de la création d'un site basé sur l'adhésion, avec un espace membre sécurisé protégé par mot de passe.

L'ensemble du processus se compose de deux grandes parties : l'enregistrement des utilisateurs et l'authentification des utilisateurs. Dans la première partie, nous allons aborder la création du formulaire d'inscription et stocker les données dans une base de données MySQL. Dans la deuxième partie, nous créerons le formulaire de connexion et l'utiliserons pour permettre aux utilisateurs d'accéder à la zone sécurisée.

Téléchargez le code

Vous pouvez télécharger l’intégralité du code source du système d’inscription/connexion à partir du lien ci-dessous :

Configuration et téléchargement
Le fichier ReadMe contient des instructions détaillées.

Ouvrez le source\include\membersite_config.php fichier dans un éditeur de texte et mettez à jour la configuration. (Connexion à la base de données, nom de votre site Web, votre adresse email, etc.).

Téléchargez tout le contenu du répertoire. Testez le register.php en soumettant le formulaire.

Le formulaire d'inscription

Afin de créer un compte utilisateur, nous devons recueillir un minimum d'informations auprès de l'utilisateur. Nous avons besoin de son nom, de son adresse email et du nom d'utilisateur souhaité et mot de passe. Bien sûr, nous pouvons demander plus d’informations à ce stade, mais un long formulaire est toujours un frein. Alors limitons-nous à ces domaines.

Voici le formulaire d'inscription :

Registre

Nous avons donc des champs de texte pour le nom, l'e-mail et le mot de passe. Notez que nous utilisons le pour une meilleure convivialité.

Validation du formulaire

À ce stade, c'est une bonne idée de mettre en place un code de validation de formulaire, afin de nous assurer que nous disposons de toutes les données requises pour créer le compte utilisateur. Nous devons vérifier si le nom, l'e-mail et le mot de passe sont renseignés et que l'e-mail est au bon format.

Gérer la soumission du formulaire

Nous devons maintenant gérer les données du formulaire soumises.

Voici la séquence (voir le fichier fg_membersite.php dans la source téléchargée) :

function RegisterUser() ( if(!isset($_POST["submit"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($ formvars); renvoie vrai ;

Tout d’abord, nous validons la soumission du formulaire. Ensuite, nous collectons et « désinfectons » les données de soumission du formulaire (toujours faire cela avant d'envoyer un e-mail, de les enregistrer dans la base de données, etc.). La soumission du formulaire est ensuite enregistrée dans la table de la base de données. Nous envoyons un e-mail à l'utilisateur pour lui demander une confirmation. Ensuite, nous informons l'administrateur qu'un utilisateur s'est enregistré.

Sauvegarde des données dans la base de données

Maintenant que nous avons rassemblé toutes les données, nous devons les stocker dans la base de données.
Voici comment nous enregistrons la soumission du formulaire dans la base de données.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("La connexion à la base de données a échoué !"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Cet e-mail est déjà enregistré"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Ce nom d'utilisateur est déjà utilisé. Veuillez essayer un autre nom d'utilisateur"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("L'insertion dans la base de données a échoué !"); return false;

Notez que vous avez configuré les informations de connexion à la base de données dans le fichier membersite_config.php. Dans la plupart des cas, vous pouvez utiliser « localhost » pour l'hôte de la base de données.
Après vous être connecté, nous nous assurons que la table existe. (Sinon, le script créera la table requise).
Ensuite, nous nous assurons que le nom d'utilisateur et l'e-mail sont uniques. S'il n'est pas unique, nous renvoyons l'erreur à l'utilisateur.

La structure des tables de la base de données

C'est la structure du tableau. La fonction CreateTable() du fichier fg_membersite.php crée la table. Voici le code :

function CreateTable() ( $qry = "Créer une table $this->tablename ("". "id_user INT NOT NULL AUTO_INCREMENT", "name VARCHAR(128) NOT NULL", "email VARCHAR(64) NOT NULL", " "numéro_téléphone VARCHAR(16) NOT NULL ," "nom d'utilisateur VARCHAR(16) NOT NULL", "mot de passe VARCHAR(32) NOT NULL", "code de confirmation VARCHAR(32)", " ")" if(!mysql_query($qry,$); this->connection)) ( $this->HandleDBError("Erreur lors de la création de la table \nquery was\n $qry"); return false; ) return true )

Le champ id_user contiendra l'identifiant unique de l'utilisateur et constitue également la clé primaire de la table. Notez que nous autorisons 32 caractères pour le champ du mot de passe. Nous faisons cela car, par mesure de sécurité supplémentaire, nous stockerons le mot de passe dans la base de données cryptée à l'aide de MD5. Veuillez noter que MD5 étant une méthode de cryptage unidirectionnelle, nous ne pourrons pas récupérer le mot de passe au cas où l'utilisateur l'oublierait.

Insérer l'inscription dans la table

Voici le code que nous utilisons pour insérer des données dans la base de données. Nous aurons toutes nos données disponibles dans le tableau $formvars.

fonction InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = " insérer dans".$this->tablename."(nom, email, nom d'utilisateur, mot de passe, code de confirmation) valeurs ​​("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this -> SanitizeForSQL($formvars["email"]) , "", "" $this->SanitizeForSQL($formvars["nom d'utilisateur"]) "", "" md5($formvars["mot de passe"]) ". ", "" . $confirmcode . """; if(!mysql_query($insert_query ,$this->connection)) ( $this->HandleDBError("Erreur lors de l'insertion des données dans la table\nquery:$insert_query"); return faux ; renvoie vrai ;

Notez que nous utilisons la fonction PHP md5() pour crypter le mot de passe avant de l'insérer dans la base de données.
Nous créons également le code de confirmation unique à partir de l’adresse e-mail de l’utilisateur.

Envoyer des emails

Maintenant que nous avons l'inscription dans notre base de données, nous enverrons un email de confirmation à l'utilisateur. L'utilisateur doit cliquer sur un lien dans l'e-mail de confirmation pour terminer le processus d'inscription.

fonction SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Votre inscription avec ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Bonjour ".$formvars["name"]."\r\ n\r\n". "Merci pour votre inscription avec ".$this->sitename."\r\n". "Veuillez cliquer sur le lien ci-dessous pour confirmer votre inscription.\r\n." "$confirm_url\r \n". "\r\n". "Cordialement,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Échec de l'envoi de l'e-mail de confirmation d'inscription."); return false;

Mises à jour

9 janvier 2012
Les fonctionnalités de réinitialisation du mot de passe/changement de mot de passe sont ajoutées
Le code est désormais partagé sur GitHub.

Content de te revoirUtilisateurFullName(); ?>!

Licence


Le code est partagé sous licence LGPL. Vous pouvez l'utiliser librement sur des sites Web commerciaux ou non commerciaux.

Aucun article associé.

Les commentaires sur cette entrée sont fermés.

Dans cet article, vous apprendrez comment créer un formulaire d'inscription et d'autorisation en utilisant HTML, JavaScript, PHP et MySql. De tels formulaires sont utilisés sur presque tous les sites Web, quel que soit leur type. Ils sont créés pour le forum, pour la boutique en ligne et pour réseaux sociaux(comme Facebook, Twitter, Odnoklassniki) et pour de nombreux autres types de sites.

Si vous avez un site Web sur votre ordinateur local, j'espère que vous l'avez déjà serveur local installé et en cours d'exécution. Sans cela, rien ne fonctionnera.

Création d'une table dans la base de données

Afin de mettre en œuvre l’enregistrement des utilisateurs, nous avons tout d’abord besoin d’une base de données. Si vous l’avez déjà, tant mieux, sinon vous devez le créer. Dans l'article, j'explique en détail comment procéder.

Et donc, nous avons une base de données (en abrégé DB), maintenant nous devons créer une table utilisateurs dans lequel nous ajouterons nos utilisateurs enregistrés.

J'ai également expliqué comment créer une table dans une base de données dans l'article. Avant de créer une table, nous devons déterminer quels champs elle contiendra. Ces champs correspondront aux champs du formulaire d'inscription.

Nous avons donc réfléchi, imaginé les champs de notre formulaire et créé un tableau utilisateurs avec ces champs :

  • identifiant- Identifiant. Champ identifiant Chaque table de la base de données devrait l'avoir.
  • prénom- Pour enregistrer le nom.
  • nom de famille- Pour conserver le nom de famille.
  • e-mail- Pour enregistrer l'adresse postale. Nous utiliserons l'e-mail comme identifiant, ce champ doit donc être unique, c'est-à-dire avoir l'index UNIQUE.
  • email_statut- Champ pour indiquer si le mail est confirmé ou non. Si le mail est confirmé, alors il aura la valeur 1, sinon la valeur sera 0.
  • mot de passe- Pour enregistrer le mot de passe.


Si vous souhaitez que votre formulaire d'inscription comporte d'autres champs, vous pouvez également les ajouter ici.

Ça y est, notre table utilisateurs prêt. Passons à l'étape suivante.

Connexion à la base de données

Nous avons créé la base de données, nous devons maintenant nous y connecter. Nous nous connecterons avec en utilisant PHP Extensions MySQLi.

Dans le dossier de notre site, créez un fichier portant le nom dbconnect.php, et écrivez-y le script suivant :

Erreur de connexion à la base de données. Description de l'erreur : ".mysqli_connect_error()."

"; exit(); ) // Définir l'encodage de la connexion $mysqli->set_charset("utf8"); // Pour plus de commodité, ajoutez ici une variable qui contiendra le nom de notre site $address_site = "http://testsite .local" ; ?>

Ce fichier dbconnect.php devra être connecté aux gestionnaires de formulaire.

Notez la variable $adresse_site, j'ai indiqué ici le nom de mon site de test sur lequel je vais travailler. Veuillez indiquer le nom de votre site en conséquence.

Structure du site

Regardons maintenant la structure HTML de notre site.

Nous allons déplacer l'en-tête et le pied de page du site dans des fichiers séparés, en-tête.php Et pied de page.php. Nous les inclurons sur toutes les pages. A savoir sur la page principale (fichier index.php), à la page contenant le formulaire d'inscription (fichier formulaire_register.php) et à la page contenant le formulaire d'autorisation (fichier formulaire_auth.php).

Bloquez avec nos liens, inscription Et autorisation, ajoutez-les à l'en-tête du site pour qu'ils soient affichés sur toutes les pages. Un lien sera saisi à page du formulaire d'inscription(déposer formulaire_register.php) et l'autre à la page avec formulaire d'autorisation(déposer formulaire_auth.php).

Contenu du fichier header.php :

Nom de notre site

En conséquence, notre page principale ressemble à ceci :


Bien sûr, votre site peut avoir une structure complètement différente, mais ce n'est pas important pour nous pour le moment. L'essentiel est qu'il existe des liens (boutons) pour l'enregistrement et l'autorisation.

Passons maintenant au formulaire d'inscription. Comme vous l'avez déjà compris, nous l'avons dans nos dossiers formulaire_register.php.

Allez dans la base de données (dans phpMyAdmin), ouvrez la structure des tables utilisateurs et regardez de quels champs nous avons besoin. Cela signifie que nous avons besoin de champs pour saisir le prénom et le nom, d'un champ pour saisir l'adresse postale (Email) et d'un champ pour saisir le mot de passe. Et pour des raisons de sécurité, nous ajouterons un champ permettant de saisir un captcha.

Sur le serveur, suite au traitement du formulaire d'inscription, diverses erreurs peuvent survenir à cause desquelles l'utilisateur ne pourra pas s'inscrire. Par conséquent, pour que l'utilisateur comprenne pourquoi l'enregistrement échoue, il est nécessaire d'afficher des messages concernant ces erreurs.

Avant d'afficher le formulaire, ajoutez un bloc pour afficher les messages d'erreur de la session.

Et encore une chose, si l'utilisateur est déjà autorisé, et par curiosité il se rend directement sur la page d'inscription en écrivant dans la barre d'adresse du navigateur adresse_site/form_register.php, alors dans ce cas, à la place du formulaire d'inscription, nous afficherons un en-tête indiquant qu'il est déjà inscrit.

En général, le code du fichier formulaire_register.php nous avons obtenu ceci :

Vous êtes déjà inscrit

Dans le navigateur, la page avec le formulaire d'inscription ressemble à ceci :


En utilisant attribut obligatoire, nous avons rendu tous les champs obligatoires.

Faites attention au code du formulaire d'inscription où le captcha s'affiche:


Nous avons spécifié le chemin d'accès au fichier dans la valeur de l'attribut src de l'image captcha.php, qui génère ce captcha.

Regardons le code du fichier captcha.php:

Le code est bien commenté, je me concentrerai donc sur un seul point.

À l'intérieur d'une fonction imageTtfTexte(), le chemin d'accès à la police est spécifié verdana.ttf. Donc pour que le captcha fonctionne correctement, il faut créer un dossier polices, et placez-y le fichier de police verdana.ttf. Vous pouvez le trouver et le télécharger sur Internet, ou le récupérer dans les archives avec les éléments de cet article.

Nous en avons terminé avec la structure HTML, il est temps de passer à autre chose.

Vérifier la validité des e-mails à l'aide de jQuery

Tout formulaire doit vérifier la validité des données saisies, tant du côté client (avec en utilisant Javascript, jQuery) et côté serveur.

Il faut porter une attention particulière au champ Email. Il est très important que l'adresse postale saisie soit valide.

Pour ce champ de saisie, nous définissons le type d'e-mail (type="email"), cela nous met légèrement en garde contre des formats incorrects. Mais cela ne suffit pas, car grâce à l'inspecteur de code que nous fournit le navigateur, nous pouvons facilement modifier la valeur de l'attribut. taper Avec e-mail sur texte, et voilà, notre chèque ne sera plus valable.


Et dans ce cas, il faut faire un contrôle plus fiable. Pour ce faire, nous utiliserons la bibliothèque jQuery de JavaScript.

Pour connecter la bibliothèque jQuery, dans le fichier en-tête.php entre les balises , avant la balise fermante , ajoutez cette ligne :

Immédiatement après cette ligne, nous ajouterons le code de validation de l'e-mail. Ici, nous ajouterons un code pour vérifier la longueur du mot de passe saisi. Sa longueur doit être d'au moins 6 caractères.

À l'aide de ce script, nous vérifions la validité de l'adresse e-mail saisie. Si l'utilisateur a saisi un e-mail incorrect, nous affichons un message d'erreur à ce sujet et désactivons le bouton d'envoi du formulaire. Si tout va bien, nous supprimons l'erreur et activons le bouton d'envoi du formulaire.

Et voilà, nous en avons terminé avec la validation des formulaires côté client. Nous pouvons maintenant l'envoyer au serveur, où nous effectuerons également quelques vérifications et ajouterons des données à la base de données.

Enregistrement de l'utilisateur

Nous envoyons le formulaire au fichier pour traitement s'inscrire.php, via la méthode POST. Le nom de ce fichier de gestionnaire est spécifié dans la valeur de l'attribut action. Et la méthode d'envoi est spécifiée dans la valeur de l'attribut méthode.

Ouvrez ce fichier s'inscrire.php et la première chose que nous devons faire est d'écrire une fonction de lancement de session et de connecter le fichier que nous avons créé précédemment dbconnect.php(Dans ce fichier, nous avons établi une connexion à la base de données). Et aussi, déclarons immédiatement les cellules messages d'erreur Et messages_de_succès dans le tableau de sessions global. DANS messages_d'erreur nous enregistrerons tous les messages d'erreur qui surviennent lors du traitement du formulaire, et dans messages_de_succès, nous enregistrerons des messages joyeux.

Avant de continuer, nous devons vérifier le formulaire a-t-il été soumis ?. Un attaquant peut regarder la valeur de l'attribut actionà partir du formulaire et découvrez quel fichier traite ce formulaire. Et il aura peut-être l’idée d’accéder directement à ce fichier en tapant l’adresse suivante dans la barre d’adresse du navigateur : http://adresse_site/register.php

Nous devons donc rechercher une cellule dans le tableau POST global dont le nom correspond au nom de notre bouton "S'inscrire" du formulaire. De cette façon, nous vérifions si le bouton "S'inscrire" a été cliqué ou non.

Si un attaquant tente d'accéder directement à ce fichier, il recevra un message d'erreur. Je vous rappelle que la variable $address_site contient le nom du site et qu'elle a été déclarée dans le fichier dbconnect.php.

Erreur! page d'accueil.

"); } ?>

La valeur du captcha dans la session a été ajoutée lors de sa génération, dans le fichier captcha.php. Pour rappel, je vais vous montrer à nouveau ce morceau de code du fichier captcha.php, où la valeur captcha est ajoutée à la session :

Passons maintenant à la vérification elle-même. Dans le fichier s'inscrire.php, à l'intérieur du bloc if, où l'on vérifie si le bouton "S'inscrire" a été cliqué, ou plutôt où le commentaire " est indiqué" // (1) Espace pour le morceau de code suivant"nous écrivons:

//Vérifie le captcha reçu //Coupe les espaces du début et de la fin de la ligne $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Comparez la valeur reçue avec la valeur de la session. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Si le captcha n'est pas correct, alors nous renvoyons l'utilisateur à la page d'inscription, et là nous lui afficherons un message d'erreur indiquant qu'il a saisi le mauvais captcha . $message_erreur = "

Erreur! Vous avez saisi le mauvais captcha

"; // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] = $error_message; // Renvoie l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_register.php"); //Arrêtez le script exit(); // (2) Place pour le morceau de code suivant)else( //Si le captcha n'est pas passé ou s'il est vide exit( "

Erreur! Il n'y a pas de code de vérification, c'est-à-dire un code captcha. Vous pouvez accéder à la page principale.

"); }

Ensuite, nous devons traiter les données reçues du tableau POST. Tout d'abord, nous devons vérifier le contenu du tableau POST global, c'est-à-dire s'il existe des cellules dont les noms correspondent aux noms des champs de saisie de notre formulaire.

Si la cellule existe, alors nous supprimons les espaces du début et de la fin de la ligne de cette cellule, sinon nous redirigeons l'utilisateur vers la page contenant le formulaire d'inscription.

Ensuite, après avoir coupé les espaces, nous ajoutons la ligne à la variable et vérifions si cette variable n'est pas vide, alors nous passons à autre chose, sinon nous redirigeons l'utilisateur vers la page avec le formulaire d'inscription.

Collez ce code à l'emplacement spécifié" // (2) Espace pour le prochain morceau de code".

/* Vérifiez s'il y a des données envoyées depuis le formulaire dans le tableau global $_POST et enveloppez les données soumises dans des variables régulières.*/ if(isset($_POST["first_name"]))( // Coupez les espaces depuis le début et fin de la chaîne $first_name = trim($_POST["first_name"]); //Vérifie si la variable est vide if(!empty($first_name))( // Pour des raisons de sécurité, convertissez les caractères spéciaux en entités HTML $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Entrez votre nom

Le champ de nom est manquant

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) if( isset($_POST["last_name"]))( //Coupe les espaces du début et de la fin de la ligne $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Pour des raisons de sécurité, convertissez les caractères spéciaux en entités HTML $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Enregistrez le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Veuillez entrer votre nom de famille

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Le champ du nom de famille est manquant

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) if( isset($_POST["email"]))( //Coupe les espaces du début et de la fin de la ligne $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Emplacement du code pour vérifier le format de l'adresse e-mail et son unicité )else( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Entrer votre Email

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) if( isset($_POST["password"]))( //Coupe les espaces du début et de la fin de la chaîne $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Crypter le mot de passe $password = md5($password."top_secret");else( //Enregistrer le message d'erreur dans la session. $_SESSION["error_messages"] . = "

Tapez votre mot de passe

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) // (4) Emplacement du code d'ajout d'un utilisateur à la base de données

Le domaine est particulièrement important e-mail. Il faut vérifier le format de l'adresse postale reçue et son unicité dans la base de données. Autrement dit, y a-t-il un utilisateur déjà enregistré avec la même adresse e-mail ?

À l'endroit indiqué" // (3) Localisation du code pour vérifier le format de l'adresse postale et son unicité" ajoutez le code suivant :

//Vérifiez le format de l'adresse email reçue à l'aide d'une expression régulière $reg_email = "/^**@(+(*+)*\.)++/i"; //Si le format de l'adresse email reçue ne correspond pas à l'expression régulière if(!preg_match($reg_email, $email))( // Enregistrez le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Vous avez entré un e-mail incorrect

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) // Nous vérifions si une telle adresse est déjà dans la base de données $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); font exactement une ligne, ce qui signifie que l'utilisateur avec cette adresse email est déjà enregistré if($result_query->num_rows == 1)( //Si le résultat obtenu n'est pas faux if(($row = $result_query->fetch_assoc() ) != false) ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Un utilisateur avec cette adresse e-mail est déjà enregistré

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); )else( // Enregistre le message d'erreur à la session $_SESSION["error_messages"] .= "

Erreur dans la requête de base de données

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); ) /* fermeture de la sélection */ $ result_query-> close(); //Arrêtez le script exit( ) /* fermeture de la sélection */ $result_query->close();

Et voilà, nous avons terminé toutes les vérifications, il est temps d’ajouter l’utilisateur à la base de données. À l'endroit indiqué" // (4) Emplacement du code d'ajout d'un utilisateur à la base de données" ajoutez le code suivant :

//Requête pour ajouter un utilisateur à la base de données $result_query_insert = $mysqli->query("INSERT INTO `users` (prénom, nom, email, mot de passe) VALUES ("".$first_name."", "".$last_name ." ", "".$email.", "".$mot de passe."")"); if(!$result_query_insert)( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Erreur dans la demande d'ajout d'un utilisateur à la base de données

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); )else( $_SESSION["success_messages"] = "

Inscription terminée avec succès !!!
Vous pouvez maintenant vous connecter en utilisant votre nom d'utilisateur et votre mot de passe.

"; //Envoyer l'utilisateur vers la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); ) /* Compléter la demande */ $ result_query_insert-> close(); //Ferme la connexion à la base de données $mysqli->close();

Si une erreur s'est produite dans la demande d'ajout d'un utilisateur à la base de données, nous ajoutons un message concernant cette erreur à la session et renvoyons l'utilisateur à la page d'inscription.

Sinon, si tout s’est bien passé, on ajoute également un message à la session, mais cette fois c’est plus agréable, à savoir on informe l’utilisateur que l’inscription a réussi. Et nous le redirigeons vers la page avec le formulaire d'autorisation.

Le script de vérification du format de l'adresse email et de la longueur du mot de passe est dans le fichier en-tête.php, cela s'appliquera donc également aux champs de ce formulaire.

La session est également démarrée dans le fichier en-tête.php, donc dans le fichier formulaire_auth.php Il n'est pas nécessaire de démarrer une session, car nous obtiendrons une erreur.


Comme je l'ai déjà dit, le script permettant de vérifier le format de l'adresse e-mail et la longueur du mot de passe fonctionne également ici. Par conséquent, si l'utilisateur saisit une adresse e-mail incorrecte ou un mot de passe court, il recevra immédiatement un message d'erreur. Un bouton entrer deviendra inactif.

Après avoir corrigé les erreurs, le bouton entrer devient actif et l'utilisateur pourra soumettre le formulaire au serveur, où il sera traité.

Autorisation de l'utilisateur

Pour attribuer une valeur action le handicap d'autorisation a un fichier spécifié auth.php, cela signifie que le formulaire sera traité dans ce fichier.

Et donc, ouvrez le fichier auth.php et écrivez du code pour traiter le formulaire d'autorisation. La première chose à faire est de démarrer une session et de connecter le fichier dbconnect.php pour vous connecter à la base de données.

//Déclarez une cellule pour ajouter les erreurs pouvant survenir lors du traitement du formulaire. $_SESSION["messages_d'erreur"] = ""; //Déclarez une cellule pour ajouter les messages réussis $_SESSION["success_messages"] = "";

/* Vérifiez si le formulaire a été soumis, c'est-à-dire si le bouton de connexion a été cliqué. Si oui, alors nous passons à autre chose, sinon, nous afficherons un message d'erreur à l'utilisateur indiquant qu'il a accédé directement à cette page. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Espace pour le morceau de code suivant)else( exit("

Erreur! Vous avez accédé directement à cette page, il n'y a donc aucune donnée à traiter. Vous pouvez accéder à la page principale.

"); }

//Vérifie le captcha reçu if(isset($_POST["captcha"]))( //Coupe les espaces du début et de la fin de la ligne $captcha = trim($_POST["captcha"]); if(! vide($captcha ))( //Comparez la valeur reçue avec la valeur de la session. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Si le captcha est incorrect, alors nous renvoyons l'utilisateur à la page d'autorisation, et là nous lui afficherons un message d'erreur indiquant qu'il a entré le mauvais captcha $error_message = ".

Erreur! Vous avez saisi le mauvais captcha

"; // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] = $error_message; // Renvoie l'utilisateur à la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_auth.php"); //Arrêtez le script exit( )else( $error_message = "

Erreur! Le champ de saisie du captcha ne doit pas être vide.

"; // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] = $error_message; // Renvoie l'utilisateur à la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_auth.php"); //Arrêtez le script exit(); //(2) Lieu de traitement de l'adresse email //(3) Lieu de traitement du mot de passe //(4) Lieu de rédaction une requête à la base de données )else ( //Si le captcha n'est pas passé exit("

Erreur! Il n'y a pas de code de vérification, c'est-à-dire un code captcha. Vous pouvez accéder à la page principale.

"); }

Si l'utilisateur a saisi correctement le code de vérification, alors nous passons à autre chose, sinon nous le renvoyons à la page d'autorisation.

Vérification de l'adresse postale

// Coupe les espaces au début et à la fin de la ligne $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Vérifiez le format de l'adresse email reçue à l'aide d'une expression régulière $ reg_email = " /^**@(+(*+)*\.)++/i"; //Si le format de l'adresse email reçue ne correspond pas à l'expression régulière if(!preg_match($reg_email, $email ))( // Enregistrer dans le message d'erreur de session. $_SESSION["error_messages"] .= "

Vous avez entré un e-mail incorrect

"; //Retourne l'utilisateur à la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Le champ de saisie d'une adresse postale (email) ne doit pas être vide.

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Le champ de saisie de l'e-mail est manquant

"; //Retourne l'utilisateur à la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); ) // (3) Zone de traitement du mot de passe

Si l'utilisateur a saisi une adresse e-mail dans un mauvais format ou si la valeur du champ de l'adresse e-mail est vide, alors nous le renvoyons à la page d'autorisation où nous affichons un message à ce sujet.

Vérification du mot de passe

Le prochain champ à traiter est le champ du mot de passe. À l'endroit spécifié" //(3) Lieu de traitement des mots de passe", nous écrivons:

If(isset($_POST["password"]))( //Coupe les espaces du début et de la fin de la chaîne $password = trim($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //Crypter le mot de passe $password = md5($password."top_secret");else( //Enregistrer le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Tapez votre mot de passe

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); ) )else ( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Le champ du mot de passe est manquant

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); )

Ici, nous utilisons la fonction md5() pour crypter le mot de passe reçu, puisque nos mots de passe sont sous forme cryptée dans la base de données. Un mot secret supplémentaire en chiffrement, dans notre cas" Top secret" doit être celui qui a été utilisé lors de l'enregistrement de l'utilisateur.

Vous devez maintenant effectuer une requête dans la base de données pour sélectionner un utilisateur dont l'adresse e-mail est égale à l'adresse e-mail reçue et dont le mot de passe est égal au mot de passe reçu.

//Requête dans la base de données en fonction de la sélection de l'utilisateur. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" AND password = "".$password."""); if(!$result_query_select)( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Erreur de requête lors de la sélection d'un utilisateur dans la base de données

"; //Retourne l'utilisateur à la page d'inscription header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); )else( //Vérifie s'il n'y a aucun utilisateur avec de telles données dans la base de données, puis affiche un message d'erreur if($result_query_select->num_rows == 1)( // Si les données saisies correspondent aux données de la base de données, enregistrez le login et le mot de passe du tableau de sessions $_SESSION["email"] = $_SESSION["password"] = $password; page d'accueil header("HTTP/1.1 301 déplacé définitivement"); header("Emplacement : ".$address_site."/index.php"); )else( // Enregistre le message d'erreur dans la session. $_SESSION["error_messages"] .= "

Identifiant et/ou mot de passe incorrect

"; //Retourne l'utilisateur à la page d'autorisation header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Arrêtez le script exit(); ) )

Sortie du site

Et la dernière chose que nous mettons en œuvre est procédure pour quitter le site. Pour le moment, dans l'en-tête, nous affichons des liens vers la page d'autorisation et la page d'enregistrement.

Dans l'en-tête du site (fichier en-tête.php), à l'aide de la session, nous vérifions si l'utilisateur est déjà autorisé. Sinon, nous affichons les liens d'enregistrement et d'autorisation, sinon (s'il est autorisé), alors à la place des liens d'enregistrement et d'autorisation, nous affichons le lien Sortie.

Morceau de code modifié à partir du fichier en-tête.php:

Inscription

Sortie

Lorsque vous cliquez sur le lien de sortie du site, nous sommes redirigés vers un fichier déconnexion.php, où nous détruisons simplement les cellules avec l'adresse e-mail et le mot de passe de la session. Après cela, nous renvoyons l'utilisateur à la page sur laquelle le lien a été cliqué sortie.

Code de fichier déconnexion.php :

C'est tout. Maintenant tu sais comment mettre en œuvre et traiter les formulaires d’enregistrement et d’autorisation utilisateur sur votre site Web. Ces formulaires se trouvent sur presque tous les sites Web, chaque programmeur doit donc savoir comment les créer.

Nous avons également appris à valider les données d'entrée, tant côté client (dans le navigateur, en utilisant JavaScript, jQuery) que côté serveur (en utilisant PHP). Nous avons également appris mettre en place une procédure de sortie du site.

Tous les scripts ont été testés et fonctionnent. Vous pouvez télécharger l'archive avec les fichiers de ce petit site à partir de ce lien.

À l'avenir, j'écrirai un article dans lequel je décrirai. Et je compte aussi écrire un article où j'expliquerai (sans recharger la page). Ainsi, afin de rester informé de la sortie de nouveaux articles, vous pouvez vous abonner à mon site internet.

Si vous avez des questions, n'hésitez pas à me contacter, et si vous remarquez une erreur dans l'article, n'hésitez pas à me le faire savoir.

Plan de cours (partie 5) :

  1. Création d'une structure HTML pour le formulaire d'autorisation
  2. Nous traitons les données reçues
  3. Nous affichons le message de bienvenue de l'utilisateur dans l'en-tête du site

Avez-vous aimé l'article?

Dernière mise à jour : mar. 19 septembre 2006

registre_session

(PHP 4, PHP 5)session_register -- Enregistre une ou plusieurs variables globales avec la session en cours

Description

bouffon registre_session(nom mixte [, mixte ...])
session_register() accepte un nombre variable d'arguments, dont chacun peut être soit une chaîne contenant le nom d'une variable, soit un tableau composé de noms de variables ou d'autres tableaux. Pour chaque nom, session_register() enregistre la variable globale avec ce nom dans la session en cours.
PrudenceSi vous souhaitez que votre script fonctionne indépendamment de register_globals , vous devez plutôt utiliser le tableau $_SESSION car les entrées $_SESSION sont automatiquement enregistrées. Si votre script utilise session_register(), cela ne fonctionnera pas dans les environnements où la directive PHP register_globals est désactivée.
register_globals : note importante : depuis PHP 4.2.0, la valeur par défaut de la directive PHP register_globals est désactivé, et il est complètement supprimé à partir de PHP 6.0.0. La communauté PHP encourage tous à ne pas s'appuyer sur cette directive mais à utiliser plutôt d'autres moyens, tels que les superglobals .
PrudenceCeci enregistre un mondial variable. Si vous souhaitez enregistrer une variable de session à partir d'une fonction, vous devez vous assurer de la rendre globale à l'aide du mondial ou le tableau $GLOBALS, ou utilisez les tableaux de session spéciaux comme indiqué ci-dessous.
Cette fonction renvoie TRUE lorsque toutes les variables sont enregistrées avec succès dans la session. Si session_start() n'a pas été appelé avant l'appel de cette fonction, un appel implicite à session_start() sans paramètres seront effectués. $_SESSION n'imite pas ce comportement et nécessite session_start() Avant utilisation.
Vous pouvez également créer une variable de session en définissant simplement le membre approprié de $_SESSION ou $HTTP_SESSION_VARS (PHP

Aujourd'hui, nous examinerons l'exploitation d'une vulnérabilité critique d'un jour dans le populaire CMS Joomla, qui a explosé sur Internet fin octobre. Nous parlerons des vulnérabilités avec des chiffres CVE-2016-8869, CVE-2016-8870 Et CVE-2016-9081. Tous les trois proviennent d'un seul morceau de code qui a langui dans les profondeurs du framework pendant cinq longues années, attendant dans les coulisses, pour ensuite se libérer et entraîner avec lui le chaos, les sites piratés et les larmes des utilisateurs innocents de ce Joomla. Seuls les développeurs les plus vaillants et courageux, dont les yeux sont rouges à cause de la lumière des moniteurs et dont les claviers sont jonchés de miettes de pain, ont pu défier les mauvais esprits déchaînés et poser leur tête sur l'autel des correctifs.

AVERTISSEMENT

Toutes les informations sont fournies à titre informatif uniquement. Ni les éditeurs ni l'auteur ne sont responsables de tout dommage éventuel causé par les éléments de cet article.

Où tout a commencé

Le 6 octobre 2016, Demis Palma a créé un sujet sur Stack Exchange dans lequel il demandait : pourquoi, en fait, dans la version 3.6 de Joomla, il existe deux méthodes pour enregistrer des utilisateurs avec le même nom register() ? Le premier se trouve dans le contrôleur UsersControllerRegistration et le second dans le contrôleur UsersControllerUser. Damis voulait savoir si la méthode UsersControllerUser::register() était utilisée quelque part, ou s'il s'agissait simplement d'un anachronisme évolutif issu de l'ancienne logique. Son souci était que même si cette méthode n’est utilisée par aucune vue, elle peut être appelée par une requête spécialement conçue. Ce à quoi j'ai reçu une réponse d'un développeur sous le pseudo itoctopus, qui a confirmé : le problème existe vraiment. Et envoyé un rapport aux développeurs Joomla.

Ensuite, les événements se sont développés le plus rapidement. Le 18 octobre, les développeurs de Joomla ont accepté le rapport de Damis, qui avait alors rédigé un PoC permettant l'enregistrement des utilisateurs. Il a publié une note sur son site Internet, dans laquelle il parlait en termes généraux du problème qu'il avait rencontré et de ses réflexions à ce sujet. Le même jour, une nouvelle version de Joomla 3.6.3 est publiée, qui contient encore du code vulnérable.

Après cela, Davide Tampellini fait tourner le bug au point d'enregistrer non pas un simple utilisateur, mais un administrateur. Et déjà le 21 octobre, un nouveau cas arrive à l'équipe de sécurité de Joomla. Il parle déjà d'augmenter les privilèges. Le même jour, une annonce apparaît sur le site Web Joomla selon laquelle la prochaine version portant le numéro de série 3.6.3 sera publiée le mardi 25 octobre, qui corrige une vulnérabilité critique dans le noyau du système.

25 octobre Joomla Security Strike Team découvre le dernier problème créé par le morceau de code découvert par Damis. Ensuite, un commit daté du 21 octobre portant le nom discret Prepare 3.6.4 Stable Release est poussé dans la branche principale du référentiel officiel Joomla, qui corrige le malheureux bug.

Après cette révélation, de nombreuses personnes intéressées rejoignent la communauté des développeurs – ils commencent à promouvoir la vulnérabilité et à préparer des exploits.

Le 27 octobre, le chercheur Harry Roberts télécharge un exploit prêt à l'emploi dans le référentiel Xiphos Research, capable de télécharger un fichier PHP sur un serveur doté d'un CMS vulnérable.

Détails

Eh bien, le contexte est terminé, passons à la partie la plus intéressante : l'analyse de la vulnérabilité. J'ai installé Joomla 3.6.3 comme version de test, donc tous les numéros de ligne seront pertinents pour cette version. Et tous les chemins d'accès aux fichiers que vous verrez ci-dessous seront indiqués par rapport à la racine du CMS installé.

Grâce à la découverte de Damis Palma, nous savons qu'il existe deux méthodes pour enregistrer les utilisateurs dans le système. Le premier est utilisé par le CMS et se trouve dans le fichier /components/com_users/controllers/registration.php:108. Le deuxième (celui que nous devrons appeler) réside dans /components/com_users/controllers/user.php:293. Regardons-le de plus près.

286 : /** 287 : * Méthode pour enregistrer un utilisateur. 288 : * 289 : * @return boolean 290 : * 291 : * @since 1.6 292 : */ 293 : public function register() 294 : ( 295 : JSession::checkToken("post") ou jexit(JText::_ ("JINVALID_TOKEN")); ... 300 : // Récupère les données du formulaire. 301 : $data = $this->input->post->get("user", array(), "array"); 315 : $return = $model->validate($form, $data); 316 : 317 : / Vérification des erreurs 318 : if ($return === false) 319 : ( ... 345 : / / Terminez l'enregistrement 346 : $return = $model->register($data);

Ici, je n'ai laissé que des lignes intéressantes. La version complète de la méthode vulnérable peut être consultée dans le référentiel Joomla.

Voyons ce qui se passe lors de l'enregistrement normal d'un utilisateur : quelles données sont envoyées et comment elles sont traitées. Si l'enregistrement des utilisateurs est activé dans les paramètres, le formulaire peut être trouvé à l'adresse http://joomla.local/index.php/component/users/?view=registration.


Une demande d'enregistrement d'utilisateur légitime ressemble à la capture d'écran suivante.


Le composant com_users est responsable du travail avec les utilisateurs. Faites attention au paramètre de tâche dans la requête. Il a le format $controller.$method . Regardons la structure des fichiers.

Noms des scripts dans le dossier contrôleurs correspondent aux noms des contrôleurs appelés. Puisque notre requête contient désormais $controller = "registration" , le fichier sera appelé inscription.php et sa méthode register().

Attention, question : comment transférer le traitement de l'enregistrement vers un endroit vulnérable du code ? Vous l'avez probablement déjà deviné. Les noms des méthodes vulnérables et réelles sont les mêmes (registre), il suffit donc de changer le nom du contrôleur appelé. Où se trouve notre contrôleur vulnérable ? C'est vrai, dans le fichier utilisateur.php. Il s'avère que $controller = "user" . En mettant le tout ensemble, nous obtenons task = user.register . La demande d'inscription est désormais traitée par la méthode dont nous avons besoin.


La deuxième chose à faire est d'envoyer les données dans le bon format. Tout est simple ici. Le registre légitime() attend de nous un tableau appelé jform , dans lequel nous transmettons les données d'enregistrement - nom, login, mot de passe, e-mail (voir capture d'écran avec la demande).

  • /components/com_users/controllers/registration.php : 124 : // Récupère les données utilisateur. 125 : $requestData = $this->input->post->get("jform", array(), "array");

Notre client obtient ces données à partir d'un tableau appelé user.

  • /components/com_users/controllers/user.php : 301 : // Récupère les données du formulaire. 302 : $data = $this->input->post->get("user", array(), "array");

Par conséquent, nous changeons les noms de tous les paramètres de la requête de jfrom en user .

Notre troisième étape consiste à trouver un token CSRF valide, car sans lui il n'y aura pas d'enregistrement.

  • /components/com_users/controllers/user.php : 296 : JSession::checkToken("post") ou jexit(JText::_("JINVALID_TOKEN"));

Il ressemble à un hachage MD5, et vous pouvez le récupérer, par exemple, à partir du formulaire d'autorisation sur le site /index.php/component/users/?view=login.


Vous pouvez maintenant créer des utilisateurs en utilisant la méthode souhaitée. Si tout s'est bien passé, alors félicitations : vous venez d'exploiter une vulnérabilité. CVE-2016-8870"Vérification des autorisations manquantes pour l'enregistrement de nouveaux utilisateurs."

Voici à quoi cela ressemble dans la méthode « fonctionnelle » register() du contrôleur UsersControllerRegistration :

  • /components/com_users/controllers/registration.php : 113 : // Si l'enregistrement est désactivé - Redirection vers la page de connexion. 114 : if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115 : ( 116 : $this->setRedirect(JRoute::_("index.php?option=com_users&view= login", false)); 117 : 118 : return false ; 119 : )

Et donc en vulnérable :

  • /components/com_users/controllers/user.php :

Ouais, pas question.

Pour comprendre le deuxième problème, beaucoup plus grave, envoyons la requête que nous avons créée et voyons comment elle est exécutée dans différentes parties du code. Voici l'élément chargé de valider les données soumises par l'utilisateur dans la méthode Worker :

La suite est disponible uniquement pour les membres

Option 1. Rejoignez la communauté « site » pour lire tous les documents sur le site

L'adhésion à la communauté dans la période spécifiée vous donnera accès à TOUS les documents Hacker, augmentera votre remise cumulée personnelle et vous permettra d'accumuler une note professionnelle Xakep Score !

Un tutoriel pour les très débutants ! Peu importe où vous allez sur Internet, il y a un élément essentiel que vous trouvez presque partout : l'enregistrement des utilisateurs. Que vous ayez besoin que vos utilisateurs s'inscrivent pour des raisons de sécurité ou simplement pour une fonctionnalité supplémentaire, il n'y a aucune raison de ne pas le faire avec ce simple didacticiel. Dans ce tutoriel, nous passerons en revue les bases de la gestion des utilisateurs, pour aboutir à un simple espace membre que vous pouvez mettre en œuvre sur votre propre site Web.

Si vous avez besoin d'aide supplémentaire ou souhaitez un raccourci, consultez la gamme de fournisseurs de services PHP sur Envato Studio. Ces développeurs expérimentés peuvent vous aider, depuis la correction rapide d'un bug jusqu'au développement d'une application complète à partir de zéro. Il vous suffit donc de parcourir les fournisseurs, de lire les avis et les notes et de choisir celui qui vous convient.

Introduction

Dans ce tutoriel, nous allons passer en revue chaque étape de création d'un système de gestion des utilisateurs, ainsi que d'un système de messagerie privée inter-utilisateurs. Nous allons le faire en utilisant PHP, avec une base de données MySQL pour stocker toutes les informations utilisateur. Ce tutoriel s'adresse aux débutants absolus en PHP, aucune connaissance préalable n'est donc requise - en fait, vous risquez de vous ennuyer un peu si vous êtes un utilisateur PHP expérimenté !

Ce tutoriel est destiné à être une introduction de base aux sessions et à l'utilisation des bases de données en PHP. Bien que le résultat final de ce didacticiel ne vous semble pas immédiatement utile, les compétences que vous acquerrez grâce à ce didacticiel vous permettront de produire votre propre système d'adhésion ; adapté à vos propres besoins.

Avant de commencer ce didacticiel, assurez-vous d'avoir à portée de main les informations suivantes :

  • Nom d'hôte de la base de données- c'est le serveur sur lequel votre base de données est hébergée, dans la plupart des cas, ce sera simplement "localhost".
  • Nom de la base de données, nom d'utilisateur de la base de données, mot de passe de la base de données- avant de commencer ce tutoriel, vous devez créer une base de données MySQL si vous en avez la possibilité, ou disposez des informations nécessaires pour vous connecter à une base de données existante. Ces informations sont nécessaires tout au long du didacticiel.

Si vous ne disposez pas de ces informations, votre hébergeur devrait pouvoir vous les fournir.

Maintenant que nous avons réglé les formalités, commençons le tutoriel !

Étape 1 - Configuration initiale

Mise en place de la base de données

Comme indiqué dans l'introduction, vous avez besoin d'une base de données pour continuer au-delà de ce point du didacticiel. Pour commencer, nous allons créer un tableau dans cette base de données pour stocker nos informations utilisateur.

La table dont nous avons besoin stockera nos informations utilisateur ; pour nos besoins, nous utiliserons un tableau simple, mais il serait facile de stocker plus d'informations dans des colonnes supplémentaires si c'est ce dont vous avez besoin. Dans notre système, nous avons besoin des quatre colonnes suivantes :

  • ID de l'utilisateur (Clé primaire)
  • Nom d'utilisateur
  • Mot de passe
  • Adresse e-mail

En termes de base de données, un Clé primaire est le champ qui identifie de manière unique la ligne. Dans ce cas, UserID sera notre clé primaire. Comme nous voulons que cela s'incrémente à chaque fois qu'un utilisateur s'inscrit, nous utiliserons l'option spéciale MySQL - auto_increment .

La requête SQL pour créer notre table est incluse ci-dessous et sera généralement exécutée dans l'onglet "SQL" de phpMyAdmin.

CREATE TABLE `users` (`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Username` VARCHAR(65) NOT NULL , `Password` VARCHAR(32) NOT NULL , `EmailAddress` VARCHAR(255) NOT NULL );

Création d'un fichier de base

Afin de simplifier la création de notre projet, nous allons réaliser un fichier de base que nous pourrons inclure dans chacun des fichiers que nous créons. Ce fichier contiendra les informations de connexion à la base de données, ainsi que certaines variables de configuration qui nous aideront tout au long du processus.

Commencez par créer un nouveau fichier : base.php , et entrez-y le code suivant :

Jetons un coup d'œil à quelques-unes de ces lignes, d'accord ? Il y a quelques fonctions ici que nous avons utilisées et que nous n'avons pas encore expliquées, alors examinons-les rapidement et comprenons-les - si vous comprenez déjà les bases de PHP, vous souhaiterez peut-être ignorer cette explication.

Session_start();

Cette fonction démarre une session pour le nouvel utilisateur, et plus tard dans ce didacticiel, nous stockerons des informations dans cette session pour nous permettre de reconnaître les utilisateurs déjà connectés. Si une session a déjà été créée, cette fonction la reconnaîtra et reportera cette session à la page suivante.

Mysql_connect($dbhost, $dbuser, $dbpass) ou die("Erreur MySQL : " . mysql_error()); mysql_select_db($dbname) ou die("Erreur MySQL : " . mysql_error());

Chacune de ces fonctions effectue une tâche distincte mais liée. La fonction mysql_connect connecte notre script au serveur de base de données en utilisant les informations que nous lui avons données ci-dessus, et la fonction mysql_select_db choisit ensuite la base de données à utiliser avec le script. Si l'une des fonctions ne parvient pas à se terminer, la fonction die interviendra automatiquement et arrêtera le traitement du script, laissant à tous les utilisateurs le message indiquant qu'il y a eu une erreur MySQL.

Étape 2 - Retour au frontend

Que devons-nous faire en premier ?

L'élément le plus important de notre page est la première ligne de PHP ; cette ligne inclura le fichier que nous avons créé ci-dessus (base.php) et nous permettra essentiellement d'accéder à n'importe quoi depuis ce fichier dans notre fichier actuel. Nous ferons cela avec la ligne suivante de code PHP. Créez un fichier nommé index.php et placez ce code en haut.

Commencer la page HTML

La première chose que nous allons faire pour notre frontend est de créer une page où les utilisateurs peuvent saisir leurs coordonnées pour se connecter, ou s'ils sont déjà connectés, une page où ils peuvent choisir ce qu'ils souhaitent ensuite faire. Dans ce didacticiel, je suppose que les utilisateurs ont des connaissances de base sur le fonctionnement de HTML/CSS et je ne vais donc pas expliquer ce code en détail ; pour le moment, ces éléments ne seront pas stylisés, mais nous pourrons changer cela plus tard lorsque nous créerons notre feuille de style CSS.

A l'aide du fichier que nous venons de créer (index.php), saisissez le code HTML suivant sous la ligne de PHP que nous avons déjà créée.

Que allons-nous leur montrer ?

Avant de publier le reste de la page, nous avons quelques questions à nous poser :

  1. L'utilisateur est-il déjà connecté ?
  • Oui- nous devons leur montrer une page avec des options à choisir.
  • Non
  • L'utilisateur a-t-il déjà soumis ses informations de connexion ?
    • Oui- nous devons vérifier leurs coordonnées, et si elles sont correctes, nous les connecterons au site.
    • Non- nous passons à la question suivante.
  • Si les deux questions ci-dessus ont reçu une réponse Non, nous pouvons maintenant supposer que nous devons afficher un formulaire de connexion à l'utilisateur.
  • Ces questions sont en fait les mêmes que celles que nous allons implémenter dans notre code PHP. Nous allons le faire sous la forme d’instructions if. Sans rien entrer dans aucun de vos nouveaux fichiers, jetons un coup d’œil à la logique que nous allons utiliser en premier.

    Cela semble déroutant, n'est-ce pas ? Divisons-le en sections plus petites et examinons-les une par une.

    If(!empty($_SESSION["LoggedIn"]) && !empty($_SESSION["Username"])) ( // permet à l'utilisateur d'accéder à la page principale)

    Lorsqu'un utilisateur se connecte à notre site Web, nous allons stocker ses informations dans une session - à tout moment après cela, nous pouvons accéder à ces informations dans un tableau PHP global spécial - $_SESSION . Nous utilisons la fonction vide pour vérifier si la variable est vide, avec l'opérateur ! devant lui. C'est pourquoi nous disons :

    Si la variable $_SESSION["LoggedIn"] n'est pas vide et que $_SESSION["Username"] n'est pas vide, exécutez ce morceau de code.

    La ligne suivante fonctionne de la même manière, mais cette fois en utilisant le tableau global $_POST. Ce tableau contient toutes les données envoyées à partir du formulaire de connexion que nous créerons plus tard dans ce didacticiel. La dernière ligne ne s'exécutera que si aucune des instructions précédentes n'est remplie ; dans ce cas, nous afficherons à l'utilisateur un formulaire de connexion.

    Donc, maintenant que nous comprenons la logique, mettons du contenu entre ces sections. Dans votre fichier index.php, entrez ce qui suit ci-dessous ce que vous avez déjà.

    Espace membre

    et votre adresse e-mail est .

    Succès"; écho "

    Nous vous redirigeons désormais vers l'espace membre.

    "; écho " "; ) sinon ( écho "

    Erreur

    "; écho "

    Désolé, votre compte est introuvable. S'il te plaît Cliquez ici pour essayer à nouveau.

    "; ) ) autre ( ?>

    Identifiant

    Merci de votre visite! Veuillez soit vous connecter ci-dessous, soit cliquer ici pour vous inscrire.



    Espérons que le premier et le dernier blocs de code ne vous embrouillera pas trop. Ce sur quoi nous devons vraiment nous concentrer maintenant, c'est ce pour quoi vous êtes tous venus dans ce didacticiel : le code PHP. Nous allons maintenant parcourir la deuxième section, une ligne à la fois, et je vais vous expliquer à quoi est destiné chaque morceau de code ici.

    $nom d'utilisateur = mysql_real_escape_string($_POST["nom d'utilisateur"]); $mot de passe = md5(mysql_real_escape_string($_POST["mot de passe"]));

    Il y a deux fonctions qui doivent être expliquées à cet égard. Premièrement, mysql_real_escape_string - une fonction très utile pour nettoyer les entrées de la base de données. Ce n'est pas une mesure de sécurité, mais cela éloignera la majorité des pirates malveillants en supprimant les parties indésirables de tout ce qui a été mis dans notre formulaire de connexion. Deuxièmement, md5 il serait impossible d'entrer dans les détails ici, mais. cette fonction crypte simplement tout ce qui lui est transmis - dans ce cas le mot de passe de l'utilisateur - pour empêcher les regards indiscrets de le lire.

    $checklogin = mysql_query("SELECT * FROM utilisateurs WHERE Nom d'utilisateur = "".$nom d'utilisateur."" ET Mot de passe = "".$mot de passe."""); if(mysql_num_rows($checklogin) == 1) ( $row = mysql_fetch_array($checklogin); $email = $row["EmailAddress"]; $_SESSION["Username"] = $username; $_SESSION["EmailAddress"] = $email; $_SESSION["Connecté"] = 1;

    Nous avons ici le cœur de notre code de connexion ; tout d'abord, nous exécutons une requête sur notre base de données. Dans cette requête, nous recherchons tout ce qui concerne un membre, dont le nom d'utilisateur et le mot de passe correspondent aux valeurs de notre $username et $password que l'utilisateur a fournies. Sur la ligne suivante, nous avons une instruction if, dans laquelle nous vérifions combien de résultats nous avons reçus. S'il n'y a aucun résultat, cette section ne sera pas traitée. Mais s’il y a un résultat, nous savons que l’utilisateur existe et nous allons donc le connecter.

    Les deux lignes suivantes servent à obtenir l'adresse e-mail de l'utilisateur. Nous disposons déjà de ces informations à partir de la requête que nous avons déjà exécutée, nous pouvons donc facilement accéder à ces informations. Tout d'abord, nous obtenons un tableau des données qui ont été récupérées de la base de données. - dans ce cas, nous utilisons la fonction PHP mysql_fetch_array . J'ai ensuite attribué la valeur du champ EmailAddress à une variable que nous pourrons utiliser plus tard.

    Maintenant, nous définissons la session. Nous stockons le nom d'utilisateur et l'adresse e-mail de l'utilisateur dans la session, ainsi qu'une valeur spéciale pour nous permettre de savoir qu'il a été connecté à l'aide de ce formulaire. Une fois tout cela dit et fait, il sera ensuite redirigé vers la zone membre en utilisant. le META REFRESH dans le code.

    Alors, à quoi ressemble actuellement notre projet pour un utilisateur ?

    Super! Il est temps de passer à autre chose maintenant et de vous assurer que les internautes peuvent réellement accéder à votre site.

    Laissez les gens s'inscrire

    C'est bien beau d'avoir un formulaire de connexion sur votre site, mais maintenant nous devons permettre aux utilisateurs de pouvoir l'utiliser - nous devons créer un formulaire de connexion. Créez un fichier appelé register.php et insérez-y le code suivant.

    Système de gestion des utilisateurs (Tom Cameron pour NetTuts)

    Erreur"; écho "

    Désolé, ce nom d'utilisateur est pris. Veuillez revenir en arrière et réessayer.

    "; ) else ( $registerquery = mysql_query("INSERT INTO utilisateurs (nom d'utilisateur, mot de passe, adresse e-mail) VALUES("".$nom d'utilisateur."", "".$mot de passe.", "".$email."") " ); if ($registerquery) ( echo "

    Succès

    "; écho "

    Votre compte a été créé avec succès. S'il te plaît Cliquez ici pour vous identifier.

    "; ) sinon ( écho "

    Erreur

    "; écho "

    Désolé, votre inscription a échoué. Veuillez revenir en arrière et réessayer.

    "; ) ) ) autre ( ?>

    Registre

    Veuillez entrer vos coordonnées ci-dessous pour vous inscrire.




    Il n’y a donc pas grand chose de nouveau PHP que nous n’ayons pas encore appris dans cette section. Jetons simplement un coup d'œil rapide à cette requête SQL et voyons si nous pouvons comprendre ce qu'elle fait.

    $registerquery = mysql_query("INSERT INTO utilisateurs (Nom d'utilisateur, Mot de passe, Adresse e-mail) VALUES("".$nom d'utilisateur.", "".$mot de passe.", "".$email."")");

    Nous ajoutons donc ici l’utilisateur à notre base de données. Cette fois, au lieu de récupérer les données, nous les insérons ; nous spécifions donc d'abord dans quelles colonnes nous saisissons les données (n'oubliez pas, notre UserID augmentera automatiquement). Dans la zone VALUES(), nous lui dire quoi mettre dans chaque colonne ; dans ce cas, nos variables proviennent de l'entrée de l'utilisateur. Alors, essayons ; une fois que vous aurez créé un compte sur votre tout nouveau formulaire d'inscription, voici ce que vous verrez pour l'Espace Membre.

    Assurez-vous qu'ils peuvent se déconnecter

    Nous sommes presque à la fin de cette section, mais il nous reste encore une chose dont nous avons besoin avant d'avoir terminé ici : un moyen pour les utilisateurs de se déconnecter de leur compte. C'est très simple à faire (heureusement pour nous) ; créez un nouveau fichier nommé logout.php et entrez-y ce qui suit.

    En cela, nous réinitialisons d'abord notre tableau global $_SESSION, puis nous détruisons entièrement la session.

    Et c'est la fin de cette section et la fin du code PHP. Passons maintenant à notre dernière section.

    Étape 3 - Obtenez du style

    Je ne vais pas expliquer grand-chose dans cette section - si vous ne comprenez pas HTML/CSS, je vous recommande vivement l'un des nombreux excellents didacticiels de ce site Web pour vous aider à démarrer. Créez un nouveau fichier nommé style.css et entrez-y ce qui suit : cela stylisera toutes les pages que nous avons créées jusqu'à présent.

    * ( marge : 0 ; remplissage : 0 ; ) corps ( famille de polices : Trebuchet MS ; ) a ( couleur : #000 ; ) a : survol, a : actif, a : visité ( décoration de texte : aucun ; ) #main (largeur : 780 px ; marge : 0 auto ; marge supérieure : 50 px ; remplissage : 10 px ; bordure : 1 px solide #CCC ; couleur d'arrière-plan : #EEE ; ) jeu de champs de formulaire ( bordure : 0 ; ) jeu de champs de formulaire p br ( clair : gauche; ) étiquette ( marge en haut : 5 px ; affichage : bloc ; largeur : 100 px ; remplissage : 0 ; flotteur : gauche ; ) entrée ( famille de polices : Trebuchet MS ; bordure : 1 px solide #CCC ; marge en bas : 5 px ; couleur d'arrière-plan : #FFF ; remplissage : 2px ; ) entrée : survol ( bordure : 1px solide #222 ; couleur d'arrière-plan : #EEE ; )

    Jetons maintenant un coup d'œil à quelques captures d'écran de ce à quoi devrait ressembler notre projet final :

    Le formulaire de connexion.

    L'espace membre.

    Le formulaire d'inscription.

    Et enfin...

    Et c'est tout ! Vous disposez désormais d'un espace membre que vous pouvez utiliser sur votre site. Je vois beaucoup de gens secouer la tête et crier sur leurs écrans que cela ne leur sert à rien - vous avez raison. Mais ce que j'espère que tous les débutants en PHP ont appris, ce sont les bases de l'utilisation d'une base de données et de la manière d'utiliser des sessions pour stocker des informations. Les compétences essentielles pour créer n’importe quelle application Web.

    • Abonnez-vous au flux RSS NETTUTS pour plus de tutoriels et d'articles quotidiens sur le développement Web.
    Partager