diff --git a/GestionUtilisateur.php b/GestionUtilisateur.php
index 83e49768a6177c2b6ea477314a6969ca9af7b37b..bccacb85bc53949babe2db896d0f724b07850b95 100644
--- a/GestionUtilisateur.php
+++ b/GestionUtilisateur.php
@@ -1,94 +1,62 @@
 <?php // Gestion de l'inscription 
     session_start(); // début session
 
-/**
- * Génère un formulaire d'inscription
- */
-function formInscription(){
-	$mysqli=mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion");
-    if (!$mysqli) {
-        die("Connection failed: " . mysqli_connect_error());
-    }
-    $describe = $mysqli->query('describe Boissons.utilisateurs;');
-    if ($describe->num_rows > 0) {
-        $form = '<h1> Inscription </h1>';
-        $form .= '<form method="post" id="inscription">';
-        while ($row = $describe->fetch_assoc()) {
-            if ($row["Field"] != "user_id") {
-                $form .= "<label for='" . $row["Field"] . "'>";
-                switch ($row["Field"]){
-                    case "nom":
-                        $form.= "Nom : ";
-                    break;
-                    case "prenom":
-                        $form.= "Prénom : ";
-                    break;
-                    case "pseudo":
-                        $form.= "Pseudo : ";
-                        $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+// Réalise l'inscription ou la connexion
+function realiseInscription ($json){
+    $mysqli= new mysqli('127.0.0.1', 'root', '', 'Boissons') or die("Erreur : tables inaccessibles");
 
-                    break;
-                    case "password":
-                        $form.= "Mot de passe : ";
-                        $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+    // 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']);
 
-                    break;
-                    case "sexe":
-                        $form.= "Sexe : </label>";
-                        $form .= "<input type='radio' id='Homme' name='" . $row["Field"] . "' > <label for='Homme'>Homme </label>";
-                        $form .= "<input type='radio' id='Femme' name='" . $row["Field"] . "' > <label for='Femme'>Femme </label>";
-                        $form .= "</br>";
-                    break;
-                    case "email":
-                        $form.= "E-mail : ";
-                    break;
-                }
-                if ($row["Field"] != "sexe" && $row["Field"] != "pseudo" && $row["Field"] != "password"){
-                    $form .= "</label> <input type='text' name='" . $row["Field"] . "' > </br>";
-                }
-            }
-        }
+    $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'];
     }
-    $form .= "<input type='submit' id='ok' value='Inscription'>";
-    
-    $form .= "</br> <div id='explications'> </diw> </br> </form>";
-    return $form;
+    $mysqli->close();
+	return json_encode($res);
 }
 
-/**
- * Génère un formulaire de connexion
- */
-function formConnexion(){
-	$mysqli=mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion");
-    if (!$mysqli) {
-        die("Connection failed: " . mysqli_connect_error());
+
+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'];
+        $out = true;
+    }else{
+        $out = false;
     }
-    $describe = $mysqli->query('describe Boissons.utilisateurs;');
-    if ($describe->num_rows > 0) {
-        $form = '<h1> Connexion </h1>';
-        $form .= '<form method="post" id="connexion">';
-        while ($row = $describe->fetch_assoc()) {
-                switch ($row["Field"]){
-                    case "pseudo":
-                        $form .= "<label for='" . $row["Field"] . "'>";
-                        $form.= "Pseudo : ";
-                        $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+    $mysqli->close();
+	return json_encode($out);
+}
 
-                    break;
-                    case "password":
-                        $form .= "<label for='" . $row["Field"] . "'>";
-                        $form.= "Mot de passe : ";
-                        $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+//    $resultat = $res->fetch_all(MYSQLI_ASSOC);
 
-                    break;
-                }
-        }
-        $form .= "<input type='submit' id='ok' value='Connexion'>";
-        
-        
-        $form .= "</br> <div id='explications'> </diw> </br></form>";
+
+
+
+// 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);
     }
-    return $form;
+    unset($decoded);
 }
 
 ?>
diff --git a/Requete.html b/Requete.php
similarity index 55%
rename from Requete.html
rename to Requete.php
index a1cc8888e8e8b2817772072fabf45f0e7b53f8dd..964e410e2b954801a7c0d0bf0d00d85ccfa6d781 100644
--- a/Requete.html
+++ b/Requete.php
@@ -1,21 +1,40 @@
+<?php
+    session_start();
+    echo 'id session :'.session_id();
+    echo 'pseudo : '.$_SESSION['pseudo'];
+?>
+
 <!DOCTYPE html>
-<html>
+<html lang="fr">
     <head>
         <title>Requete</title>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <script type="text/javascript" src="suggestion.js"> </script>
+        <script type="text/javascript" src="recettes.js"> </script>
+
     </head>
 
     <body>
+
+
+        <div id='authentification'>
+            <button type="button" onclick="location.href='connexion.php'">Se connecter</button>
+            <button type="button" onclick="location.href='inscription.php'">S'inscrire</button>
+
+            <div id='divInscription'></div>
+            <div id='divConnexion'></div>
+
+
+        </div>
         <form method="post" id="form">
         <fieldset id="fieldset">
             <!--
             Entrez votre recherche :
             <input list='listeNoms' type="text" id="requete" onkeyup="afficherSuggestionsRecettes()"/>
             -->
-            Sélectionner : 
+            Sélectionner :
 
-            <select name='categorie' id='categorie' onclick="optionsCategorie()" >
+            <label for='categorie'></label><select name='categorie' id='categorie' onclick="optionsCategorie()" >
                 <option value='Aliment'></option>
                 <option value='Aliment'>Aliment</option>
             </select>
diff --git a/Service.php b/Service.php
index 9a6e34f6c64d460eaa32e6184399d47427ff5d87..61edf3b7ba92a82d609639f1b49f975f8bd8baa6 100644
--- a/Service.php
+++ b/Service.php
@@ -1,5 +1,6 @@
 <?php
 
+session_start();
  /**
  * Se charge d'effectuer les requêtes et retourne un json
  */
@@ -32,7 +33,30 @@ 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);
 }
- 
+/**
+ * Envoie l'image sélectionné parmi celles existantes ou rien 
+ */
+function loadImage (string $nom){
+	$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 $file;
+		}else{
+			echo '';
+		}
+	}
+}
+
+// A MODIFIER
+function getPanier (string $req){
+	$requete = "SELECT DISTINCT  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);
 
@@ -51,19 +75,11 @@ if (isset($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 $file;
-		}else{
-			echo '';
-		}
-	}
+	loadImage($decoded['images']);
 	unset($decoded['images']);
 }
+if (isset($decoded['panier'])){
+
+}
+
 ?>
\ No newline at end of file
diff --git a/connexion.php b/connexion.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b9f593c1460558cf9ef949139d2b7b16c731c4f
--- /dev/null
+++ b/connexion.php
@@ -0,0 +1,54 @@
+<?php // Gestion de l'inscription 
+    session_start(); // début session
+?>
+
+
+
+<!DOCTYPE html>
+<html lang="fr">
+    <head>
+        <title>Inscription</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <script type="text/javascript" src="formulaire.js"> </script>
+
+    </head>
+
+    <body>
+        <?php // Gestion de l'inscription 
+
+            $mysqli=mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion");
+            if (!$mysqli) {
+                die("Connection failed: " . mysqli_connect_error());
+            }
+            $describe = $mysqli->query('describe Boissons.utilisateurs;');
+            if ($describe->num_rows > 0) {
+                $form = '<h1> Connexion </h1>';
+                $form .= '<form method="post" id="connexion">';
+                while ($row = $describe->fetch_assoc()) {
+                        switch ($row["Field"]){
+                            case "pseudo":
+                                $form .= "<label for='" . $row["Field"] . "'>";
+                                $form.= "Pseudo : ";
+                                $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+
+                            break;
+                            case "password":
+                                $form .= "<label for='" . $row["Field"] . "'>";
+                                $form.= "Mot de passe : ";
+                                $form .= "</label> <input type='password' required='true' name='" . $row["Field"] . "' > </br>";
+
+                            break;
+                        }
+                }
+                $form .= "<input type='submit' id='ok' value='Connexion'>";
+                $form .= "<input type='button' id='retour' value='Retour'>";
+
+                
+                
+                $form .= "</br> <div id='explications'> </diw> </br></form>";
+            }
+            echo $form;
+        ?>
+
+    </body>
+</html>
\ No newline at end of file
diff --git a/formulaire.js b/formulaire.js
index 979251e5f1e383bf532f0884b077c8b135fba351..35f004fa1ed6b6a74fee2145746ed35ab146f6d7 100644
--- a/formulaire.js
+++ b/formulaire.js
@@ -5,27 +5,96 @@
 window.addEventListener("load", function (){
 
     // Désactive par défaut le submit
-    var button = document.getElementById('ok');
-    button.disabled = true;
+    var ok = document.getElementById('ok');
+    var retour = this.document.getElementById('retour');
+    retour.addEventListener('click', () =>{
+        window.location.assign ("/Requete.php");
+    });
+    ok.disabled = true;
+
+    var formulaire = document.getElementById("inscription");
+    if (formulaire == null) return;
+
+    // zone explicative
+    var explications = this.document.getElementById('explications');
+    var divMdp = document.createElement("div");
+    var divPseudo = document.createElement("div");
+
+    explications.appendChild(divMdp);
+    explications.appendChild(divPseudo);
+    
+
+    // Récupère le champ password et le test
+    var password = formulaire.password;
+    var pseudo = formulaire.pseudo;
+    var email = formulaire.email;
+    var nom = formulaire.nom;
+    var prenom = formulaire.prenom;
+    const sexe = document.getElementsByName("sexe");
+
 
     // Envoie le formulaire au serveur
     function envoyerForm(){
-        var requete = new XMLHttpRequest();
-        var formdata = new FormData(formulaire);
-        // Vérifie si erreur lors de l'envoie du formulaire
-        requete.addEventListener("Error", function(event) {
-            alert("Erreur d'envoi de formulaire...");
+        let input;
+// Effectue la requête
+        var genre;
+        sexe.forEach(function(option) {
+            if (option.checked) {
+                genre = option;
+            }
         });
 
-
-        // Visualise dans la console l'objet envoyé au serveur
-        for (let [key, value] of formdata.entries()) {
-            console.log(`${key}: ${value}`);
+        if (genre){
+            input = {
+                mode : 'inscription',
+                pseudo : pseudo.value,
+                password : password.value,
+                email : email.value,
+                sexe : genre.value,
+                prenom : prenom.value,
+                nom : nom.value
+            };
+        }else{
+            input = {
+                mode: 'inscription',
+                pseudo: pseudo.value,
+                password: password.value,
+                email: email.value,
+                sexe: '',
+                prenom: prenom.value,
+                nom: nom.value
+            };
         }
 
-        // envoie effectif
-        requete.open("POST", "GestionUtilisateur.php");
-        requete.send(formdata);
+        console.log(input);
+
+        const xhr = new XMLHttpRequest();
+        xhr.open("POST", "/GestionUtilisateur.php", true);
+        xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8");
+
+        // Vérifie si erreur lors de l'envoie du formulaire
+        xhr.addEventListener("Error", function(event) {
+            alert("Erreur d'envoi de formulaire d'inscription...");
+        });
+
+        // Vérification des résultats
+        xhr.onreadystatechange = function(){
+            if (xhr.readyState === 4 && xhr.status === 200){
+                console.log(xhr.response);
+                if (xhr.response != null){
+                    let resultat = JSON.parse(xhr.response);
+                    if (resultat == true){
+                        ok.disabled = true;
+                        explications.textContent = "Inscription réussie!";
+                        window.location.assign ("/Requete.php");
+                    }else{
+                        explications.textContent = "Inscription a échouée! Ce pseudo est déjà utilisé. Veuillez réessayer.";
+                    }
+                }
+            }
+        } 
+        xhr.send(JSON.stringify(input));
+    
     }
 
     // Test si l'e-mail est vide ou dans un format correct
@@ -81,34 +150,20 @@ window.addEventListener("load", function (){
         }
     }
 
-    var formulaire = document.getElementById("inscription");
-    if (formulaire == null) return;
+
     formulaire.addEventListener("submit", function (event){
         event.preventDefault();
         envoyerForm();
     });
 
 
-    // Récupère le champ password et le test
-    var password = formulaire.password;
-    var pseudo = formulaire.pseudo;
-    var email = formulaire.email;
-
-    // zone explicative
-    var explications = this.document.getElementById('explications');
-    var divMdp = document.createElement("div");
-    var divPseudo = document.createElement("div");
-
-    explications.appendChild(divMdp);
-    explications.appendChild(divPseudo);
-
     // active le bouton d'envoi du formulaire ou le bloque et donne des explications
     formulaire.addEventListener('keyup', () =>{
         if (validPassword() && validPseudo() && validEmail()){
             explications.innerHTML = '';
-            button.disabled = false;
+            ok.disabled = false;
         }else{
-            button.disabled = true;
+            ok.disabled = true;
         }
     });
 
@@ -137,24 +192,66 @@ window.addEventListener("load", function (){
 window.addEventListener("load", function (){
 
     // Désactive par défaut le submit
-    var button = document.getElementById('ok');
-    button.disabled = true;
+    var ok = document.getElementById('ok');
+    var retour = document.getElementById('retour');
+    retour.addEventListener('click', () =>{
+        window.location.assign ("/Requete.php");
+    });
+
+    ok.disabled = true;
 
+    // Récupère le formulaire de connexion
+    var formulaire = document.getElementById("connexion");
+    if (formulaire == null) return; // Si le formulaire n'existe pas, abandon
 
-    // Envoie le formulaire
+    // Récupère le champ password et le test
+    var password = formulaire.password;
+    var pseudo = formulaire.pseudo;
+
+    // zone explicative
+    var explications = this.document.getElementById('explications');
+    var divMdp = document.createElement("div");
+    var divPseudo = document.createElement("div");
+
+    explications.appendChild(divMdp);
+    explications.appendChild(divPseudo);
+
+
+    // Envoie le formulaire au serveur
     function envoyerForm(){
-        var requete = new XMLHttpRequest();
-        var formdata = new FormData(formulaire);
-        requete.addEventListener("Error", function(event) {
-            alert("Erreur d'envoi de formulaire...");
+        // Effectue la requête
+        const input = {
+            mode : 'connexion',
+            pseudo : pseudo.value,
+            password : password.value
+        };
+
+        console.log(input);
+
+
+        const xhr = new XMLHttpRequest();
+        xhr.open("POST", "/GestionUtilisateur.php", true);
+        xhr.setRequestHeader("Content-Type", "application/json ; charset=UTF-8");
+
+        // Vérifie si erreur lors de l'envoie du formulaire
+        xhr.addEventListener("Error", function(event) {
+            alert("Erreur d'envoi de formulaire de connexion...");
         });
 
-        // Visualise dans la console l'objet envoyé au serveur
-        for (let [key, value] of formdata.entries()) {
-            console.log(`${key}: ${value}`);
-        }
-        requete.open("POST", "GestionUtilisateur.php");
-        requete.send(formdata);
+        // Vérification des résultats
+        xhr.onreadystatechange = function(){
+            if (xhr.readyState === 4 && xhr.status === 200){
+                let resultat = JSON.parse(xhr.response);
+                if (resultat == true){
+                    ok.disabled = true;
+                    explications.textContent = "Connexion réussie!";
+                    window.location.assign ("/Requete.php");
+                }else{
+                    explications.textContent = "Connexion a échouée! Vérifier le pseudo et le mot de passe.";
+                }
+            }
+        } 
+        xhr.send(JSON.stringify(input));
     }
 
     // Vérifie la longueur du pseudo et si il contient des caractères spéciaux
@@ -196,34 +293,21 @@ window.addEventListener("load", function (){
         }
     }
 
-    // Récupère le formulaire de connexion
-    var formulaire = document.getElementById("connexion");
-    if (formulaire == null) return; // Si le formulaire n'existe pas, abandon
+
     formulaire.addEventListener("submit", function (event){
         event.preventDefault();
         envoyerForm();
 
     });
 
-    // Récupère le champ password et le test
-    var password = formulaire.password;
-    var pseudo = formulaire.pseudo;
-    // zone explicative
-    var explications = this.document.getElementById('explications');
-    var divMdp = document.createElement("div");
-    var divPseudo = document.createElement("div");
-
-    explications.appendChild(divMdp);
-    explications.appendChild(divPseudo);
-
     // active le bouton d'envoi du formulaire ou le bloque et donne des explications
     formulaire.addEventListener('keyup', () =>{
         var explications = this.document.getElementById('explications');
         if (validPassword() && validPseudo()){
             explications.innerHTML = '';
-            button.disabled = false;
+            ok.disabled = false;
         }else{
-            button.disabled = true;
+            ok.disabled = true;
         }
     });
 
diff --git a/inscription.php b/inscription.php
new file mode 100644
index 0000000000000000000000000000000000000000..01e3486c36937c97e73aeab2b394826710c82fb1
--- /dev/null
+++ b/inscription.php
@@ -0,0 +1,72 @@
+<?php // Gestion de l'inscription 
+    session_start(); // début session
+?>
+
+
+
+<!DOCTYPE html>
+<html lang="fr">
+    <head>
+        <title>Inscription</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <script type="text/javascript" src="formulaire.js"> </script>
+
+    </head>
+
+    <body>
+        <?php // Gestion de l'inscription 
+            $mysqli=mysqli_connect('127.0.0.1', 'root', '') or die("Erreur de connexion");
+            if (!$mysqli) {
+                die("Connection failed: " . mysqli_connect_error());
+            }
+            $describe = $mysqli->query('describe Boissons.utilisateurs;');
+            if ($describe->num_rows > 0) {
+                $form = '<h1> Inscription </h1>';
+                $form .= '<form method="post" id="inscription">';
+                while ($row = $describe->fetch_assoc()) {
+                    if ($row["Field"] != "user_id") {
+                        $form .= "<label for='" . $row["Field"] . "'>";
+                        switch ($row["Field"]){
+                            case "nom":
+                                $form.= "Nom : ";
+                            break;
+                            case "prenom":
+                                $form.= "Prénom : ";
+                            break;
+                            case "pseudo":
+                                $form.= "Pseudo : ";
+                                $form .= "</label> <input type='text' required='true' name='" . $row["Field"] . "' > </br>";
+
+                            break;
+                            case "password":
+                                $form.= "Mot de passe : ";
+                                $form .= "</label> <input type='password' required='true' name='" . $row["Field"] . "' > </br>";
+
+                            break;
+                            case "sexe":
+                                $form.= "Sexe : </label>";
+                                $form .= "<input type='radio' id='Homme' value='h' name='" . $row["Field"] . "' > <label for='Homme'>Homme </label>";
+                                $form .= "<input type='radio' id='Femme' value='f' name='" . $row["Field"] . "' > <label for='Femme'>Femme </label>";
+                                $form .= "</br>";
+                            break;
+                            case "email":
+                                $form.= "E-mail : ";
+                                $form .= "</label> <input type='email' name='" . $row["Field"] . "' > </br>";
+
+                            break;
+                        }
+                        if ($row["Field"] != "sexe" && $row["Field"] != "pseudo" && $row["Field"] != "password" && $row["Field"] != "email"){
+                            $form .= "</label> <input type='text' name='" . $row["Field"] . "' > </br>";
+                        }
+                    }
+                }
+            }
+            $form .= "<input type='submit' id='ok' value='Inscription'>";
+            $form .= "<input type='button' id='retour' value='Retour'>";
+
+            $form .= "</br> <div id='explications'> </diw> </br> </form>";
+            echo $form;
+        ?>
+
+    </body>
+</html>
\ No newline at end of file
diff --git a/install.php b/install.php
index 63ae6b00eca74ed7cd28f21d4b5a86e672e239f4..1c7bd8bd694d20e39a3ddd16e82e20c7a9c61a8a 100644
--- a/install.php
+++ b/install.php
@@ -2,7 +2,7 @@
 
 
 
-  function query($link,$requete)
+function query($link,$requete)
   { 
     $resultat=mysqli_query($link,$requete) or die("$requete : ".mysqli_error($link));
 	return($resultat);
@@ -112,6 +112,16 @@ function loadDB(){
 				FOREIGN KEY (idBoisson) REFERENCES recettes(id) ON DELETE CASCADE, 
 				FOREIGN KEY (nomIngredient) REFERENCES aliments(alim_nom) ON DELETE CASCADE
 			);  
+
+			CREATE TABLE IF NOT EXISTS panier (
+				commande_id INT AUTO_INCREMENT PRIMARY KEY,
+				user_id INT NOT NULL,
+				recette_id INT NOT NULL,
+				FOREIGN KEY (user_id) REFERENCES utilisateurs(user_id) ON DELETE CASCADE, 
+				FOREIGN KEY (recette_id) REFERENCES recettes(id) ON DELETE CASCADE
+			);  
+
+
 			".$str;
 
 
diff --git a/recettes.js b/recettes.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e05f80507a0c102d9bee876eca8c132778f6253
--- /dev/null
+++ b/recettes.js
@@ -0,0 +1,215 @@
+
+// Ajoute un formulaire pour ajouter des recettes aux favoris
+function ajoutFormulaire(parent, recette){
+    let formRec = document.createElement('form');
+    let field = document.createElement('fieldset');
+    var add = document.createElement('button');
+    var cancel = document.createElement('button');
+    
+
+    // définition du formulaire
+    formRec.method = 'POST';
+    formRec.name = 'formRecette';
+    
+    // Définition du bouton d'ajout au favoris
+    add.textContent = "Ajouter aux favoris";
+    add.name = 'ajout';
+    add.type = 'button'; // Empêche le rechargement de le page
+    add.addEventListener('click', () => {
+        cancel.disabled = false;
+        add.disabled = true;
+        let input = {
+            panier : 'ajouter',
+            recette_id : recette.id,
+            user_id : 1
+
+        };
+        console.log(input);
+    })
+
+    // Définition du bouton annuler
+    cancel.textContent = "Retier des favoris";
+    cancel.name = 'retire';
+    cancel.type = 'button'; // Empêche le rechargement de le page
+    cancel.disabled = true;
+
+    cancel.addEventListener('click', () => {
+        cancel.disabled = true;
+        add.disabled = false;
+
+        let input = {
+            panier : 'retirer',
+            recette_id : recette.id,
+            user_id : 1
+
+        };
+        console.log(input);
+    })
+
+    // Mise en page
+    parent.append(formRec);
+    formRec.appendChild(field);
+    field.append(add);
+    field.append(cancel);
+    parent.append();
+    
+
+}
+
+
+// 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 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>";
+        }
+
+        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);
+        conteneur.append(image);
+        conteneur.append(paragraph);
+        paragraph.append(liste);
+        ajoutFormulaire(paragraph, recette[i]);
+    }
+    
+}
+
+
+/**
+ * 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 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);
+}
diff --git a/suggestion.js b/suggestion.js
index 1913139c37550b5f0f36025ffa0854eae53d0eb7..0ad4b8255e01f051260708ae79d927c1ab1a9741 100644
--- a/suggestion.js
+++ b/suggestion.js
@@ -11,8 +11,7 @@ function genereSuggestions(res){
     for (const nom of res){
         var opt = document.createElement("option");
         temp = JSON.stringify(nom["titre"])
-        var str = temp.replaceAll('"', '');
-        opt.value = str;
+        opt.value = temp.replaceAll('"', '');
         list.appendChild(opt);
         console.log(opt);
     }
@@ -20,99 +19,6 @@ 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
-        };
-        
-
-        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(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
@@ -140,7 +46,7 @@ function genereOptions(res){
 
     // Vérification des résultats
     xhr.onreadystatechange = function(){
-        if (xhr.readyState == 4 && xhr.status == 200){
+        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);
@@ -150,63 +56,3 @@ function genereOptions(res){
     }
     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);
-}