Télécharger
Noter:

Ajouté le 29/11/2018
Visionné 7903 fois
4/5

Script Espace membre PHP

Description

Espace membre simple mais complet, comprenant:
- Une page d'accueil avec le choix d'aller sur la page d'inscription ou de connexion
- Une page d'inscription
- Une page de connexion
- Une page espace membre
- Un système de modification du compte (mot de passe et adresse mail)
- La possibilité de supprimer son compte
- Une page de déconnexion


J'ai mis plusieurs cas de figure pour que vous puissiez comprendre un peu comment traiter différentes informations en PHP


Vous devez créer la table SQL "membres", avec le code suivant:

CREATE TABLE `membres` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`pseudo` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`mdp` char(32) COLLATE utf8_unicode_ci NOT NULL,
`mail` varchar(50) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Ou importer le fichier membres.sql (contenu dans le pack suivant) dans votre phpMyAdmin

Téléchargez le script: C2script-Espace-membre-2018.zip

Ensuite, placez les fichiers contenu dans le dossier là où vous le souhaitez sur votre site.

Contenu des pages:


<!DOCTYPE HTML>
<html>
<head>
<title>Script espace membre</title>
</head>
<body>
<h1>Bienvenue!</h1>
<p>Choisissez une option:</p>
<a href="inscription.php">S'inscrire</a>
<br>
<a href="connexion.php">Se connecter</a>
</body>
</html>

<?php

/*************************
* Page: inscription.php
* Page encodée en UTF-8
**************************/

?><!DOCTYPE HTML>
<html>
<head>
<title>Script espace membre</title>
</head>
<body>
<h1>S'inscrire</h1>
<a href="./">Retour à l'accueil</a>
<br>
<?php
//si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué)
if(isset($_POST['valider'])){
//vérifie si tous les champs sont bien pris en compte:
//on peut combiner isset() pour valider plusieurs champs à la fois
if(!isset($_POST['pseudo'],$_POST['mdp'],$_POST['mail'])){
echo "Un des champs n'est pas reconnu.";
} else {
//on vérifie le contenu de tous les champs, savoir si ils sont correctement remplis avec les types de valeurs qu'on souhaitent qu'ils aient
if(!preg_match("#^[a-z0-9]{1,15}$#",$_POST['pseudo'])){
//la preg_match définie: ^ et $ pour dire commence et termine par notre masque;
//notre masque défini a-z pour toutes les lettres en minuscules et 0-9 pour tous les chiffres;
//d'une longueur de 1 min et 15 max
echo "Le pseudo est incorrect, doit contenir seulement des lettres minuscules et/ou des chiffres, d'une longueur minimum de 1 caractère et de 15 maximum.";
//Il est préférable que le pseudo soit en lettres minuscules ceci afin d'être unique, par exemple si le choix peut être avec majuscule, deux membres pourrait avoir le même pseudo, par exemple Admin et admin et ce n'est pas ce que l'on veut.
} else {
//on vérifie le mot de passe:
if(strlen($_POST['mdp'])<5 or strlen($_POST['mdp'])>15){
echo "Le mot de passe doit être d'une longueur minimum de 5 caractères et de 15 maximum.";
} else {
//on vérifie que l'adresse est correcte:
if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,30}$#i",$_POST['mail'])){
//cette preg_match est un petit peu complexe, je vous invite à regarder l'explication détaillée sur mon site c2script.com
echo "L'adresse mail est incorrecte.";
//normalement l'input type="email" vérifie que l'adresse mail soit correcte avant d'envoyer le formulaire mais il faut toujours être prudent et vérifier côté serveur (ici) avant de valider définitivement
} else {
if(strlen($_POST['mail'])<7 or strlen($_POST['mail'])>50){
echo "Le mail doit être d'une longueur minimum de 7 caractères et de 50 maximum.";
} else {
//tout est précisés correctement, on inscrit le membre dans la base de données si le pseudo n'est pas déjà utilisé par un autre utilisateur
//d'abord il faut créer une connexion à la base de données dans laquelle on souhaite l'insérer:
$mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base'
if(!$mysqli) {
echo "Erreur connexion BDD";
//Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante:
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
} else {
$Pseudo=htmlentities($_POST['pseudo'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format
$Mdp=md5($_POST['mdp']);// la fonction md5() convertie une chaine de caractères en chaine de 32 caractères d'après un algorithme PHP, cf doc
$Mail=htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8");
if(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'"))!=0){//si mysqli_num_rows retourne pas 0
echo "Ce pseudo est déjà utilisé par un autre membre, veuillez en choisir un autre svp.";
} else {
//insertion du membre dans la base de données:
if(mysqli_query($mysqli,"INSERT INTO membres SET pseudo='$Pseudo', mdp='$Mdp', mail='$Mail'")){
echo "Inscrit avec succès! Vous pouvez vous connecter: <a href='connexion.php'>Cliquez ici</a>.";
$TraitementFini=true;//pour cacher le formulaire
} else {
echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste.";
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
}
}
}
}
}
}
}
}
}
if(!isset($TraitementFini)){//quand le membre sera inscrit, on définira cette variable afin de cacher le formulaire
?>
<br>
<p>Remplissez le formulaire ci-dessous pour vous inscrire:</p>
<form method="post" action="inscription.php">
<input type="text" name="pseudo" placeholder="Votre pseudo..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide -->
<input type="password" name="mdp" placeholder="Votre mot de passe..." required>
<input type="email" name="mail" placeholder="Votre mail..." required>
<input type="submit" name="valider" value="Cliquez ici pour envoyer le formulaire">
</form>
<?php
}
?>
</body>
</html>

<?php

/*************************
* Page: connexion.php
* Page encodée en UTF-8
**************************/

session_start();//session_start() combiné à $_SESSION (voir en fin de traitement du formulaire) nous permettra de garder le pseudo en sauvegarde pendant qu'il est connecté, si vous voulez que sur une page, le pseudo soit (ou tout autre variable sauvegardée avec $_SESSION) soit retransmis, mettez session_start() au début de votre fichier PHP, comme ici

?><!DOCTYPE HTML>
<html>
<head>
<title>Script espace membre</title>
</head>
<body>
<h1>Se connecter</h1>
<a href="./">Retour à l'accueil</a>
<br>
<?php
//si une session est déjà "isset" avec ce visiteur, on l'informe:
if(isset($_SESSION['pseudo'])){
echo "Vous êtes déjà connecté, vous pouvez accéder à l'espace membre en <a href='espace-membre.php'>cliquant ici</a>.";
} else {
//si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué)
if(isset($_POST['valider'])){
//vérifie si tous les champs sont bien pris en compte:
if(!isset($_POST['pseudo'],$_POST['mdp'])){
echo "Un des champs n'est pas reconnu.";
} else {
//tous les champs sont précisés, on regarde si le membre est inscrit dans la bdd:
//d'abord il faut créer une connexion à la base de données dans laquelle on souhaite regarder:
$mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base'
if(!$mysqli) {
echo "Erreur connexion BDD";
//Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante:
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
} else {
//on défini nos variables:
$Pseudo=htmlentities($_POST['pseudo'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format
$Mdp=md5($_POST['mdp']);
$req=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo' AND mdp='$Mdp'");
//on regarde si le membre est inscrit dans la bdd:
if(mysqli_num_rows($req)!=1){
echo "Pseudo ou mot de passe incorrect.";
} else {
//pseudo et mot de passe sont trouvé sur une même colonne, on ouvre une session:
$_SESSION['pseudo']=$Pseudo;
echo "Vous êtes connecté avec succès $Pseudo! Vous pouvez accéder à l'espace membre en <a href='espace-membre.php'>cliquant ici</a>.";
$TraitementFini=true;//pour cacher le formulaire
}
}
}
}
if(!isset($TraitementFini)){//quand le membre sera connecté, on définira cette variable afin de cacher le formulaire
?>
<br>
<p>Remplissez le formulaire ci-dessous pour vous connecter:</p>
<form method="post" action="connexion.php">
<input type="text" name="pseudo" placeholder="Votre pseudo..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide -->
<input type="password" name="mdp" placeholder="Votre mot de passe..." required>
<input type="submit" name="valider" value="Connexion!">
</form>
<?php
}
}
?>
</body>
</html>

<?php

/*************************
* Page: espace-membre.php
* Page encodée en UTF-8
**************************/

session_start();//session_start() combiné à $_SESSION (voir en fin de traitement du formulaire) nous permettra de garder le pseudo en sauvegarde pendant qu'il est connecté, si vous voulez que sur une page, le pseudo soit (ou tout autre variable sauvegardée avec $_SESSION) soit retransmis, mettez session_start() au début de votre fichier PHP, comme ici
if(!isset($_SESSION['pseudo'])){
header("Refresh: 5; url=connexion.php");//redirection vers le formulaire de connexion dans 5 secondes
echo "Vous devez vous connecter pour accéder à l'espace membre.<br><br><i>Redirection en cours, vers la page de connexion...</i>";
exit(0);//on arrête l'éxécution du reste de la page avec exit, si le membre n'est pas connecté
}
$Pseudo=$_SESSION['pseudo'];//on défini la variable $Pseudo (Plus simple à écrire que $_SESSION['pseudo']) pour pouvoir l'utiliser plus bas dans la page

//on se connecte une fois pour toutes les actions possible de cette page:
$mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base'
if(!$mysqli) {
echo "Erreur connexion BDD";
//Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante:
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
exit(0);
}

//on récupère les infos du membre si on souhaite les afficher dans la page:
$req=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo'");
$info=mysqli_fetch_assoc($req);
?><!DOCTYPE HTML>
<html>
<head>
<title>Script espace membre</title>
</head>
<body>
<h1>Espace membre</h1>
Pour modifier vos informations, <a href="espace-membre.php?modifier">cliquez ici</a>
<br>
Pour supprimer votre compte, <a href="espace-membre.php?supprimer">cliquez ici</a>
<br>
Pour vous déconnecter, <a href="deconnexion.php">cliquez ici</a>
<hr/>
<?php
//si "?modifier" est dans l'URL:
if(isset($_GET['supprimer'])){
if($_GET['supprimer']!="ok"){
echo "<p>Êtes-vous sûr de vouloir supprimer votre compte définitivement?</p>
<br>
<a href='espace-membre.php?supprimer=ok' style='color:red'>OUI</a> - <a href='espace-membre.php' style='color:green'>NON</a>";
} else {
//on supprime le membre avec "DELETE"
if(mysqli_query($mysqli,"DELETE FROM membres WHERE pseudo='$Pseudo'")){
echo "Votre compte vient d'être supprimé définitivement.";
unset($_SESSION['pseudo']);//on tue la session pseudo avec unset()
} else {
echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste.";
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
}
}
}
//si "?modifier" est dans l'URL:
if(isset($_GET['modifier'])){
?>
<h1>Modification du compte</h1>
Choisissez une option:
<p>
<a href="espace-membre.php?modifier=mail">Modifier l'adresse mail</a>
<br>
<a href="espace-membre.php?modifier=mdp">Modifier le mot de passe</a>
</p>
<hr/>
<?php
if($_GET['modifier']=="mail"){
echo "<p>Renseignez le formulaire ci-dessous pour modifier vos informations:</p>";
if(isset($_POST['valider'])){
if(!isset($_POST['mail'])){
echo "Le champ mail n'est pas reconnu.";
} else {
if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,30}$#i",$_POST['mail'])){
//cette preg_match est un petit peu complexe, je vous invite à regarder l'explication détaillée sur mon site c2script.com
echo "L'adresse mail est incorrecte.";
//normalement l'input type="email" vérifie que l'adresse mail soit correcte avant d'envoyer le formulaire mais il faut toujours être prudent et vérifier côté serveur (ici) avant de valider définitivement
} else {
//tout est OK, on met à jours son compte dans la base de données:
if(mysqli_query($mysqli,"UPDATE membres SET mail='".htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8")."' WHERE pseudo='$Pseudo'")){
echo "Adresse mail {$_POST['mail']} modifiée avec succès!";
$TraitementFini=true;//pour cacher le formulaire
} else {
echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste.";
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
}
}
}
}
if(!isset($TraitementFini)){
?>
<br>
<form method="post" action="espace-membre.php?modifier=mail">
<input type="email" name="mail" value="<?php echo $info['mail']; ?>" required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide -->
<input type="submit" name="valider" value="Valider la modification">
</form>
<?php
}
} elseif($_GET['modifier']=="mdp"){
echo "<p>Renseignez le formulaire ci-dessous pour modifier vos informations:</p>";
//si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué)
if(isset($_POST['valider'])){
//vérifie si tous les champs sont bien pris en compte:
if(!isset($_POST['nouveau_mdp'],$_POST['confirmer_mdp'],$_POST['mdp'])){
echo "Un des champs n'est pas reconnu.";
} else {
if($_POST['nouveau_mdp']!=$_POST['confirmer_mdp']){
echo "Les mots de passe ne correspondent pas.";
} else {
$Mdp=md5($_POST['mdp']);
$NouveauMdp=md5($_POST['nouveau_mdp']);
$req=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo' AND mdp='$Mdp'");
//on regarde si le mot de passe correspond à son compte:
if(mysqli_num_rows($req)!=1){
echo "Mot de passe actuel incorrect.";
} else {
//tout est OK, on met à jours son compte dans la base de données:
if(mysqli_query($mysqli,"UPDATE membres SET mdp='$NouveauMdp' WHERE pseudo='$Pseudo'")){
echo "Mot de passe modifié avec succès!";
$TraitementFini=true;//pour cacher le formulaire
} else {
echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste.";
//echo "<br>Erreur retournée: ".mysqli_error($mysqli);
}
}
}
}
}
if(!isset($TraitementFini)){
?>
<br>
<form method="post" action="espace-membre.php?modifier=mdp">
<input type="password" name="nouveau_mdp" placeholder="Nouveau mot de passe..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide -->
<input type="password" name="confirmer_mdp" placeholder="Confirmer nouveau passe..." required>
<input type="password" name="mdp" placeholder="Votre mot de passe actuel..." required>
<input type="submit" name="valider" value="Valider la modification">
</form>
<?php
}
}
}
?>
</body>
</html>


<?php

/*************************
* Page: deconnexion.php
* Page encodée en UTF-8
**************************/

session_start();//session_start() nous permet ici d'appeler toutes les sessions actives de l'utilisateur, enregistrées avec $_SESSION['nom_que_vous_souhaitez']

unset($_SESSION['pseudo']);//unset() détruit une variable, si vous enregistrez aussi l'id du membre (par exemple) vous pouvez comme avec isset(), mettre plusieurs variables séparés par une virgule:
//unset($_SESSION['pseudo'],$_SESSION['id']);

header("Refresh: 5; url=./");//redirection vers le formulaire de connexion dans 5 secondes
echo "Vous avez été correctement déconnecté du site.<br><br><i>Redirection en cours, vers la page d'accueil...</i>";

?>


Addons disponibles:
- Récupération du mot de passe

Commentaires

filou le 07 Décembre 2018 à 18:19

Bonjour

Merci pour le tuto, est-il possible de rajouter lorsqu'un visiteur s'inscrit un lien de validation par mail, afin de valider son mail ?

Cordialement

admin le 07 Décembre 2018 à 20:31

Bonjour, oui, tout est possible mais j'ai voulu rester le plus simple possible et proposer "la base" d"un espace membre

wags le 22 Septembre 2019 à 11:43

Bonjour,

Merci pour ton travail.
Par contre, comment fait on pour paramétrer la connexion à notre base ?

Merci

admin le 23 Septembre 2019 à 11:42

Bonjour, merci, pour vous connecter à votre base il faut renseigner vos infos de connexion SQL à ces lignes (dans chaque pas où il y a une connexion SQL, une solution est aussi d'inclure une page de connexion là où le script se connecte pour ne pas réécrire à chaque fois les mot de passe et autres infos de connexion):

$mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base'

wed le 24 Octobre 2019 à 08:01

Merci d'avoir partagé ce code très simple et fonctionnel

christophe le 02 Février 2020 à 15:25

Mille merci, clair et super fonctionnel, facile à intégrer !

Ludovic75 le 23 Avril 2020 à 16:21

Bonjour et merci pour ce code qui m'aide beaucoup dans l'exercice de la création de mon 1er site internet.
Je me heurte cependant à un problème concernant la ligne de code pour vérifier que le pseudo n'est pas déjà utilisé.
Je n'arrive pas à adapter le code mysqli en PDO. Aurais-tu une idée sur comment faire?
Merci d'avance

admin le 23 Avril 2020 à 16:38

Bonjour, merci également,

je travail seulement en procédural, désolé.

Ludovic75 le 24 Avril 2020 à 09:30

Bonjour, merci pour votre réponse.
Bonne journée

marisson le 01 Mai 2020 à 17:47

Bonjour,
Moi sa me mets
"Erreur connexion BDD alors que tous est juste ou j'ai mal fait un truc ?

admin le 01 Mai 2020 à 20:00

Bonjour, c'est que vous avez mal renseigné vos logins SQL certainement.

Déboguez en affichant l'erreur mysql avec

echo mysqli_connect_error()

tony le 03 Mai 2020 à 12:49

Bonjour, je suis entrain de mettre en oeuvre les codes que vous proposez. Je crois vraiment que tout ceci est bien fait. j'ai un soucis pour accéder à la BDD membres. Voici le message reçu:Warning: mysqli_connect(): (HY000/1049): Unknown database 'membres' in C:\www\inscription.php on line 48
S'il vous plait, ou doit se situer cette BDD? Merci pour votre aide.

tony le 04 Mai 2020 à 10:51

c'est fait mais rien ne change. Voici l'arborescence:
-Nouvelle base de données
-Information_schema
-mysql
-performance_schema
-phpmyadmin...Nouvelle table
...membres
...pma
(je vois ceci après avoir exécuté mysql dans Xampp. Mais ça ne marche toujours pas. Meme message: Warning: mysqli_connect(): (HY000/1049): Unknown database 'membres' in C:\www\inscription.php on line 48
Erreur connexion BDD

admin le 04 Mai 2020 à 11:45

lors de la connexion, il vous faut bien renseigner les champs suivants:

$mysqli=mysqli_connect('localhost','root','','nom_de_la_base_de_donnees');//'serveur','nom d'utilisateur','pass','nom de la base'

tony le 04 Mai 2020 à 12:22

A la ligne 48, voici ce qui écrit:
$mysqli=mysqli_connect('localhost','root','','membres');

admin le 04 Mai 2020 à 12:32

vous devez mettre le nom de la base, pas de la table

antony le 04 Mai 2020 à 13:03

Super ça fonctionne.
Grand merci.
Je n'hésiterais pas à revenir vers vous en cas de besoin.
Bon confinement.

admin le 04 Mai 2020 à 13:48

Avec plaisir!

Coco le 21 Juin 2020 à 13:38

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\wamp64\www\espace membre 3\espace-membre\inscription.php on line 57.

Bonjour, j'ai cette erreur et je ne l'a comprend pas, pouvez vous m'aider

admin le 22 Juin 2020 à 07:01

Vos informations de connexion SQL sont peut être pas bonnes.

lili le 14 Juillet 2020 à 19:07

mais quand je veux cree un compte je remplie tout puis je clique envoyer et ça m'affiche erreur BDD
je veux regler ce probleme pourtant j'ai cree la table et tout et ça a marché
merci de m'aider svp

admin le 15 Juillet 2020 à 06:29

Vérifiez vos informations de connexion SQL.

Lili le 15 Juillet 2020 à 18:39

Je les ai vérifiées

admin le 15 Juillet 2020 à 22:17

OK, du coup, vous avez affiché les erreurs à l'écran pour savoir quelle est l'erreur ? avec mysqli_error($mysqli)

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter