Création d'un système d'enregistrement d'utilisateurs simple en PHP et MySQL. Obtenir un code d'activation et l'enregistrer

Reg.ru : domaines et hébergement

Le plus grand registraire et fournisseur d'hébergement en Russie.

Plus de 2 millions de noms de domaine en service.

Promotion, mail pour le domaine, solutions pour les entreprises.

Plus de 700 000 clients à travers le monde ont déjà fait leur choix.

*Passez la souris pour interrompre le défilement.

Retour en avant

Création d'un système d'enregistrement d'utilisateur simple en PHP et MySQL

La création d'un système d'enregistrement représente beaucoup de travail. Vous devez écrire du code qui valide les adresses e-mail, envoie un e-mail de confirmation d'inscription, valide le reste des champs du formulaire, et bien plus encore.

Et même après avoir écrit tout cela, les utilisateurs hésiteront à s'inscrire, car. cela demande un certain effort de leur part.

Dans ce didacticiel, nous allons créer un système de connexion très simple qui ne nécessite ni ne stocke aucun mot de passe ! Le résultat sera facile à modifier et à ajouter à un site PHP déjà existant. Vous voulez savoir comment ça marche ? Lire ci-dessous.



Voici comment notre système super simple fonctionnerait :

Nous combinerons le formulaire d'autorisation et l'enregistrement. Ce formulaire aura un champ pour saisir une adresse e-mail et un bouton d'inscription ;
- Lorsque vous remplissez le champ avec une adresse e-mail, en cliquant sur le bouton s'inscrire, un enregistrement concernant un nouvel utilisateur sera créé, mais uniquement si l'adresse e-mail saisie n'a pas été trouvée dans la base de données.

Après cela, un certain jeu de caractères unique aléatoire (jeton) est créé, qui est envoyé au courrier spécifié par l'utilisateur sous la forme d'un lien qui sera pertinent pendant 10 minutes ;
- En cliquant sur le lien, l'utilisateur accède à notre site Web. Le système détermine la présence du jeton et autorise l'utilisateur ;

Les avantages de cette approche :

Pas besoin de stocker des mots de passe et de valider des champs ;
- Pas besoin de récupération de mot de passe, de questions secrètes, etc. ;
- A partir du moment où un utilisateur s'est enregistré/connecté, vous pouvez toujours être sûr que cet utilisateur sera dans votre zone d'accès (que l'adresse e-mail est vraie) ;
- Processus d'inscription incroyablement simple ;

Défauts:

Sécurité du compte utilisateur. Si quelqu'un a accès au courrier de l'utilisateur, il peut se connecter.
- Le courrier électronique n'est pas sécurisé et peut être intercepté. Gardez à l'esprit que cette question est également pertinente dans le cas où le mot de passe a été oublié et doit être restauré, ou dans tout système d'autorisation qui n'utilise pas HTTPS pour le transfert de données (login / mot de passe) ;
- Tant que vous configurez le serveur de messagerie selon vos besoins, il est possible que les messages contenant des liens d'autorisation se retrouvent dans les spams ;

En comparant les avantages et les inconvénients de notre système, nous pouvons dire que le système a une grande facilité d'utilisation (commodité maximale pour l'utilisateur final) et, en même temps, a un indicateur de sécurité faible.

Il est donc proposé de l'utiliser pour les inscriptions sur les forums et services qui ne fonctionnent pas avec des informations importantes.

Comment utiliser ce système

Dans le cas où vous avez juste besoin d'utiliser le système pour autoriser les utilisateurs sur votre site, et que vous ne souhaitez pas démonter cette leçon, voici ce que vous devez faire :

Vous devez télécharger les fichiers sources joints à la leçon
- Recherchez le fichier tables.sql dans l'archive et importez-le dans votre base de données à l'aide de l'option d'importation de phpMyAdmin. Autre méthode : ouvrez ce fichier avec un éditeur de texte, copiez la requête SQL et exécutez-la ;
- Ouvrez includes/main.php et renseignez les paramètres de connexion à votre base de données (précisez l'utilisateur et le mot de passe de connexion à la base de données, ainsi que l'hébergeur et le nom de la base de données). Dans le même fichier, vous devez également spécifier une adresse e-mail qui sera utilisée comme adresse d'origine pour les messages envoyés par le système. Certains hôtes bloqueront les e-mails sortants jusqu'à ce que le formulaire affiche une adresse e-mail réelle générée à partir du panneau de configuration de l'hôte, alors entrez la véritable adresse ;
- Téléchargez tous les fichiers et actifs index.php , protected.php et inclut les dossiers via FTP sur votre hôte ;
- Ajoutez le code ci-dessous à chaque page PHP où vous souhaitez afficher un formulaire d'autorisation ;

Require_once "inclut/main.php" ; $user = nouvel utilisateur(); if(!$user->loggedIn())( redirect("index.php"); )
- Prêt!

Pour ceux qui sont intéressés par le fonctionnement de tout cela, lisez ci-dessous !

La première étape consiste à écrire le code HTM pour le formulaire d'autorisation. Ce code se trouve dans le fichier index.php. Ce fichier contient également le code PHP qui gère les données du formulaire et d'autres fonctionnalités utiles du système d'autorisation. Vous pouvez en savoir plus à ce sujet dans la section de révision du code PHP ci-dessous.

index.php

Tutoriel : Système d'enregistrement super simple avec PHP et MySQL Connexion ou inscription

Entrez votre adresse e-mail ci-dessus et nous vous enverrons
votre lien de connexion.

S'identifier S'enregistrer

Dans la section head (entre les balises et ), j'ai inclus les styles principaux (ils ne sont pas couverts dans ce tutoriel, vous pouvez donc les voir par vous-même. dossier assets/css/style.css). Avant la balise de fermeture, j'ai inclus la bibliothèque jQuery et le fichier script.js, que nous allons écrire et analyser ci-dessous.


Javascript

jQuery garde une trace de l'état du bouton "Inscription/Connexion" avec une fonction e.preventDefault() et envoie des requêtes AJAX. En fonction de la réponse du serveur, affiche un message particulier et détermine d'autres actions /

actifs/js/script.js

$(function())( var form = $("#login-register"); form.on("submit", function(e)( if(form.is(".loading, .loggedIn"))( return false ; ) var email = form.find("input").val(), messageHolder = form.find("span"); e.preventDefault(); $.post(this.action, (email: email), fonction (m)( if(m.error)( form.addClass("error"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("loggedIn"); messageHolder. text(m.message); ) )); )); $(document).ajaxStart(function())( form.addClass("loading"); )); $(document).ajaxComplete(function())( form. removeClass("loading"); )); ));

a été ajouté au formulaire pour afficher l'état actuel de la requête AJAX (cela a été rendu possible grâce aux méthodes ajaxStart()) Et ajaxComplet(), que vous pouvez trouver vers la fin du fichier).

Cette classe affiche un fichier gif animé en rotation (comme s'il nous indiquait que la demande était en cours de traitement), et agit également comme un indicateur pour empêcher le formulaire d'être resoumis (lorsque le bouton d'enregistrement a déjà été cliqué une fois). La classe .loggedIn est un autre indicateur - défini lors de l'envoi de l'e-mail. Cet indicateur bloque instantanément toute action ultérieure sur le formulaire.

Schéma de base de données

Notre système de journalisation incroyablement simple utilise 2 tables MySQL (le code SQL se trouve dans le fichier tables.sql). Le premier stocke des données sur les comptes d'utilisateurs. Le second stocke des informations sur le nombre de tentatives de connexion.


Schéma de table utilisateur.

Le système n'utilise pas de mots de passe, comme le montre le schéma. Sur celle-ci, vous pouvez également voir la colonne de jeton avec des jetons adjacents à la colonne token_validity. Le jeton est défini dès que l'utilisateur se connecte au système, configure son e-mail pour envoyer un message (un peu plus à ce sujet dans le bloc suivant). La colonne token_validity définit l'heure à 10 minutes plus tard, après quoi le jeton n'est plus valide.


Schéma de table qui comptabilise le nombre de tentatives d'autorisation.

Dans les deux tables, l'adresse IP est stockée sous une forme traitée, à l'aide de la fonction ip2long, dans un champ entier.

Nous pouvons maintenant écrire du code PHP. La fonctionnalité principale du système est assignée à la classe User.class.php, que vous pouvez voir ci-dessous.

Cette classe utilise activement idorm (docs), ces bibliothèques sont les outils minimum nécessaires pour travailler avec des bases de données. Il gère l'accès à la base de données, la génération et la validation des jetons. Il s'agit d'une interface simple qui permet de connecter facilement un système d'enregistrement à votre site s'il utilise PHP.

utilisateur.classe.php

Class User( // Private ORM case private $orm; /** * Trouver un utilisateur par token. Seuls les tokens valides sont pris en considération. Le token n'est généré que pendant 10 minutes à partir du moment où il a été créé * @param string $token . C'est celui que vous recherchez token * @return User. Renvoie la valeur de la fonction User */ public static function findByToken($token)( // trouve le token dans la base de données et s'assure que l'horodatage correct est défini $ result = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("token_validity > NOW()") ->find_one(); if(!$result)( return false; ) return new User($result); ) /** * Autoriser ou enregistrer un utilisateur * @param string $email.Adresse e-mail de l'utilisateur * @return User */ public static function loginOrRegister($email)( // Si un tel utilisateur existe déjà, renvoie la valeur de la fonction Utilisateur à partir de l'adresse e-mail spécifiée stockée dans la base de données if(User::exists($email))( return new User($email); ) // Sinon, crée un nouvel utilisateur dans la database et renvoie la valeur de la fonction User::create à partir de l'e-mail spécifié return User::create($email ); ) /** * Créer un nouvel utilisateur et l'enregistrer dans la base de données * @param string $email. Adresse e-mail de l'utilisateur * @return User */ private static function create($email)( // Enregistre un nouvel utilisateur et renvoie le résultat de la fonction User à partir de ces valeurs $result = ORM::for_table("reg_users")- >create(); $result->email = $email; $result->save(); return new User($result); ) /** * Vérifie si un tel utilisateur existe dans la base de données et renvoie la valeur booléenne de variable * @param chaîne $email. Adresse e-mail de l'utilisateur * @return boolean */ public static function exists($email)( // L'utilisateur existe-t-il dans la base de données ? $result = ORM::for_table("reg_users") ->where("email", $email ) ->count(); return $result == 1; ) /** * Créer un nouvel objet utilisateur * @param instance $param ORM , id, email ou 0 * @return User */ public function __construct($param = null) ( if($param instanceof ORM)( // Vérification ORM réussie $this->orm = $param; ) else if(is_string($param))( // Vérification des e-mails réussie $this->orm = ORM :: for_table ("reg_users") ->where("email", $param) ->find_one(); ) else( $id = 0; if(is_numeric($param))( // l'identifiant de l'utilisateur reçoit la valeur de $ param variable $id = $param; ) else if(isset($_SESSION["loginid"]))( // Sinon voir session $id = $_SESSION["loginid"]; ) $this->orm = ORM :: for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * Générer un nouveau jeton d'autorisation SHA1, l'écrire dans la base de données et renvoyer sa valeur * @return string * / public function generateToken( )( // Génère un jeton pour un utilisateur autorisé et l'enregistre dans la base de données $token = sha1($this->email.time().rand(0, 1000000)); // Stocke le jeton dans la base de données // Et le marque comme valide uniquement pour les 10 prochaines minutes $this->orm->set("token", $token); $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); retourne $token ; ) /** * Autoriser l'utilisateur * @return void */ public function login()() // Marquer l'utilisateur comme connecté $_SESSION["loginid"] = $this->orm->id; // Mettre à jour la valeur du champ de base de données last_login $this->orm->set_expr("last_login", "NOW()"); $this->orm->save(); ) /** * Détruit la session et déconnecte l'utilisateur * @return void */ public function logout ()( $_SESSION = array(); unset($_SESSION); ) /** * Vérifie si l'utilisateur est connecté * @return boolean */ public function logIn())( return isset($ this->orm->id) && $_SESSION["loginid"] == $this->orm->id; ) /** * Vérifie si l'utilisateur est un administrateur * @return boolean */ public function isAdmin() ( return $this->rank() = = "administrator"; ) /** * Recherche le type d'utilisateur, peut être administrateur ou normal * @return string */ fonction publique rank())( if($this->orm- >rank == 1)( return "administrator "; ) return "regular"; ) /** * Une méthode qui vous permet d'obtenir les informations privées de l'utilisateur *comme propriétés de l'objet User * @param string $key Le nom de la propriété qui obtient l'accès * @return mixed */ public function __get($key)( if(isset($this->orm->$key))( return $this->orm->$key; ) renvoie null ; ) )

Les jetons sont générés à l'aide de l'algorithme SHA1 et stockés dans la base de données. J'utilise les fonctions de temps de MySQL pour définir une limite d'expiration de jeton de 10 minutes.

Lorsque le jeton passe la procédure de validation, nous indiquons directement au gestionnaire que nous ne considérons que les jetons qui n'ont pas encore expiré, stockés dans la colonne token_validity.

Veuillez noter que j'utilise la méthode magique __obtenir docs à la fin du fichier pour intercepter l'accès aux propriétés de l'objet User.

Cela permet d'accéder aux informations stockées dans la base de données à l'aide de $user->email, $user->token et d'autres propriétés. Dans l'extrait de code suivant, nous verrons comment utiliser ces classes à titre d'exemple.


Page protégée

Un autre fichier qui stocke les fonctionnalités utiles et nécessaires est le fichier functions.php. Il existe plusieurs soi-disant assistants ici - des fonctions d'assistance qui vous permettent de créer un code plus propre et plus lisible dans d'autres fichiers.

fonctions.php

Function send_email($from, $to, $subject, $message)( // Helper qui envoie un email $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text /plain; charset=utf-8" . "\r\n"; $headers .= "From: ".$from . "\r\n"; return mail($to, $subject, $message, $headers ); ) function get_page_url()() // Récupère l'URL du fichier PHP $url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://".$_SERVER [ "SERVER_NAME"] ; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"] ; ) else( $url. = $_SERVER["PATH_INFO"] ; ) return $url ; ) function rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Nombre de tentatives de connexion au cours de la dernière heure à cette adresse IP $count_hour = ORM : :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count(); // Nombre de tentatives de connexion au cours des 10 dernières minutes à cette adresse IP $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long( $ ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("Trop de tentatives de connexion!"); ) ) function rate_limit_tick($ip, $email)( // Créer une nouvelle entrée dans le tableau compter le nombre de tentatives de connexion $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip) ); $login_attempt->save(); ) function redirect($url)( header("Location: $url"); exit; )

Les fonctions rate_limit Et rate_limit_tick surveiller le nombre de tentatives d'autorisation pour la période écoulée depuis la première tentative. La tentative de connexion est enregistrée dans la base de données dans la colonne reg_login_attempt. Ces fonctions sont appelées lorsque les données du formulaire sont traitées et soumises, comme vous pouvez le voir dans l'extrait de code suivant.

Le code ci-dessous est extrait du fichier index.php et gère la soumission du formulaire. Il renvoie une réponse JSON, qui est à son tour traitée par jQuery dans le fichier assets/js/script.js que nous avons déjà couvert.

index.php

Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Sort un header JSON header("Content-type: application/json"); // Cette adresse e-mail est-elle valide si (!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))( throw new Exception("Please enter a valid email."); ) // Check. Est-ce que le utilisateur autorisé à se connecter, a-t-il dépassé le nombre de connexions autorisées ? (fichier functions.php pour plus d'informations) rate_limit($_SERVER["REMOTE_ADDR"]); // Enregistrer cette tentative de connexion rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["email"]); // Envoie un e-mail à l'utilisateur $message = ""; $email = $_POST["email"]; $subject = "Votre lien de connexion"; if(!User :: exists($email) )( $subject = "Merci pour votre inscription!"; $message = "Merci pour votre inscription sur notre site !\n\n"; ) // Tentative d'autorisation ou d'enregistrement d'un utilisateur $user = Utilisateur ::loginOrRegister($_POST[ "email"]);$message.= "Vous pouvez vous connecter depuis cette URL :\n" ; $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n" ; $message.= "Le lien expirera automatiquement après 10 minutes."; $result = send_email($fromEmail, $_POST["email"], $subject, $message); if(!$result)( throw new Exception("Une erreur s'est produite lors de l'envoi de votre e-mail. Veuillez réessayer."); ) die(json_encode(array("message" => "Merci ! Nous avons envoyé un lien dans votre boîte de réception. Vérifiez également votre dossier spam.")))); ) ) catch(Exception $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage( ) ))); )

Après une autorisation/inscription réussie, le code ci-dessus enverra à l'utilisateur un lien d'autorisation. Le jeton devient disponible car il est passé en variable dans le lien généré par la méthode $_GET avec marqueur tkn

index.php

If(isset($_GET["tkn"]))( // Ce jeton est-il valide pour l'autorisation ? $user = User::findByToken($_GET["tkn"]); if($user)( // Oui , est. Rediriger vers la page protégée $user->login(); redirect("protected.php"); ) // Non, le jeton n'est pas valide. Rediriger vers la page avec le formulaire de connexion/inscription redirect("index. php "); )

$user->login()

créera les variables nécessaires à la session, de sorte que l'utilisateur, consultant les pages suivantes du site, restera autorisé à tout moment.

De même, le traitement de la fonction de sortie du système est organisé.

index.php

If(isset($_GET["logout"]))( $user = new User(); if($user->loggedIn())( $user->logout(); ) redirect("index.php") ; )

A la fin du code, j'ai de nouveau redirigé vers index.php, donc le paramètre ?déconnexion=1 passé par URL n'est pas obligatoire.

Notre fichier index.php nécessite des fichiers supplémentaires. protection - nous ne voulons pas que les personnes qui se sont déjà connectées au système voient à nouveau le formulaire d'inscription. A ces fins, nous utilisons la méthode $user->connecté().

index.php

$user = nouvel utilisateur(); if($user->loggedIn())( redirect("protected.php"); )

Enfin, voici un morceau de code qui vous permet de protéger les pages de votre site et de le rendre disponible uniquement après autorisation.

protégé.php

// Pour sécuriser chaque page de votre site, incluez un fichier // main.php et créez un nouvel objet User. C'est aussi simple que ça ! require_once "inclut/main.php" ; $user = nouvel utilisateur(); if(!$user->loggedIn())( redirect("index.php"); )

Après cette vérification, vous pouvez être sûr que l'utilisateur a été autorisé avec succès. Vous pouvez également accéder aux informations stockées dans la base de données à l'aide des propriétés de l'objet $utilisateur. Pour afficher l'adresse e-mail et l'état de l'utilisateur, utilisez ce code :

echo "Votre email : ".$user->email; echo "Votre classement : ".$user->rank();

Méthode rang() est utilisé ici car les nombres sont généralement stockés dans la base de données (0 pour un utilisateur normal, 1 pour un administrateur) et nous devons convertir ces données dans les statuts auxquels elles appartiennent, ce à quoi cette méthode nous aide.

Pour faire d'un utilisateur régulier un administrateur, modifiez simplement l'entrée de l'utilisateur via phpMyAdmin (ou tout autre programme qui vous permet de gérer des bases de données). Le statut d'administrateur ne donne aucun privilège, dans cet exemple, la page affichera que vous êtes un administrateur - et c'est tout.

Mais que faire avec cela - cela reste à votre discrétion, vous pouvez écrire et composer vous-même du code qui définit certains privilèges et opportunités pour les administrateurs.

Avaient fini!

Avec cette forme incroyablement super quasi simple, nous avons terminé ! Vous pouvez l'utiliser dans vos sites PHP, c'est assez simple. Vous pouvez également le modifier vous-même et le faire comme vous le souhaitez.

Le matériel a été préparé par Denis Malyshok spécifiquement pour le site du site

PS Vous souhaitez aller plus loin dans la maîtrise de PHP et de la POO ? Jetez un œil à des didacticiels premium sur divers aspects de la création de sites Web, y compris la programmation PHP, ainsi qu'à un cours gratuit sur la création de votre système PHP CMS à partir de zéro à l'aide de la POO :

Vous avez aimé le matériel et vous voulez remercier?
Partagez simplement avec vos amis et collègues!


.
Dans cet article, nous ajouterons la vérification de l'adresse e-mail, la connexion automatique et la récupération du mot de passe oublié à notre inscription. Avant de poursuivre la leçon, assurez-vous que la fonction mail() est en cours d'exécution sur votre serveur.

Commençons par ajouter des champs à la table des utilisateurs. Nous avons besoin d'un champ pour stocker l'adresse e-mail, un champ pour le statut de l'utilisateur (0 - inactif, 1 - activé) et un champ avec la date d'enregistrement.


Votre e-mail * :



Ensuite, vous devez corriger save_user.php en ajoutant une vérification de l'exactitude de l'adresse e-mail et en envoyant un e-mail pour confirmer l'inscription. L'email contient un lien avec deux variables passées par la méthode get : le login et le code généré, unique pour chaque utilisateur. Nous avons besoin du code pour que l'utilisateur ne puisse pas activer son compte sans une lettre, et cela nous donnera la certitude que l'adresse e-mail saisie lui appartient vraiment. Ajoutons le code suivant, après avoir extrait les données envoyées des variables globales :

Si (isset($_POST["email"])) ( $email = $_POST["email"]; if ($email == "") ( unset($email);) )
si (vide($login) ou vide($mot de passe)ou vide($code) ou vide($email))
// ajouter une variable avec l'adresse e-mail
//si l'utilisateur n'a pas entré de login ou de mot de passe, alors nous émettons une erreur et arrêtons le script
{
exit("Vous n'avez pas saisi toutes les informations, revenez en arrière et remplissez tous les champs !"); // arrête l'exécution du script
}
if (!preg_match("/+@+\.(2,3)/i", $email)) //vérifier l'adresse e-mail avec les expressions régulières pour l'exactitude
(quitter ("E-mail saisi invalide !");)

Dans la demande d'ajout d'un nouvel utilisateur, vous devez également ajouter la date d'inscription. Si les données sont insérées avec succès dans la base de données et que l'utilisateur est enregistré, vous devez alors envoyer un message à l'adresse saisie :

// s'il n'y en a pas, enregistrez les données
$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,date) VALUES("$login","$password","$avatar","$email",NOW())");
// Vérifie s'il y a des erreurs
si ($result2=="TRUE")
{
$result3 = mysql_query ("SELECT id FROM users WHERE login="$login"",$db);//récupérer l'identifiant de l'utilisateur. Grâce à lui, nous aurons un code d'activation unique, car il ne peut y avoir deux identifiants identiques.
$myrow3 = mysql_fetch_array($result3);
$activation = md5($myrow3["id"]).md5($login);// code d'activation du compte . Chiffrez l'identifiant et connectez-vous à l'aide de la fonction md5. Il est peu probable que l'utilisateur puisse sélectionner manuellement une telle combinaison via la barre d'adresse.
$sujet = "Confirmation d'inscription";//sujet du message
$message = "Bonjour ! Merci de vous être enregistré sur citename.ru\nVotre identifiant : ".$login."\n
Suivez le lien pour activer votre compte :\nhttp://localhost/test3/activation.php?login=".$login."&code=".$activation."\nCordialement,\n
Administration citename.ru";//contenu du message
mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");//envoyer un message

Echo "Vous avez reçu un email avec un lien pour confirmer votre inscription. Attention ! Le lien est valable 1h. Page principale" ; //parler de l'e-mail envoyé à l'utilisateur
}

Message envoyé! L'utilisateur va maintenant l'ouvrir et suivre le lien spécifié vers la page qui vérifiera le code d'activation. Après s'être assuré que le code est correct, nous confirmons l'enregistrement en changeant la valeur du champ d'activation dans la base de données de "0" à "1".

Créer un fichier activation.php

L'adresse e-mail a été confirmée, maintenant que nous savons que cette adresse appartient à cet utilisateur, il sera possible de lui envoyer un mot de passe si l'utilisateur l'oublie, ou d'autres notifications. Mais quelle est la différence entre les utilisateurs activés et ceux non activés ? Les deux peuvent entrer sur le site, par conséquent, nous devons restreindre l'accès aux non-activés. Ouvrons le fichier testreg. php et ajoutez une condition supplémentaire à la requête de la base de données :

$result = mysql_query("SELECT * FROM utilisateurs WHERE login="$login" AND password="$password" AND activation="1"",$db); //récupérer toutes les données sur l'utilisateur avec le login saisi à partir de la base de données
//nous avons ajouté "AND activation="1"", c'est-à-dire que l'utilisateur ne sera recherché que parmi ceux qui sont activés. Il est souhaitable d'ajouter cette condition à d'autres contrôles de données utilisateur similaires.

Si l'utilisateur oublie le mot de passe, dans un tel cas, vous devez afficher un lien sur la page principale par lequel il peut le restaurer, et vous pouvez également cocher immédiatement une case pour la connexion automatique.

Connexion automatique.






Enregistrer


Mot de passe oublié?

Le lien est là, mais le fichier n'y est pas. Écrivons send _ pass . php. Dans celui-ci, nous demanderons à l'utilisateur un nom d'utilisateur et une adresse e-mail. Si l'e-mail et le login saisis sont dans la base de données, nous lui enverrons un nouveau mot de passe si l'utilisateur a oublié l'ancien, car nous nous sommes assurés lors de l'inscription que l'adresse e-mail est valide.

Ensuite, nous ferons une connexion automatique. Cela fonctionnera comme ceci : lors d'une connexion réussie avec la case à cocher enfoncée, auto = "oui" sera entré dans le cookie. Si le serveur voit que auto = "yes" dans le navigateur, alors il démarrera la session, et prendra les variables au même endroit, dans le cookie. Ensuite, il y a une vérification des sessions en cours d'exécution dans la base de données.

Ouvrons testreg . php et ajoutez le code après une connexion réussie :

Si (isset($_POST["enregistrer"]))(
//Si l'utilisateur souhaite que ses données soient enregistrées pour une connexion ultérieure, nous les enregistrons dans les cookies de son navigateur

setcookie("id", $myrow["id"], time()+9999999);)
if (isset($_POST["autohod"]))(
//Si l'utilisateur souhaite se connecter automatiquement au site
setcookie("auto", "oui", temps()+9999999);
setcookie("connexion", $_POST["connexion"], temps()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow["id"], time()+9999999);)

Vous devez maintenant démarrer la session au bon endroit, s'il y a une connexion automatique. Ouvrons index.php et écrivons au tout début de la page :

FICHIER DE CONFIG.PHP

moins/reg/?mode=auth">Connexion



  • Avoir des questions?

    Signaler une faute de frappe

    Texte à envoyer à nos rédacteurs :