From c5e4df52f69715242553be101099b21c50cbc10b Mon Sep 17 00:00:00 2001 From: podromos <baptiste.lambert@ensiie.fr> Date: Wed, 17 Oct 2018 16:23:05 +0000 Subject: [PATCH] Base du site --- README.md | 46 ++++++++++++++++++++++++++++- commun/DB.class.php | 37 +++++++++++++++++++++++ commun/func_commun.php | 17 +++++++++++ config/config.php | 11 +++++++ config/config_db.php | 5 ++++ controleur/login.php | 23 +++++++++++++++ index.php | 3 ++ model/login.php | 7 +++++ pima.sql | 66 ++++++++++++++++++++++++++++++++++++++++++ vue/404.php | 1 + vue/accueil.php | 3 ++ vue/index.php | 8 +++++ vue/login.php | 20 +++++++++++++ vue/page_to_load.php | 40 +++++++++++++++++++++++++ 14 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 commun/DB.class.php create mode 100644 commun/func_commun.php create mode 100644 config/config.php create mode 100644 config/config_db.php create mode 100644 controleur/login.php create mode 100644 index.php create mode 100644 model/login.php create mode 100644 pima.sql create mode 100644 vue/404.php create mode 100644 vue/accueil.php create mode 100644 vue/index.php create mode 100644 vue/login.php create mode 100644 vue/page_to_load.php diff --git a/README.md b/README.md index 68e558e..86348ee 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,47 @@ # PIMA-GROUPE-15 -Développement d'une plate-forme de vote d'images populaires. \ No newline at end of file +Développement d'une plate-forme de vote d'images populaires. + +## UTILISATION + +### AVANT UTILISATION + +Cloner le projet dans le répertoire /var/www/html/ (ubuntu 16.04) +Modifier la définition de DB_USERNAME et DB_PASSWORD dans /config/config_db.php par vos username et mot de passe phpmyadmin. (Pour se connecter: adresse email:jean.martin@gmail.com et mdp:0000) +Importer la base de données pima.sql depuis phpmyadmin. + +### UTILISATION + +Aller à l'adresse localhost/PIMA-GROUPE-15/ depuis un navigateur. + +## ARCHITECTURE + +### CONFIG + +Dossier dans lequel se trouve définies toutes les constantes utiles. +Dans config.php : les constantes de base correspondant principalement aux différents repertoires/pages +Dans config_db.php : les constantes relatives à la base de données + +### COMMUN + +Dans le dosser commun se trouve les éléments qui ne se rapporte pas directement à une page web. +Dans DB.class.php : classe permettant d'intéragir avec la base de données +Dans func_commun : fonctions communes et usuelles + +### VUE + +Dans le dossier vue se trouve les élements de génération et visuels d'une page. +page_to_load.php : permet la mise en relation de des parties model, vue et controleur +404.php : page à renvoyer lorsque la page demandée n'a pas été trouvée +index.php : fichier de redirection et de chargement des constantes de base +*nom_de_page*.php : fichier correspondant à la partie visuelle de la page *nom de page* + +### CONTROLEUR + +Dans le dossier controleur se trouve les élements de traitement et modication des données. +*nom_de_page*.php : traitement des données associées à la page *nom_de_page* + +### MODEL + +Dans le dossier model se trouve les éléments d'intéraction avec la base de données spécifiques à une page. +*nom_de_page*.php : intéractions avec la base de données nécessaires pour le traiment des données de la page *nom_de_page* diff --git a/commun/DB.class.php b/commun/DB.class.php new file mode 100644 index 0000000..ab2b99d --- /dev/null +++ b/commun/DB.class.php @@ -0,0 +1,37 @@ +<?php + +require_once(PATH_CONFIG."config_db.php"); + +class DB +{ + protected static function connect() { + try { + $connexion = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); + } catch (PDOException $e) { + die("Connection failed: " . $e->getMessage()); + } + return $connexion; + } + + protected static function disconnect(&$connexion) { + $connexion = ""; + } + + //Permet de faire une requête SQL renvoie un tableau du type + //array([0]=>array([attribut]=>[val_atribut_1]...),...,[n]=>array([attribut]=>[val_atribut_n]...)) + public static function query($req) { + $bdd = DB::connect(); + if ($query = $bdd->query($req)) { + return $query->fetchAll(PDO::FETCH_ASSOC); + } + return false; + } + //Permet d'executer une requête SQL,renvoie false en cas d'erreur + public static function execute($req) { + $bdd = DB::connect(); + if ($query = $bdd->exec($req)) + return $query; + return false; + } +} +?> diff --git a/commun/func_commun.php b/commun/func_commun.php new file mode 100644 index 0000000..8343be1 --- /dev/null +++ b/commun/func_commun.php @@ -0,0 +1,17 @@ +<?php +function secure($val) { + return htmlspecialchars(trim($val)); +} + +function _hash($val){ + return hash('sha256',$val); +} + +function getUserId(){ + return $_SESSION['id']; +} + +function getUserFName(){ + return $_SESSION['prenom']; +} +?> \ No newline at end of file diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..7230563 --- /dev/null +++ b/config/config.php @@ -0,0 +1,11 @@ +<?php +//chemin +define("PATH_VUE","../vue/"); +define("PATH_CONTROLEUR","../controleur/"); +define("PATH_MODEL","../model/"); +define("PATH_COMMUN","../commun/"); +define("PATH_CONFIG","../config/"); +//page +define("DEFAULT_PAGE","accueil"); +define("LOGIN_PAGE","login"); +?> \ No newline at end of file diff --git a/config/config_db.php b/config/config_db.php new file mode 100644 index 0000000..5d1e633 --- /dev/null +++ b/config/config_db.php @@ -0,0 +1,5 @@ +<?php + define("DB_DSN","mysql:host=localhost;dbname=pima;charset=utf8"); + define("DB_USERNAME","root"); // à compléter + define("DB_PASSWORD","mdp"); // à compléter +?> diff --git a/controleur/login.php b/controleur/login.php new file mode 100644 index 0000000..9467d51 --- /dev/null +++ b/controleur/login.php @@ -0,0 +1,23 @@ +<?php +function init_session($info){ + $_SESSION["id"]=$info["id"]; + $_SESSION["prenom"]=$info["prenom"]; +} + +$msg=""; +if (isset($_POST["email"],$_POST["mdp"])){ + //récupération des données saisies + $email=secure($_POST["email"]); + $mdp=_hash(secure($_POST["mdp"])); + //vérification de leur validité + if ($info=verify($email,$mdp)){ + init_session($info[0]); + header("Location:index.php?page=accueil"); + } + //création d'un message d'erreur + else{ + $msg="Mot de passe ou adresse email incorrect(s)"; + } +} + +?> \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..f36ff3e --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ +<?php + header("Location:vue/"); +?> diff --git a/model/login.php b/model/login.php new file mode 100644 index 0000000..bf425b4 --- /dev/null +++ b/model/login.php @@ -0,0 +1,7 @@ +<?php + +function verify($email,$mdp){ + return DB::query("SELECT id,prenom FROM Utilisateurs WHERE email='".$email."' AND mdp='".$mdp."'"); +} + +?> \ No newline at end of file diff --git a/pima.sql b/pima.sql new file mode 100644 index 0000000..aa7a1a8 --- /dev/null +++ b/pima.sql @@ -0,0 +1,66 @@ +-- phpMyAdmin SQL Dump +-- version 4.5.4.1deb2ubuntu2.1 +-- http://www.phpmyadmin.net +-- +-- Client : localhost +-- Généré le : Mer 17 Octobre 2018 à 15:55 +-- Version du serveur : 5.7.23-0ubuntu0.16.04.1 +-- Version de PHP : 7.0.32-0ubuntu0.16.04.1 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `pima` +-- +CREATE DATABASE pima; +USE pima; +-- -------------------------------------------------------- + +-- +-- Structure de la table `Utilisateurs` +-- + +CREATE TABLE `Utilisateurs` ( + `id` int(11) NOT NULL, + `email` varchar(50) NOT NULL, + `mdp` text NOT NULL, + `nom` varchar(50) NOT NULL, + `prenom` varchar(50) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Contenu de la table `Utilisateurs` +-- + +INSERT INTO `Utilisateurs` (`id`, `email`, `mdp`, `nom`, `prenom`) VALUES +(1, 'jean.martin@gmail.com', '9AF15B336E6A9619928537DF30B2E6A2376569FCF9D7E773ECCEDE65606529A0', 'martin', 'jean'); + +-- +-- Index pour les tables exportées +-- + +-- +-- Index pour la table `Utilisateurs` +-- +ALTER TABLE `Utilisateurs` + ADD PRIMARY KEY (`id`); + +-- +-- AUTO_INCREMENT pour les tables exportées +-- + +-- +-- AUTO_INCREMENT pour la table `Utilisateurs` +-- +ALTER TABLE `Utilisateurs` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/vue/404.php b/vue/404.php new file mode 100644 index 0000000..e9d900a --- /dev/null +++ b/vue/404.php @@ -0,0 +1 @@ +Page introuvable \ No newline at end of file diff --git a/vue/accueil.php b/vue/accueil.php new file mode 100644 index 0000000..e89ab54 --- /dev/null +++ b/vue/accueil.php @@ -0,0 +1,3 @@ +<?php +echo "Hola ".$_SESSION["prenom"]; +?> \ No newline at end of file diff --git a/vue/index.php b/vue/index.php new file mode 100644 index 0000000..4230db5 --- /dev/null +++ b/vue/index.php @@ -0,0 +1,8 @@ +<?php + session_start(); + require_once("../config/config.php"); + //On charge le modele et le controleur de la page si ils existent et si on est autorisé à le faire + require_once("page_to_load.php"); + //On charge la page demandée(Sa vue) + require_once($content); +?> \ No newline at end of file diff --git a/vue/login.php b/vue/login.php new file mode 100644 index 0000000..52e72c6 --- /dev/null +++ b/vue/login.php @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<body> + +<h2>Login</h2> + +<form action=# method=post> + Adresse email:<br> + <input type="text" name="email"> + <br> + Mot de passe:<br> + <input type="password" name="mdp"> + <br> + <?php echo $msg ?> + <br> + <input type="submit" value="Connexion"> +</form> +</body> +</html> + diff --git a/vue/page_to_load.php b/vue/page_to_load.php new file mode 100644 index 0000000..15c7289 --- /dev/null +++ b/vue/page_to_load.php @@ -0,0 +1,40 @@ +<?php + require_once(PATH_COMMUN."func_commun.php"); + + //recupération de la page demandée par l'utilisateur + if(isset($_GET["page"])){ + $page = secure($_GET["page"]); + }else{ + $page = DEFAULT_PAGE; + } + + //verification son droit d'accéder à une page autre que login + if(!isset($_SESSION["id"])){ + if (!isset($_GET["page"])){ + header("Location:index.php?page=login"); + } + $page = LOGIN_PAGE; + } + + //Définition du chemin de la page à charger + $content = "404.php"; + if(file_exists($page.".php")){ + + $content =$page.".php"; + + //On charge le fichier commun au traitement des données + require_once(PATH_COMMUN."DB.class.php"); + + //On charge le model correspondant + if (file_exists(PATH_MODEL.$content)) { + require_once(PATH_MODEL.$content); + } + + //On charge le controleur correspondant + if (file_exists(PATH_CONTROLEUR.$content)) { + require_once(PATH_CONTROLEUR.$content); + } + + } + +?> -- GitLab