From c9975c31d625879b69b653c19a56acd87d1e2969 Mon Sep 17 00:00:00 2001 From: vbochet <vbochet@gmail.com> Date: Sat, 2 Apr 2016 11:43:11 +0200 Subject: [PATCH] Modifications et ajout de fichiers pour ajouter la page de connexion. --- app/controller/ConnexionController.php | 37 ++++++++++++++++++++++++++ app/kernel/Router.php | 9 ++++++- app/model/Connexion.php | 33 +++++++++++++++++++++++ app/view/connexion/display.html | 20 ++++++++++++++ app/view/connexion/displayForm.html | 28 +++++++++++++++++++ app/view/connexion/displayValid.html | 17 ++++++++++++ app/view/index/display.html | 3 +++ 7 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 app/controller/ConnexionController.php create mode 100644 app/model/Connexion.php create mode 100644 app/view/connexion/display.html create mode 100644 app/view/connexion/displayForm.html create mode 100644 app/view/connexion/displayValid.html diff --git a/app/controller/ConnexionController.php b/app/controller/ConnexionController.php new file mode 100644 index 0000000..25b4090 --- /dev/null +++ b/app/controller/ConnexionController.php @@ -0,0 +1,37 @@ +<?php + +class ConnexionController extends Controller { // classe de contrôleur pour l'affichage des profils + public function displayValid() { // la fonction d'affichage + //$slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi + + //$this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse + $this->view->display(); // on affiche ce profil + } + + public function displayForm() { // la fonction d'affichage + $this->view->display(); // on affiche ce profil + } + + public function verify() { // vérifie que les identifiants sont valides par rapport à la BDD + // méthode basique avec un stockage de mdp en clair, ce qu'on ne fera bien sûr pas ! + if(!isset($_POST['login']) || !isset($_POST['password'])) { // si l'une des données manque, erreur + //appeler une fonction d'erreur + echo "<h1>Erreur : variables absentes</h1>"; + die(); + } + + $pseudo = $_POST['login']; + $password = $_POST['password']; + + $result = Connexion::check($pseudo, $password); // vérifie si existe en base et a bon mdp + if($result == 1) { // connexion valide + header('Location:valid'); // on redirige vers la page OK + } + else { + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $_SESSION["connexionErrCode"] = $result; // on stocke le code d'erreur + header('Location:../connexion'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne, ne me demandez pas pourquoi !) + } + } + +} diff --git a/app/kernel/Router.php b/app/kernel/Router.php index 94551ec..d300f87 100644 --- a/app/kernel/Router.php +++ b/app/kernel/Router.php @@ -42,7 +42,14 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes else if($parts[0] == "connexion" && count($parts) == 1) { // formulaire de connexion $result["controller"] = "Connexion"; // le contrôleur à instancier sera "ProfilController", on met donc "Profil" dans la variable de résultat $result["action"] = "displayForm"; // "displayForm" pour afficher le formulaire - + } + else if($parts[0] == "connexion" && count($parts) == 2 && $parts[1] == "valid") { // connexion réussie + $result["controller"] = "Connexion"; // le contrôleur à instancier sera "ProfilController", on met donc "Profil" dans la variable de résultat + $result["action"] = "displayValid"; // "displayForm" pour afficher le formulaire + } + else if($parts[0] == "connexion" && count($parts) == 2 && $parts[1] == "verify") { // connexion réussie + $result["controller"] = "Connexion"; // le contrôleur à instancier sera "ProfilController", on met donc "Profil" dans la variable de résultat + $result["action"] = "verify"; // "displayForm" pour afficher le formulaire } // à chaque fois qu'on crée une nouvelle page, il faut rajouter un cas à cet endroit ! diff --git a/app/model/Connexion.php b/app/model/Connexion.php new file mode 100644 index 0000000..e48781b --- /dev/null +++ b/app/model/Connexion.php @@ -0,0 +1,33 @@ +<?php + +class Connexion extends Model { // classe de modèle pour l'affichage de profils + public $useless; // on définit les attributs de la classe + + public static function check($pseudo, $pass) { // méthode permettant de vérifier la validité d'identifiants d'un membre dans la BDD + // renvoie 1 si le membre existe et que son mot de passe correspond + // renvoie 2 si le mot de passe est faux + // renvoie 0 si le membre n'existe pas + + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT password FROM profils WHERE pseudo = :pseudo"; + $req = $db->prepare($sql); // on prépare la requête + //$req->setFetchMode(PDO::FETCH_CLASS, "Profil"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes) + $req->execute(array(":pseudo" => $pseudo)); // on remplace les variables dans la requête + + $return = 0; //valeur par défaut + if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe + if($result['password'] == $pass) { // si les mdp correspondent, alors c'est bon + $return = 1; + } + else { // sinon, il y a ppb dans les mdp + $return = 2; + } + } + + return $return; + } + +} + + + diff --git a/app/view/connexion/display.html b/app/view/connexion/display.html new file mode 100644 index 0000000..19619cc --- /dev/null +++ b/app/view/connexion/display.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>Exemple de profil</title> + <base href="http://localhost/projet-web-2016/www/"/> +</head> +<body> + <header> + <h1>Affichage d'un profil</h1> + </header> + <h2>Voici le profil de quelqu'un</h2> + <h3>Il s'agit du profil de <?php echo $this->profil->pseudo; ?></h3> + <p>Et on dit "Bonjour <?php echo $this->profil->pseudo; ?> ! :o)</p> + <p>Il a été appelé avec le slug : <?php echo $this->profil->slug; ?></p> + <footer> + <p>Le pied de page</p> + </footer> +</body> +</html> diff --git a/app/view/connexion/displayForm.html b/app/view/connexion/displayForm.html new file mode 100644 index 0000000..7bf2c28 --- /dev/null +++ b/app/view/connexion/displayForm.html @@ -0,0 +1,28 @@ +<?php session_start(); ?> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>Formulaire de connexion</title> + <base href="http://localhost/projet-web-2016/www/"/> +</head> +<body> + <header> + <h1>Connexion au site</h1> + </header> + <?php if(isset($_SESSION['connexionErrCode'])) { // si message d'erreur + $errCode = $_SESSION['connexionErrCode']; + $errMsg = ($errCode == 0) ? '<h3 style="color:red;">Identifiant inconnu !</h3>' : '<h3 style="color:red;">Mauvais mot de passe !</h3>'; // on détermine le message à afficher + echo $errMsg; // on affiche le message + unset($_SESSION['connexionErrCode']); // on retire la variable de session + } ?> + <form method="post" action="connexion/verify"> + <label for="login">Login : </label><input type="text" name="login" id="login" /><br/> + <label for="password">Password : </label><input type="password" name="password" id="password" /><br/> + <input type="submit" value="Connexion" /> + </form> + <footer> + <p>Le pied de page</p> + </footer> +</body> +</html> diff --git a/app/view/connexion/displayValid.html b/app/view/connexion/displayValid.html new file mode 100644 index 0000000..2be853c --- /dev/null +++ b/app/view/connexion/displayValid.html @@ -0,0 +1,17 @@ +<?php session_start(); ?> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>Connexion réussie</title> + <base href="http://localhost/projet-web-2016/www/"/> +</head> +<body> + <header> + <h1 style="color:green;">Vos identifiants sont corrects !</h1> + </header> + <footer> + <p>Le pied de page</p> + </footer> +</body> +</html> diff --git a/app/view/index/display.html b/app/view/index/display.html index 942564c..c0ec00c 100644 --- a/app/view/index/display.html +++ b/app/view/index/display.html @@ -34,6 +34,9 @@ <li><a href="classement/jeu/random">Classement pour un jeu spécifique</a></li> </ul> + <h2 style="margin-bottom:-4px;"><a href="connexion">Connexion</a></h2> + <em>(plein de modifs à venir !)</em> + <footer> <p>Pied de page...</p> </footer> -- GitLab