diff --git a/README.md b/README.md index 68e558ef52969aa8bd8eca1842a94a96d12bdd53..86348ee580db97ac3e396bfca903925f7b459283 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 0000000000000000000000000000000000000000..ab2b99dbb8df9bbe6b6e96f17dc05ef5f5d63e77 --- /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 0000000000000000000000000000000000000000..8343be19c4cbb79f202ecc5aa9c136acc55659da --- /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 0000000000000000000000000000000000000000..723056379d4d002ff02f0f8651720f6d5fd480fb --- /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 0000000000000000000000000000000000000000..5d1e63343b48920d8e5cb34a29d90dface915caa --- /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 0000000000000000000000000000000000000000..9467d519b9ac7b51dc0606863880512a5f1e721b --- /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 0000000000000000000000000000000000000000..f36ff3e108e0f23c0e2430e68885909c571887b6 --- /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 0000000000000000000000000000000000000000..bf425b499ef4e15c73112226d0a1acad28dbe486 --- /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 0000000000000000000000000000000000000000..aa7a1a89adabc0a63b80c8e268bfc14676fc8e3f --- /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 0000000000000000000000000000000000000000..e9d900a58828ab1ba03e8b00bdf21ab785fb1d31 --- /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 0000000000000000000000000000000000000000..e89ab543a07269099b26de688ae5fcd2474be107 --- /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 0000000000000000000000000000000000000000..4230db5e0e8dd4146cec2f6d27da86415808f78d --- /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 0000000000000000000000000000000000000000..52e72c6ba375c943968567efcbfb97f705e6b81d --- /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 0000000000000000000000000000000000000000..15c72890e347f3754a64885ec9023b2d05587d86 --- /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); + } + + } + +?>