diff --git a/Requete.html b/Requete.html index bf7bfb1de102dcf2141c4436ea2cba7c88daa5bf..a1cc8888e8e8b2817772072fabf45f0e7b53f8dd 100644 --- a/Requete.html +++ b/Requete.html @@ -3,20 +3,33 @@ <head> <title>Requete</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <?php include("install.php"); ?> <script type="text/javascript" src="suggestion.js"> </script> </head> <body> <form method="post" id="form"> - <fieldset> - Entrez votre recherche : + <fieldset id="fieldset"> + <!-- + Entrez votre recherche : <input list='listeNoms' type="text" id="requete" onkeyup="afficherSuggestionsRecettes()"/> + --> + Sélectionner : + + <select name='categorie' id='categorie' onclick="optionsCategorie()" > + <option value='Aliment'></option> + <option value='Aliment'>Aliment</option> + </select> + + <button type="button" onclick="remettreAZero()">Remise à zéro</button> <br/> </fieldset> </form> + <div id="infos"> + + </div> + + <div id="recettes"></div> - <div id="infos"></div> </body> </html> \ No newline at end of file diff --git a/Service.php b/Service.php index 590253b39dd511cde25086632e19cf35c525be8d..ecfd3f47439c2f67a2e3462543c561c030db6c99 100644 --- a/Service.php +++ b/Service.php @@ -4,7 +4,7 @@ * Se charge d'effectuer les requêtes et retourne un json */ function queryDBB(string $str){ - $mysqli= new mysqli('127.0.0.1', 'root', '', 'Cocktails') or die("Erreur : tables inaccessibles"); + $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles"); $res = $mysqli->query($str); $recettes = $res->fetch_all(MYSQLI_ASSOC); @@ -16,9 +16,52 @@ function chercheTitres (string $nom){ $requete = "SELECT titre FROM recettes WHERE titre LIKE '{$nom}%'"; echo queryDBB($requete); } + +/** + * Récupère les sous catégories + */ +function getCategorie (string $req){ + $requete = "SELECT sous_nom FROM hierarchie WHERE super_nom = '{$req}'"; + echo queryDBB($requete); +} + +/** + * Récupères les recettes + */ +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}'"; + echo queryDBB($requete); +} - $in = file_get_contents('php://input'); - $decoded = json_decode($in, true); - chercheTitres($decoded['requete']); +$in = file_get_contents('php://input'); +$decoded = json_decode($in, true); +if (isset($decoded['requete'])){ + chercheTitres($decoded['requete']); + unset($decoded['requete']); + +} +if (isset($decoded['hierarchie'])){ + getCategorie ($decoded['hierarchie']); + unset($decoded['hierarchie']); + +} +if (isset($decoded['recettes'])){ + grabRecettes ($decoded['recettes']); + unset($decoded['recettes']); +} +if (isset($decoded['images'])){ + $nom = $decoded['images']; + $nom = str_replace(" ", "_", $nom); + $nom = str_replace("'", "", $nom); + + $accents = array('è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ñ'=>'n'); + $nom = strtr( $nom, $accents ); + foreach (array_filter(glob('Photos/*.jpg'), 'is_file') as $file){ + if ('Photos/'.$nom.'.jpg' == $file){ + echo '<img src="data:image/jpg;base64,'.base64_encode(file_get_contents($file)).'">'; + } + } + unset($decoded['images']); +} ?> \ No newline at end of file diff --git a/install.php b/install.php index a40b47060c6cfa17c844d2dfbdeb4a0b54276e14..63ae6b00eca74ed7cd28f21d4b5a86e672e239f4 100644 --- a/install.php +++ b/install.php @@ -22,19 +22,8 @@ function loadDB(){ } $cmpt = 0; - $str; + $str =""; - foreach($tabRecettes as $colonne){ - $titre = mysqli_real_escape_string($mysqli, $colonne['titre']); - $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."')"; - }else{ - $str .= "INSERT INTO recettes VALUES (".$cmpt.", '".$titre."', '".$ingred."', '".$prep."'); "; - - } - } // Parcours de tous les aliments pour les ajouter à la base de donnée while (current($tabHierarchie)){ @@ -51,15 +40,35 @@ function loadDB(){ while ($alim = current($souscat)){ $prep = mysqli_real_escape_string($mysqli, key($tabHierarchie)); $fils = mysqli_real_escape_string($mysqli, $alim); - $str .= "INSERT INTO hierarchie(super_nom, sous_nom) VALUES ('".$prep."', '".$fils."'); "; - - next($souscat); } next($tabHierarchie); } + $valeur = 1; + + // Parcours des recettes et génération des éléments correspondants dans leurs tables + foreach($tabRecettes as $colonne){ + $titre = mysqli_real_escape_string($mysqli, $colonne['titre']); + $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."')"; + }else{ + $str .= "INSERT INTO recettes VALUES (".$cmpt.", '".$titre."', '".$ingred."', '".$prep."'); "; + } + + while ($ingred = current($colonne['index'])){ + $prep = mysqli_real_escape_string($mysqli, $ingred); + $str .= "INSERT INTO ingredientsderecettes VALUES (".$cmpt.", '".$valeur."', '".$prep."'); "; + next($colonne['index']); + } + $valeur++; + } + + + $base="Boissons"; $Sql=" @@ -95,6 +104,14 @@ function loadDB(){ FOREIGN KEY (super_nom) REFERENCES aliments(alim_nom) ON DELETE CASCADE, FOREIGN KEY (sous_nom) REFERENCES aliments(alim_nom) ON DELETE CASCADE ); + + CREATE TABLE IF NOT EXISTS ingredientsderecettes ( + id INT AUTO_INCREMENT PRIMARY KEY, + idBoisson INT NOT NULL, + nomIngredient VARCHAR(255) NOT NULL, + FOREIGN KEY (idBoisson) REFERENCES recettes(id) ON DELETE CASCADE, + FOREIGN KEY (nomIngredient) REFERENCES aliments(alim_nom) ON DELETE CASCADE + ); ".$str; diff --git a/suggestion.js b/suggestion.js index 85a672faacfac445560243ace0f83c18dfa4020c..3520c0520bda5253c26645b4f41a9a9d42c94a94 100644 --- a/suggestion.js +++ b/suggestion.js @@ -20,6 +20,85 @@ function genereSuggestions(res){ textbox.appendChild(list); } +// Affiche les recettes +function afficheRecettes(recette){ + // Récupère l'élément qui va afficher les recettes + let div = document.getElementById("recettes"); + + // 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 image = document.createElement('img'); + let titre = document.createElement('h2'); + let paragraph = document.createElement('p'); + var liste = document.createElement('ul'); + 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; + const input = { + images : search + }; + + // Ajout à la div de recettes + div.append(titre); + div.append(image); + div.append(paragraph); + div.append(liste); + } + +} + +/** + * Génère options à partir des résultats de la table hiérarchie + * @param {} res + */ +function genereOptions(res){ + // Ajoute les options + var select = document.getElementById('categorie'); + var recettes = document.getElementById('recettes'); + recettes.innerHTML = ""; + select.innerHTML = ""; + + //console.log(res); + for (const objet of res){ + var opt = document.createElement("option"); + opt.textContent = objet.sous_nom; + opt.value = objet.sous_nom; + select.appendChild(opt); + + // Effectue la requête + const input = { + recettes: objet.sous_nom + }; + + const xhr = new XMLHttpRequest(); + xhr.open("POST", "Service.php", true); + xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8"); + + // Vérification des résultats + xhr.onreadystatechange = function(){ + if (xhr.readyState == 4 && xhr.status == 200){ + // Si le retour n'est pas vide, on affiche les titres + if (this.response != null){ + const recipes = JSON.parse(xhr.response); + if (recipes.length > 0){ // On ignore au moins + afficheRecettes(recipes); + } + } + } + } + xhr.send(JSON.stringify(input)); + } +} + /** * Affiche une liste de cocktails @@ -54,8 +133,66 @@ function genereSuggestions(res){ genereSuggestions(resultat); } } - } + } + xhr.send(JSON.stringify(input)); +} + + +/** + * Affiche les options de catégories + */ + function optionsCategorie(){ + // Empeche le rechargement de la page quand on valide + document.getElementById("form").addEventListener("submit", function (e) { + e.preventDefault(); + return false; + }); + + // Récupère la position à laquelle on veut afficher des informations + + var zone = document.getElementById("categorie"); + var infos = document.getElementById("infos"); + + // Création d'un objet contenant la requêtes + var val = zone.value; + infos.innerHTML += " > " + val; + var input = { + hierarchie: val + }; + + // Demande au serveur php (donc à la db) les noms de + const xhr = new XMLHttpRequest(); + xhr.open("POST", "Service.php", true); + xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8"); + // Vérification des résultats + xhr.onreadystatechange = function(){ + if (xhr.readyState == 4 && xhr.status == 200){ + // Si le retour n'est pas vide, on affiche les titres + if (this.response != null){ + var resultat = JSON.parse(xhr.response); + genereOptions(resultat); + } + } + } xhr.send(JSON.stringify(input)); +} + +// Permet de recharger le contenu de la page sans recharger la page +function remettreAZero(){ + document.getElementById("recettes").innerHTML = ""; + document.getElementById("infos").innerHTML = ""; + var select = document.getElementById("categorie"); + console.log(select.value); + select.innerHTML = ""; + var opt, opt2; + opt = document.createElement("option"); + opt2 = document.createElement("option"); + opt.textContent = ''; + opt.value = 'Aliment'; + opt2.textContent = 'Aliment'; + opt2.value = 'Aliment'; + select.appendChild(opt); + select.appendChild(opt2); }