
Bonjour, bonsoir,
Partie 1 -> Clique ici
Aujourd'hui, nous allons passer à la suite de la série du développement d'un espace membre assez complet.
Dans cette partie, nous allons faire le système de connexion et d'inscription, mais aussi quelque fonctions pour nous faciliter certaine chose.
Votre serveur Apache et MySQL est fonctionnel ? Alors on peut commencer!
Tout d'abord, nous allons créer un dossier includes à la racine de votre FTP (Je prends en compte que votre FTP est vide et que vous n'avez rien d'autre dedans)

Une fois celui-ci créé, vous allez vous rendre dedans et créer un fichier configuration.php
Dans ce fichier, nous allons mettre la connectivité avec PDO.
PHP:
<?php
try
{
$hostname = "127.0.0.1"; //Hôte
$dbname = "rgtuto"; //Base de données
$user = "root"; // Utilisateur
$password = ""; // Mot de passe
$bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} // Ne pas toucher
catch(Exception $e)
{
die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage()); // Message d'erreur avec l'erreur rencontré, mettre juste die('Votre message d'erreur'); pour afficher simplement votre message d'erreur seul
}
?>
Et nous allons rajouter l'ouverture des sessions dans le fichier de configuration pour ne pas devoir se reconnecter à chaque modification dans la table des membres.
PHP:
if(isset($_SESSION['id']))
{
$req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
$req->execute(array($_SESSION['id']));
$info = $req->rowCount();
if($info == 1)
{
$info = $req->fetch();
$_SESSION['id'] = $info['id'];
$_SESSION['identifiant'] = $info['identifiant'];
$_SESSION['motdepasse'] = $info['motdepasse'];
$_SESSION['email'] = $info['email'];
$_SESSION['avatar'] = $info['avatar'];
}
}
Ce qui donne
PHP:
<?php
try
{
$hostname = "127.0.0.1";
$dbname = "rgtuto";
$user = "root";
$password = "";
$bdd = new PDO('mysql:host='.$hostname.';dbname='.$dbname.';charset=utf8', ''.$user.'', ''.$password.'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
die('<span style="color:red;"><b>Une erreur est survenue !</b></span> <br />'. $e->getMessage());
}
if(isset($_SESSION['id']))
{
$req = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
$req->execute(array($_SESSION['id']));
$info = $req->rowCount();
if($info == 1)
{
$info = $req->fetch();
$_SESSION['id'] = $info['id'];
$_SESSION['identifiant'] = $info['identifiant'];
$_SESSION['motdepasse'] = $info['motdepasse'];
$_SESSION['email'] = $info['email'];
$_SESSION['avatar'] = $info['avatar'];
}
}
?>
Une fois cela de fait, vous allez vous rendre dans vos fichiers créé hier (index.php, login.php, register.php) et rajouter
PHP:
<?php
session_start();
require_once('includes/configuration.php');
?>
Donc, le session_start(); sert à initialiser et restaurer une session et le require_once(''); permet d'inclure un fichier, il est identique à require et include mis à part que PHP vérifie si le fichier a déjà été inclus, et si c'est le cas, ne l'inclut pas une deuxième fois.
Une fois cela fais, nous allons créer un base de données. Pour ma part je vais l'appeler rgtuto puis nous allons créer la table des membres.
C'est Navicat car je ne sais pas utiliser phpMyAdmin sans m'énerver 


Maintenant que nous avons notre base de données avec notre table membres, nous allons passer à la partie PHP
On se redirige dans le dossier includes puis on crée un nouveau dossier nommé php et dans ce dossier on crée un fichier login.code.php qui va comporter notre code PHP permettant la connexion.
PHP:
<?php
// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index
if(isset($_SESSION['id']))
{
header('Location: index');
exit();
}
else
{
// Sinon il peut utiliser le formulaire
if(isset($_POST['connexion']))
{
$identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
$motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"
if(!empty($identifiant) AND !empty($motdepasse))
{
$req = $bdd->prepare('SELECT * FROM membres WHERE identifiant = ? AND motdepasse = ?');
$req->execute(array($identifiant, $motdepasse));
$exist = $req->rowCount();
if($exist == 1)
{
// On enregistre en cookie l'identifiant et le mot de passe
if(isset($_POST['remember'])) {
setcookie('identifiant',$identifiant,time()+365*24*3600,null,null,false,true);
setcookie('motdepasse',$motdepasse,time()+365*24*3600,null,null,false,true);
}
// On ouvre les sessions
$backup = $req->fetch();
$_SESSION['id'] = $backup['id'];
$_SESSION['identifiant'] = $backup['identifiant'];
$_SESSION['motdepasse'] = $backup['motdepasse'];
$_SESSION['avatar'] = $backup['avatar'];
// On peut ici mettre ici -> $erreur = "Connexion réussi, redirection dans 3 secondes"; <- et modifier le header actuel par -> header("refresh:3;url=index"); <-
header('Location: index');
exit();
}
else
{
// Erreur si l'utilisateur ou le mot de passe est incorrect
$erreur = "<div class=\"alert alert-danger\">
<strong>Erreur!</strong> Votre nom d'utilisateur ou mot de passe est incorrect.
</div>";
}
}
else
{
// Erreur si tous les champs ne sont pas remplis, mais on peut utiliser un required dans notre code HTML mais il n'est pas prit en compte sur tous les navigateurs.
$erreur = "<div class=\"alert alert-danger\">
<strong>Erreur!</strong> Tous les champs ne sont pas remplis!
</div>";
}
}
}
?>
Je vous ai détaillé en bref ce que chaque ligne signifie.
Une fois ce code mit dans votre fichier login.code.php, vous enregistrez et nous allons nous rendre dans le fichier login.php situé à la racine et rajouter un autre require_once pour inclure notre fichier login.code.php avec le code PHP.
Ce qui doit vous donnez maintenant
PHP:
<?php
session_start();
require_once('includes/configuration.php');
require_once('includes/php/login.code.php');
?>
Maintenant, nous allons faire en sorte que si il y a une erreur, elle s'affiche.
Donc on aura besoin de
PHP:
<?php if(isset($erreur)) { ?>
<?php echo $erreur ?>
<?php } ?>
Vous le placez où vous voulez que l'erreur apparaisse.

Normalement, si vous avez suivi correctement le tutoriel numéro 1, une erreur doit s'afficher si vous rentrez de fausse information.
Maintenant si vous voulez tester que tout fonctionne, il vous suffit de créer un utilisateur depuis votre base de données, pour le mot de passe, on va utiliser azerty, alors dans la colonne motdepasse, on va mettre 7b95dafa9ecb37dafa761f8bafc76b0a.
Si tout c'est bien passé, vous allez être redirigé sur l'index, et vous ne pourrez plus vous rendre sur le page login.php sans que vous soyez aussi redirigé sur l'index, on va donc créer un fichier logout.php permettant la déconnexion.
Je vous laisse faire le design de votre page de déconnexion

Normalement, vous avez que du HTML sur cette page, vous allez ajouter maintenant
PHP:
<?php
session_start();
$_SESSION = array();
session_destroy();
?>
Pas besoin d'explication, il n'y a que 3 lignes
Maintenant nous allons attaquer la partie inscription
On retourne dans le dossier php ce trouvant dans includes et nous créons le fichier register.code.php, et l'on colle ce code
PHP:
<?php
// Si l'utilisateur est déjà connecté, alors on le redigire sur l'index
if(isset($_SESSION['id']))
{
header('Location: index');
exit();
}
else
{
// Sinon il peut utiliser le formulaire
if(isset($_POST['inscription']))
{
$identifiant = htmlspecialchars($_POST['identifiant']); // Ce qui sert pour le name="identifiant"
$email = htmlspecialchars($_POST['email']); // Ce qui sert pour le name="email"
$motdepasse = md5(sha1($_POST['motdepasse'])); // Ce qui sert pour le name="motdepasse"
$motdepasse_confirme = md5(sha1($_POST['motdepasse_confirme'])); // Ce qui sert pour le name="motdepasse_confirme"
$avatar = htmlspecialchars("/images/1.jpg"); // Lien vers l'image que vous donnerez au utilisateur lors de l'inscription
if(!empty($_POST['identifiant']) AND !empty($_POST['email']) AND !empty($_POST['motdepasse']) AND !empty($_POST['motdepasse_confirme'])) // Les champs qui seront obligatoire d'être remplis dans le formulaire
{
$l_peudo = strlen($identifiant);
if($l_peudo > 25) // Longueur maximal d'un nom d'utilisateur
{
$erreur = "Identifiant trop long";
}
else
{
$req = $bdd->prepare("SELECT * FROM membres WHERE identifiant = ?");
$req->execute(array($identifiant));
$userexist = $req->rowCount();
if($userexist == 0)
{
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
if($motdepasse == $motdepasse_confirme) // On vérifie que le mot de passe est identique
{
$reqinsert = $bdd->prepare('INSERT INTO membres(identifiant, email, motdepasse, avatar) VALUES(?, ?, ?, ?)');
$reqinsert->execute(array($identifiant, $email, $motdepasse, $avatar));
// Si tout c'est bien passé, on affiche ce message
$erreur = "<div class=\"alert alert-success\">
<strong>Succès!</strong> Votre compte est maintenant créé.<br> Vous pouvez dès à présent vous connecter.
</div>";
header('Refresh: 3; login');
exit();
}
else
{
// Si les mots de passe ne sont pas identique
$erreur = "<div class=\"alert alert-danger\">
<strong>Erreur!</strong> Les mots de passe ne sont pas identique.
</div>";
}
}
else
{
// Si l'email est invalide
$erreur = "<div class=\"alert alert-danger\">
<strong>Erreur!</strong> Email invalide.
</div>";
}
}
else
{
// Si l'identifiant est déjà utilisé
$erreur = "<div class=\"alert alert-danger\">
<strong>Erreur!</strong> Ce identifiant est déjà utilisé.
</div>";
}
}
}
else
{
// Si tous les champs ne sont pas remplis
$erreur = "<div class=\"alert alert-danger\"><strong>Erreur!</strong> Tous les champs ne sont pas remplis.
</div>";
}
}
}
Une fois cela de fait, vous enregistrez et on retourne dans register.php qui est à la racine.
Vous allez faire comme pour le login.php, vous allez placer un require_once allant chercher notre fichier register.code.php
Ce qui doit vous donner
PHP:
<?php
session_start();
require_once('includes/configuration.php');
require_once('includes/php/register.code.php');
?>
Maintenant nous allons aussi rajouter le code permettant d'afficher les erreurs.
PHP:
<?php if(isset($erreur)) { ?>
<?php echo $erreur ?>
<?php } ?>
À vous de le placer où vous le souhaitez 
Normalement, si vous avez tout bien suivi, tout devrait marcher
BONUS
Maintenant nous allons utiliser les functions.
Donc alors, nous allons nous rendre dans notre base de données et créer une table configuration comportant les colonnes : nom - description - auteur.
Une fois cela de fait, on se rend dans notre dossier includes puis on crée le dossier fonctions et on crée un fichier nommé configuration.fonction.php
Dans ce fichier vous allez mettre
Normalement, si vous avez tout bien suivi, tout devrait marcher
BONUS
Maintenant nous allons utiliser les functions.
Question: Pourquoi ? Encore du code qui peut être tout simplement écrit pourtant...
Réponse: Oui mais c'est pour faciliter les modifications, par exemple, quand nous serons à la partie administration, même si c'est pas pour tout de suite, tu pourras modifier le titre de ton site en 10 secondes!
Donc alors, nous allons nous rendre dans notre base de données et créer une table configuration comportant les colonnes : nom - description - auteur.

Une fois cela de fait, on se rend dans notre dossier includes puis on crée le dossier fonctions et on crée un fichier nommé configuration.fonction.php
Dans ce fichier vous allez mettre
PHP:
<?php
function Configuration($str)
{
static $row;
global $bdd;
if (!$row)
{
$stm = $bdd->query("SELECT * FROM configuration");
$row = $stm->fetch();
}
return $row[$str];
}
?>
En gros, on utilisera la fonction Configuration pour afficher les données dans la table configuration
Une fois cela de fait, vous allez ajouter un require_once qui inclura notre fichier configuration.fonction.php, vous pouvez le mettre dans tout nos fichiers de racine, comme ça, pas besoin de faire plusieurs modification, une seul suffira pour tout modifier
Le fonctionnement est simple, si vous voulez afficher le texte qu'il y a dans votre table nom, vous allez mettre
PHP:
<?php echo Configuration('nom'); ?>
Si vous voulez la description, alors à la place de nom, vous allez mettre description, c'est tout simple, et très utilise 
N'hésitez pas à me dire si vous n'avez pas compris certaine chose
Bonne journée/soirée à vous
Télécharger le projet:
Nouveau fichier SQL:
N'hésitez pas à me dire si vous n'avez pas compris certaine chose
Bonne journée/soirée à vous
Télécharger le projet:
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Nouveau fichier SQL:
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Dernière édition: