From f3707273fdf8282247fb2685de9896553ce40d05 Mon Sep 17 00:00:00 2001 From: vautrin33u <vautrin33u@etu.univ-lorraine.fr> Date: Wed, 22 Dec 2021 00:02:54 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20css=20=20+=20requete=20SQL=20r?= =?UTF-8?q?=C3=A9cursive=20+=20stockage=20des=20images=20dans=20bdd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GestionUtilisateur.php | 72 ----------------------- Requete.php | 3 +- Service.php | 130 +++++++++++++++++++++++++++++++++++++---- configuration.php | 16 +++++ formulaire.js | 8 +-- install.php | 40 ++++++++++--- recettes.css | 6 ++ recettes.js | 90 +++++++++++++++------------- 8 files changed, 230 insertions(+), 135 deletions(-) delete mode 100644 GestionUtilisateur.php create mode 100644 configuration.php diff --git a/GestionUtilisateur.php b/GestionUtilisateur.php deleted file mode 100644 index 7699705..0000000 --- a/GestionUtilisateur.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php // Gestion de l'inscription - session_start(); // début session - -// Réalise l'inscription si possible, puis la connexion -function realiseInscription ($json){ - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); - - // Récupération depuis l'objet json - $nom = mysqli_real_escape_string ($mysqli, $json['nom']); - $prenom = mysqli_real_escape_string ($mysqli, $json['prenom']); - $sexe = mysqli_real_escape_string ($mysqli, $json['sexe']); - $email = mysqli_real_escape_string ($mysqli, $json['email']); - $pseudo = mysqli_real_escape_string ($mysqli, $json['pseudo']); - $password = mysqli_real_escape_string ($mysqli, $json['password']); - - $res = $mysqli->query("INSERT INTO utilisateurs(nom, prenom, sexe, email, pseudo, password) VALUES ('{$nom}', '{$prenom}', '{$sexe}', '{$email}', '{$pseudo}', '{$password}')"); - if ($res == true){ // si l'inscription fonctionne, préparation des éléments de sessions - $_SESSION['pseudo'] = $json['pseudo']; - $resultat = $mysqli->query("SELECT * FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); - $resultat = $resultat->fetch_assoc(); - $_SESSION['id'] = $resultat['user_id']; - } - $mysqli->close(); - return json_encode($res); -} - -// Effectue la connexion -function realiseConnexion ($json){ - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); - - // Récupération depuis l'objet json - $pseudo = mysqli_real_escape_string ($mysqli, $json['pseudo']); - $password = mysqli_real_escape_string ($mysqli, $json['password']); - - $res = $mysqli->query("SELECT 1 FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); - if ($res->num_rows == 1){ - $_SESSION['pseudo'] = $json['pseudo']; - - $resultat = $mysqli->query("SELECT * FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); - $resultat = $resultat->fetch_assoc(); - $_SESSION['id'] = $resultat['user_id']; - - - $favs = $mysqli->query("SELECT p.recette_id FROM utilisateurs u, panier p WHERE u.user_id = p.user_id AND u.user_id = {$resultat['user_id']}"); - while($col = mysqli_fetch_assoc($favs)) { - $resultats[] = $col['recette_id']; - } - $_SESSION['panier'] = $resultats; - - $out = true; - }else{ - $out = false; - } - $mysqli->close(); - return json_encode($out); -} - -// Décode des fichiers issus de json et les utilise pour réaliser des opération -$in = file_get_contents('php://input'); -$decoded = json_decode($in, true); - -if (isset($decoded['mode'])){ - if ($decoded['mode'] == 'inscription'){ - echo realiseInscription($decoded); - } - if ($decoded['mode'] == 'connexion'){ - echo realiseConnexion($decoded); - } - unset($decoded); -} - -?> diff --git a/Requete.php b/Requete.php index b6371f2..60de5ba 100644 --- a/Requete.php +++ b/Requete.php @@ -1,7 +1,8 @@ <?php session_start(); - echo $_SESSION['id']; + echo "<pre>"; + echo "</pre>"; ?> diff --git a/Service.php b/Service.php index 2099124..5162e9b 100644 --- a/Service.php +++ b/Service.php @@ -1,11 +1,13 @@ <?php - +include "configuration.php"; session_start(); + + /** * Se charge d'effectuer les requêtes et retourne un json */ function queryDBB(string $str){ - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); + $mysqli= connect_to_db(); $res = $mysqli->query($str); $recettes = $res->fetch_all(MYSQLI_ASSOC); @@ -13,6 +15,62 @@ function queryDBB(string $str){ return json_encode($recettes); } + +// Réalise l'inscription si possible, puis la connexion +function realiseInscription ($json){ + $mysqli= connect_to_db(); + + // Récupération depuis l'objet json + $nom = mysqli_real_escape_string ($mysqli, $json['nom']); + $prenom = mysqli_real_escape_string ($mysqli, $json['prenom']); + $sexe = mysqli_real_escape_string ($mysqli, $json['sexe']); + $email = mysqli_real_escape_string ($mysqli, $json['email']); + $pseudo = mysqli_real_escape_string ($mysqli, $json['pseudo']); + $password = mysqli_real_escape_string ($mysqli, $json['password']); + + $res = $mysqli->query("INSERT INTO utilisateurs(nom, prenom, sexe, email, pseudo, password) VALUES ('{$nom}', '{$prenom}', '{$sexe}', '{$email}', '{$pseudo}', '{$password}')"); + if ($res == true){ // si l'inscription fonctionne, préparation des éléments de sessions + $_SESSION['pseudo'] = $json['pseudo']; + $resultat = $mysqli->query("SELECT * FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); + $resultat = $resultat->fetch_assoc(); + $_SESSION['id'] = $resultat['user_id']; + } + $mysqli->close(); + return json_encode($res); +} + +// Effectue la connexion +function realiseConnexion ($json){ + $mysqli= connect_to_db(); + + // Récupération depuis l'objet json + $pseudo = mysqli_real_escape_string ($mysqli, $json['pseudo']); + $password = mysqli_real_escape_string ($mysqli, $json['password']); + + $res = $mysqli->query("SELECT 1 FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); + if ($res->num_rows == 1){ + $_SESSION['pseudo'] = $json['pseudo']; + + $resultat = $mysqli->query("SELECT * FROM utilisateurs WHERE pseudo LIKE '{$pseudo}' AND password = '{$password}'"); + $resultat = $resultat->fetch_assoc(); + $_SESSION['id'] = $resultat['user_id']; + + + $favs = $mysqli->query("SELECT p.recette_id FROM utilisateurs u, panier p WHERE u.user_id = p.user_id AND u.user_id = {$resultat['user_id']}"); + while($col = mysqli_fetch_assoc($favs)) { + $resultats[] = $col['recette_id']; + } + $_SESSION['panier'] = $resultats; + + $out = true; + }else{ + $out = false; + } + $mysqli->close(); + return json_encode($out); +} + + function chercheTitres (string $nom){ $requete = "SELECT titre FROM recettes WHERE titre LIKE '{$nom}%'"; echo queryDBB($requete); @@ -21,18 +79,53 @@ function chercheTitres (string $nom){ /** * Récupère les sous catégories */ + function getCategorie (string $req){ $requete = "SELECT sous_nom FROM hierarchie WHERE super_nom = '{$req}'"; echo queryDBB($requete); } +/* +function getCategorie (string $req){ + //$requete = "SELECT sous_nom FROM hierarchie WHERE super_nom = '{$req}'"; + + + $requete = "with recursive cte (sous_nom, super_nom) as ( + SELECT sous_nom, super_nom + FROM hierarchie + WHERE super_nom = '{$req}' + union all + SELECT h.sous_nom, h.super_nom + FROM hierarchie h + INNER JOIN cte + on h.super_nom = cte.sous_nom + ) + select distinct sous_nom from cte;"; + + echo queryDBB($requete); + + +}*/ + /** - * Récupères les recettes + * Récupères les recettes récursivement (MYSQL V8+!!) */ -function grabRecettes (string $req){ - $requete = "SELECT DISTINCT r.id, r.titre, r.ingredients, r.preparation FROM recettes r, ingredientsderecettes ing WHERE ing.idBoisson = r.id AND ing.nomIngredient LIKE '{$req}'"; +function grabRecettes (string $req){ + $requete = "with recursive cte (sous_nom, super_nom) as ( + SELECT sous_nom, super_nom + FROM hierarchie + WHERE super_nom = '{$req}' + union all + SELECT h.sous_nom, h.super_nom + FROM hierarchie h + INNER JOIN cte on h.super_nom = cte.sous_nom + ) + SELECT DISTINCT r.id, r.titre, r.ingredients, r.preparation, r.photo FROM cte c, recettes r, ingredientsderecettes ing + WHERE c.sous_nom = ing.nomIngredient AND ing.idBoisson = r.id ;"; + echo queryDBB($requete); } + /** * Envoie l'image sélectionné parmi celles existantes ou rien */ @@ -55,10 +148,10 @@ function loadImage (string $nom){ */ function getPanier (){ if (isset($_SESSION['id'])){ // si connecté - $requete = "select r.id, r.titre, r.preparation, r.ingredients from recettes r, panier p where p.recette_id = r.id AND p.user_id = {$_SESSION['id']}"; + $requete = "SELECT r.id, r.titre, r.preparation, r.ingredients FROM recettes r, panier p WHERE p.recette_id = r.id AND p.user_id = {$_SESSION['id']}"; echo queryDBB($requete); }else{ - $requete = "select id, titre, preparation, ingredients from recettes where "; + $requete = "SELECT id, titre, preparation, ingredients FROM recettes WHERE "; for ($i = 0; $i < count($_SESSION['panier']); $i++) { if ($i < count($_SESSION['panier']) -1){ $requete .= "id = ". $_SESSION['panier'][$i]." OR "; @@ -70,10 +163,13 @@ function getPanier (){ } } +/** + * Ajouter aux favoris + */ function addToCart ($req){ if (isset($_SESSION['id'])){ // Si un utilisateur est identifié - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); + $mysqli= connect_to_db(); $recette_id = mysqli_real_escape_string ($mysqli, $req); $user_id = mysqli_real_escape_string($mysqli, $_SESSION['id']); $requete = "INSERT INTO panier(user_id, recette_id) VALUES ({$user_id}, {$recette_id})"; @@ -83,10 +179,13 @@ function addToCart ($req){ $_SESSION['panier'][] = $req; } +/** + * Retirer une recette des favoris + */ function removeFromCart ($req){ if (isset($_SESSION['id'])){ // Si un utilisateur est identifié - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); + $mysqli= connect_to_db(); $recette_id = mysqli_real_escape_string ($mysqli, $req); $user_id = mysqli_real_escape_string($mysqli, $_SESSION['id']); $requete = "DELETE FROM panier WHERE user_id = {$user_id} AND recette_id = {$recette_id}"; @@ -104,6 +203,16 @@ function removeFromCart ($req){ $in = file_get_contents('php://input'); $decoded = json_decode($in, true); +if (isset($decoded['mode'])){ + if ($decoded['mode'] == 'inscription'){ + echo realiseInscription($decoded); + } + if ($decoded['mode'] == 'connexion'){ + echo realiseConnexion($decoded); + } + unset($decoded); +} + if (isset($decoded['requete'])){ chercheTitres($decoded['requete']); unset($decoded['requete']); @@ -134,7 +243,8 @@ if (isset($decoded['panier'])){ if ($decoded['panier'] == 'get'){ getPanier(); } - + if ($decoded['panier'] == 'alreadyIn'){ + } } } diff --git a/configuration.php b/configuration.php new file mode 100644 index 0000000..ed38cf1 --- /dev/null +++ b/configuration.php @@ -0,0 +1,16 @@ +<?php // Gestion de l'inscription + +/** + * Se connecte à la base de donnée + */ +function connect_to_db(){ + $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); + return $mysqli; +} + +function install_bd(){ + $mysqli = mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion"); + return $mysqli; +} + +?> diff --git a/formulaire.js b/formulaire.js index 2f5a882..5c4d0cd 100644 --- a/formulaire.js +++ b/formulaire.js @@ -1,6 +1,6 @@ /** * Action qui se réalise automatiquement lorsque l'envoi du formulaire d'inscription a lieu - * Vérifie les données puis les envoie (si possible) au serveur (GestionUtilisateur.php traite la demande) + * Vérifie les données puis les envoie (si possible) au serveur (Service.php traite la demande) */ window.addEventListener("load", function (){ @@ -68,7 +68,7 @@ window.addEventListener("load", function (){ console.log(input); const xhr = new XMLHttpRequest(); - xhr.open("POST", "/GestionUtilisateur.php", true); + xhr.open("POST", "/Service.php", true); xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8"); // Vérifie si erreur lors de l'envoie du formulaire @@ -186,7 +186,7 @@ window.addEventListener("load", function (){ /** * Action qui se réalise automatiquement lorsque l'envoi du formulaire de connexion a lieu - * Vérifie les données puis les envoie (si possible) au serveur (GestionUtilisateur.php traite la demande) + * Vérifie les données puis les envoie (si possible) au serveur (Service.php traite la demande) */ window.addEventListener("load", function (){ @@ -229,7 +229,7 @@ window.addEventListener("load", function (){ const xhr = new XMLHttpRequest(); - xhr.open("POST", "/GestionUtilisateur.php", true); + xhr.open("POST", "/Service.php", true); xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8"); // Vérifie si erreur lors de l'envoie du formulaire diff --git a/install.php b/install.php index 4a73707..eed4e95 100644 --- a/install.php +++ b/install.php @@ -1,6 +1,6 @@ <?php // Création d'une base de données - +include "configuration.php"; function query($link,$requete) { @@ -10,7 +10,7 @@ function query($link,$requete) function loadDB(){ include("Donnees.inc.php"); - $mysqli=mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion"); + $mysqli= install_bd(); // Récupération des tableaux pour les insérer dans une base de données if (isset($Recettes)) { @@ -54,9 +54,9 @@ function loadDB(){ $ingred = mysqli_real_escape_string($mysqli, $colonne['ingredients']); $prep = mysqli_real_escape_string($mysqli, $colonne['preparation']); if (count($tabRecettes)-1 === $cmpt){ - $str .= "INSERT INTO recettes VALUES (".$cmpt.", '".$titre."', '".$ingred."', '".$prep."')"; + $str .= "INSERT INTO recettes(titre, ingredients, preparation) VALUES ('{$titre}', '{$ingred}', '{$prep}')"; }else{ - $str .= "INSERT INTO recettes VALUES (".$cmpt.", '".$titre."', '".$ingred."', '".$prep."'); "; + $str .= "INSERT INTO recettes(titre, ingredients, preparation) VALUES ('{$titre}', '{$ingred}', '{$prep}'); "; } while ($ingred = current($colonne['index'])){ @@ -67,7 +67,31 @@ function loadDB(){ $valeur++; } - + // Ajout des images à la table des recettes + $tab[] = array ("image" => "Photos/Black_velvet.jpg", "nom" => "Black velvet"); + $tab[] = array ("image" => "Photos/Bloody_mary.jpg", "nom" => "Bloody Mary"); + $tab[] = array ("image" => "Photos/Bora_bora.jpg", "nom" => "Bora bora"); + $tab[] = array ("image" => "Photos/Builder.jpg", "nom" => "Builder"); + $tab[] = array ("image" => "Photos/Caipirinha.jpg", "nom" => "Caïpirinha"); + $tab[] = array ("image" => "Photos/Coconut_kiss.jpg", "nom" => "Coconut kiss"); + $tab[] = array ("image" => "Photos/Cuba_libre.jpg", "nom" => "Cuba libre"); + $tab[] = array ("image" => "Photos/Frosty_lime.jpg", "nom" => "Frosty lime"); + $tab[] = array ("image" => "Photos/Le_vandetta.jpg", "nom" => "Le vandetta"); + $tab[] = array ("image" => "Photos/Margarita.jpg", "nom" => "Margarita"); + $tab[] = array ("image" => "Photos/Mojito.jpg", "nom" => "Mojito"); + $tab[] = array ("image" => "Photos/Pina_colada.jpg", "nom" => "Piña Colada"); + $tab[] = array ("image" => "Photos/Raifortissimo.jpg", "nom" => "Raifortissimo"); + $tab[] = array ("image" => "Photos/Screwdriver.jpg", "nom" => "Screwdriver"); + $tab[] = array ("image" => "Photos/Shoot_up.jpg", "nom" => "Shoot up"); + $tab[] = array ("image" => "Photos/Tequila_sunrise.jpg", "nom" => "Tequila sunrise"); + $tab[] = array ("image" => "Photos/Tipunch.jpg", "nom" => "Ti'punch"); + + for ($cmpt = 0; $cmpt< count($tab); $cmpt++){ + $img = mysqli_real_escape_string($mysqli, $tab[$cmpt]['image']); + $nom = mysqli_real_escape_string($mysqli, $tab[$cmpt]['nom']); + echo $img.' '.$nom; + $str .= "UPDATE recettes SET photo='{$img}' WHERE titre LIKE '{$nom}'; "; + } $base="Boissons"; @@ -80,7 +104,8 @@ function loadDB(){ id INT AUTO_INCREMENT PRIMARY KEY, titre VARCHAR(255) NOT NULL, ingredients VARCHAR(1024) NOT NULL, - preparation VARCHAR(4096) NOT NULL + preparation VARCHAR(4096) NOT NULL, + photo VARCHAR(255) NULL ); CREATE TABLE IF NOT EXISTS utilisateurs ( @@ -121,13 +146,10 @@ function loadDB(){ FOREIGN KEY (recette_id) REFERENCES recettes(id), UNIQUE (user_id, recette_id) ); - - ".$str; foreach(explode('; ',$Sql) as $Requete) query($mysqli,$Requete); - mysqli_close($mysqli); } loadDB(); diff --git a/recettes.css b/recettes.css index 89819d2..6422deb 100644 --- a/recettes.css +++ b/recettes.css @@ -51,3 +51,9 @@ position: fixed; margin-right:2em; right:0; } + +#panier{ + position: fixed; + margin-right:2em; + right:0; +} diff --git a/recettes.js b/recettes.js index fe11ef9..e135542 100644 --- a/recettes.js +++ b/recettes.js @@ -60,10 +60,8 @@ function ajoutFormulaire(parent, recette){ // Vérification des résultats xhr.onreadystatechange = function(){ if (xhr.readyState === 4 && xhr.status === 200){ - let resultat = JSON.parse(xhr.response); cancel.disabled = true; add.disabled = false; - } } xhr.send(JSON.stringify(input)); @@ -89,46 +87,60 @@ function afficheRecettes(recette){ // parcours de toutes les recettes contenu dans l'objet for (var i = 0; i<recette.length; i++){ - // Création des éléments titre / paragraphe / liste - let conteneur = document.createElement('span'); // Contient les éléments html d'une recette - let image = document.createElement('img'); // image - let titre = document.createElement('h2'); // titre de niveau 2 - let paragraph = document.createElement('p'); // paragraphe contenant la liste et description - var liste = document.createElement('ul'); // liste - - liste.innerHTML += "Ingrédients :"; - - // Récupération du contenu - titre.textContent = recette[i].titre; - paragraph.textContent = recette[i].preparation; - let ingredients = recette[i].ingredients.split("|"); - for (var j = 0; j<ingredients.length; j++){ - liste.innerHTML += "<li>"+ingredients[j]+"</li>"; - } + // Supprime les éléments déjà existants avec le même nom + let existe = document.getElementById(recette[i].id); + if (existe == null){ + //existe.parentNode.removeChild(existe); + - const search = recette[i].titre; - // Génère l'objet de requête à envoyer au serveur (traiter par Service.php) : le nom de la recette - const input = { - images : search - }; - // Envoie de la requête - var xhr = new XMLHttpRequest(); - xhr.open('POST', "/Service.php", true); - xhr.onload = () => { - if (xhr.response != null){ - image.src = xhr.responseText; - } - }; - xhr.send(JSON.stringify(input)); + // Création des éléments titre / paragraphe / liste + let conteneur = document.createElement('span'); // Contient les éléments html d'une recette + conteneur.id = recette[i].id; + let titre = document.createElement('h2'); // titre de niveau 2 + let paragraph = document.createElement('p'); // paragraphe contenant la liste et description + var liste = document.createElement('ul'); // liste - // Ajout à la div de recettes - div.append(conteneur); - conteneur.append(titre); - conteneur.append(image); - conteneur.append(paragraph); - paragraph.append(liste); - ajoutFormulaire(paragraph, recette[i]); + liste.innerHTML += "Ingrédients :"; + + // Récupération du contenu + titre.textContent = recette[i].titre; + paragraph.textContent = recette[i].preparation; + let ingredients = recette[i].ingredients.split("|"); + for (var j = 0; j<ingredients.length; j++){ + liste.innerHTML += "<li>"+ingredients[j]+"</li>"; + } + + /* + const search = recette[i].titre; + // Génère l'objet de requête à envoyer au serveur (traiter par Service.php) : le nom de la recette + const input = { + images : search + }; + // Envoie de la requête + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/Service.php", true); + xhr.onload = () => { + if (xhr.response != null){ + image.src = xhr.responseText; + } + }; + + xhr.send(JSON.stringify(input)); + */ + // Ajout à la div de recettes + div.append(conteneur); + conteneur.append(titre); + if (recette[i].photo != null){ + let image = document.createElement('img'); // image + image.src = recette[i].photo; + conteneur.append(image); + + } + conteneur.append(paragraph); + paragraph.append(liste); + ajoutFormulaire(paragraph, recette[i]); + } } } -- GitLab