Dicton du 10 Décembre:
À la Sainte-Julie, le soleil ne quitte pas son lit.

Télécharger
Noter:

Ajouté le 29/11/2018
Visionné 110 fois

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 figures 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:

Code source (SQL)

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:


Page index.php

Code source (HTML)

<!DOCTYPE HTML>
<html>
<head>
<title>C2script.com - 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>

Page inscription.php

Code source (PHP)

<?php

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

?><!DOCTYPE HTML>
<html>
<head>
<title>C2script.com - 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>

Page connexion.php

Code source (PHP)

<?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>C2script.com - 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>

Page espace-membre.php

Code source (PHP)

<?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>C2script.com - 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>

Page deconnexion.php

Code source (PHP)

<?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>";

?>

Commentaires

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

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

Ajouter un commentaire

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


ATTENTION! Ce formulaire est exclusivement réservé aux commentaires
Pour toutes demandes d'aide, veuillez ajouter votre demande sur le forum svp

Captcha * 6 × = trente

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

Retour à la liste des scripts

Flag Counter