Skip to content
Snippets Groups Projects
Commit cb8a33a7 authored by vautrin33u's avatar vautrin33u
Browse files

1ere partie faite ! sauf images fuck them

parent 83a13afd
No related branches found
No related tags found
1 merge request!1Master
...@@ -3,20 +3,33 @@ ...@@ -3,20 +3,33 @@
<head> <head>
<title>Requete</title> <title>Requete</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<?php include("install.php"); ?>
<script type="text/javascript" src="suggestion.js"> </script> <script type="text/javascript" src="suggestion.js"> </script>
</head> </head>
<body> <body>
<form method="post" id="form"> <form method="post" id="form">
<fieldset> <fieldset id="fieldset">
Entrez votre recherche : <!--
Entrez votre recherche :
<input list='listeNoms' type="text" id="requete" onkeyup="afficherSuggestionsRecettes()"/> <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/> <br/>
</fieldset> </fieldset>
</form> </form>
<div id="infos">
</div>
<div id="recettes"></div>
<div id="infos"></div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Se charge d'effectuer les requêtes et retourne un json * Se charge d'effectuer les requêtes et retourne un json
*/ */
function queryDBB(string $str){ 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); $res = $mysqli->query($str);
$recettes = $res->fetch_all(MYSQLI_ASSOC); $recettes = $res->fetch_all(MYSQLI_ASSOC);
...@@ -16,9 +16,52 @@ function chercheTitres (string $nom){ ...@@ -16,9 +16,52 @@ function chercheTitres (string $nom){
$requete = "SELECT titre FROM recettes WHERE titre LIKE '{$nom}%'"; $requete = "SELECT titre FROM recettes WHERE titre LIKE '{$nom}%'";
echo queryDBB($requete); 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'); $in = file_get_contents('php://input');
$decoded = json_decode($in, true); $decoded = json_decode($in, true);
chercheTitres($decoded['requete']);
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
...@@ -22,19 +22,8 @@ function loadDB(){ ...@@ -22,19 +22,8 @@ function loadDB(){
} }
$cmpt = 0; $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 // Parcours de tous les aliments pour les ajouter à la base de donnée
while (current($tabHierarchie)){ while (current($tabHierarchie)){
...@@ -51,15 +40,35 @@ function loadDB(){ ...@@ -51,15 +40,35 @@ function loadDB(){
while ($alim = current($souscat)){ while ($alim = current($souscat)){
$prep = mysqli_real_escape_string($mysqli, key($tabHierarchie)); $prep = mysqli_real_escape_string($mysqli, key($tabHierarchie));
$fils = mysqli_real_escape_string($mysqli, $alim); $fils = mysqli_real_escape_string($mysqli, $alim);
$str .= "INSERT INTO hierarchie(super_nom, sous_nom) VALUES ('".$prep."', '".$fils."'); "; $str .= "INSERT INTO hierarchie(super_nom, sous_nom) VALUES ('".$prep."', '".$fils."'); ";
next($souscat); next($souscat);
} }
next($tabHierarchie); 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"; $base="Boissons";
$Sql=" $Sql="
...@@ -95,6 +104,14 @@ function loadDB(){ ...@@ -95,6 +104,14 @@ function loadDB(){
FOREIGN KEY (super_nom) REFERENCES aliments(alim_nom) ON DELETE CASCADE, FOREIGN KEY (super_nom) REFERENCES aliments(alim_nom) ON DELETE CASCADE,
FOREIGN KEY (sous_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; ".$str;
......
...@@ -20,6 +20,85 @@ function genereSuggestions(res){ ...@@ -20,6 +20,85 @@ function genereSuggestions(res){
textbox.appendChild(list); 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 * Affiche une liste de cocktails
...@@ -54,8 +133,66 @@ function genereSuggestions(res){ ...@@ -54,8 +133,66 @@ function genereSuggestions(res){
genereSuggestions(resultat); 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)); 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);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment