diff --git a/AccountConnection.php b/AccountConnection.php
new file mode 100644
index 0000000000000000000000000000000000000000..050f7513cda35a08aa62351378576ed6309917a1
--- /dev/null
+++ b/AccountConnection.php
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Drinkpedia</title>
+    <meta charset="UTF-8">
+    <link rel="stylesheet" type="text/css" href="css/MyAccount.css">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+</head>
+
+<body>
+    <h1>Connexion</h1>
+
+    <label>Email</label>
+    <input id="emailInput" type="email">
+    <label>Mot de passe</label>
+    <input id="pwdInput" type="password">
+    <button onclick="tryConnect();">Se connecter</button>
+    <label>Pas de compte ?</label>
+    <a onclick="goToCreate();">Créer</a>
+
+    <script src="scripts/DataQuery.js"></script>
+    <script>
+        function goToCreate()
+        {
+            var data = {
+                event: 'usercreate',
+                value: ''
+            };
+            window.top.postMessage(data, [data.event, data.value]); 
+        }
+
+        function tryConnect()
+        {
+            let ei = document.getElementById('emailInput');
+            let pi = document.getElementById('pwdInput');
+            let email = ei.value;
+            let pwd = pi.value;
+            connect_user(email, pwd, function(e){
+                if(e == '1')
+                {
+                    var data = {
+                        event: 'useraccount',
+                        value: e
+                    };
+                    window.top.postMessage(data, [data.event, data.value]); 
+                }
+                else
+                {
+                    alert('Mauvaise combinaison email/mot de passe');
+                }
+            });
+        }
+    </script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/AccountCreation.php b/AccountCreation.php
new file mode 100644
index 0000000000000000000000000000000000000000..cbbfd0564f608c0a6ace2c05f43bbf023b0ccf83
--- /dev/null
+++ b/AccountCreation.php
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Drinkpedia</title>
+    <meta charset="UTF-8">
+    <link rel="stylesheet" type="text/css" href="css/MyAccount.css">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+</head>
+
+<body>
+    <h1>Création d'un compte</h1>
+
+    <label>Email</label>
+    <input id="emailInput" type="email">
+    <label>Mot de passe</label>
+    <input id="pwdInput" type="password">
+    <button onclick="createAccount();">Créer mon compte</button>
+    <label>Déjà un compte ?</label>
+    <a onclick="goToConnect();">Se connecter</a>
+
+    <script src="scripts/DataQuery.js"></script>
+    <script>
+        function goToConnect()
+        {
+            var data = {
+                event: 'userconnect',
+                value: ''
+            };
+            window.top.postMessage(data, [data.event, data.value]); 
+        }
+
+        function createAccount()
+        {
+            let ei = document.getElementById('emailInput');
+            let pi = document.getElementById('pwdInput');
+            let email = ei.value;
+            let pwd = pi.value;
+            create_user(email, pwd, function(e){
+                if(e == '1')
+                {
+                    connect_user(email, pwd, function(j)
+                    {
+                        if(j == '0')
+                        {
+                            alert('Oops something went wrong');
+                        }
+                        else
+                        {
+                            var data = {
+                                event: 'useraccount',
+                                value: e
+                            };
+                            window.top.postMessage(data, [data.event, data.value]); 
+                        }
+                    })
+                }
+                else
+                {
+                    alert('Erreur - email déjà associé à un compte')
+                }
+            });
+        }
+    </script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/Hierarchy.php b/Hierarchy.php
index 2ba5390bef2925a84f2cde11778fdff772e276d5..b664e0e52cb06dad84004ef74e2449e6447d662d 100644
--- a/Hierarchy.php
+++ b/Hierarchy.php
@@ -13,7 +13,6 @@
     <!-- PHP -->
 
     <?php
-
         // DEBUT DES ACTIONS SUR LA PAGE :
         include "scripts/Functions.php";
 
diff --git a/Home.php b/Home.php
index b6253bccf9d4f44f18658555ca996df001b6c14d..275d836cb28a15a8acb3f99124b9e9d8873d2c2d 100644
--- a/Home.php
+++ b/Home.php
@@ -8,6 +8,12 @@
 
 <body id="body">
 
+    <?php
+        include 'scripts/SQL.php';
+        //connect_db();
+
+    ?>
+
     <div class="background"></div>
 
     <div id="content">
@@ -73,6 +79,18 @@
                 setActiveTab('tabBtnI');
                 switchView('Hierarchy.php?element="' + m_value + '"');
             }
+            else if(m_event == 'useraccount')
+            {
+                switchView('MyAccount.php');
+            }
+            else if(m_event == 'userconnect')
+            {
+                switchView('AccountConnection.php');
+            }
+            else if(m_event == 'usercreate')
+            {
+                switchView('AccountCreation.php');
+            }
         }
 
         function hideBlurred()
@@ -132,8 +150,8 @@
 
         function tabButtonClicked(b)
         {
-                setActiveTab(b.id);
-                switchView(activeTabButton.value);
+            setActiveTab(b.id);
+            switchView(activeTabButton.value);
         }
 
         function startLoadingScreen()
diff --git a/MyAccount.php b/MyAccount.php
index 93307b639eaba9d61a9a742b64864264434e6500..442707276673045c7797c31eb6b1170956418098 100644
--- a/MyAccount.php
+++ b/MyAccount.php
@@ -4,20 +4,51 @@
     <title>Drinkpedia</title>
     <meta charset="UTF-8">
     <link rel="stylesheet" type="text/css" href="css/MyAccount.css">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+    <script src="scripts/DataQuery.js"></script>
 </head>
 
 <body>
+    <script>
+        is_connected(function(e)
+        {
+            if(e == '0')
+            {
+                var data = {
+                    event: 'userconnect',
+                    value: e
+                };
+                window.top.postMessage(data, [data.event, data.value]); 
+            }
+        });
+    </script>
+
     <h1>My Account</h1>
-    <?php 
 
-    include "scripts/SQL.php";
+    <label id="email"></label>
+
+    <button onclick="disconnect();">Se déconnecter</button>
+
+    <script>
+
+        let emailLabel = document.getElementById('email');
+        get_email(function(e){
+            emailLabel.innerHTML = 'Adresse email : ' + e;
+        });
+        
+        function disconnect()
+        {
+            disconnect_user(function(f)
+            {
+                var data = {
+                    event: 'userconnect',
+                    value: ''
+                };
+                window.top.postMessage(data, [data.event, data.value]); 
+            });
+        }
+    </script>
 
-    echo connect('ivanalglave@outlook.fr', '123');
-    echo '<br>';
-    echo get_email();
-    echo '<br>';
-    echo get_favourites();
-    ?>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/MyFavouriteRecipes.php b/MyFavouriteRecipes.php
index 7a2728e4dc22118a1e8e20915886211937efe59e..e5a007d78b4f351b51aa140b0417e358e7fa63f4 100644
--- a/MyFavouriteRecipes.php
+++ b/MyFavouriteRecipes.php
@@ -9,16 +9,17 @@
 <body>
     <script src="scripts/DataQuery.js"></script>
     <script>
-            getFavourites(function(e)
-            {
-                var data = {
-                    event: 'recipelist',
-                    value: e,
-                    showScore: 'false',
-                    title: 'Favoris :'
-                };
-                window.top.postMessage(data, [data.event, data.value, data.showScore, data.title]);
-            })
+        
+        getFavourites(function(e)
+        {
+            var data = {
+                event: 'recipelist',
+                value: e,
+                showScore: 'false',
+                title: 'Favoris :'
+            };
+            window.top.postMessage(data, [data.event, data.value, data.showScore, data.title]); 
+        })
     </script>
 </body>
 
diff --git a/RecipeList.php b/RecipeList.php
index bd2e359bccb810a05f544a1e3e612907d22bcd2c..8a145305e2b4cc66497ac056013c3cfe2cc992b0 100644
--- a/RecipeList.php
+++ b/RecipeList.php
@@ -10,7 +10,6 @@
 <body>
 
     <?php 
-
         include "Donnees.inc.php";
 
         include "scripts/Functions.php";
@@ -84,17 +83,12 @@
 
             function switchFavourite(img)
             {
-                //let new_src = "images/favourite_off.png";
                 if(!img.classList.contains('favouriteOn')) 
                 {
                     new_src = "images/favourite_on.png";
                     img.classList.add('favouriteOn');
                     img.classList.remove('favouriteOff');
                     
-                    /*let f = sessionStorage.getItem('favourites');
-                    if(f != '') f += '|';
-                    f += img.alt;
-                    sessionStorage.setItem('favourites', f);*/
                     addFavourite(img.alt, function(e) {
                         refreshFavourites();
                     });
@@ -103,50 +97,19 @@
                 {
                     img.classList.remove('favouriteOn');
                     img.classList.add('favouriteOff');
-
-                    /*let f = sessionStorage.getItem('favourites').split('|');
-                    let nf = '';
-                    for(let i = 0; i < f.length; i++)
-                    {
-                        if(img.alt != f[i])
-                        {
-                            if(i != 0) nf += '|';
-                            nf += f[i];
-                        }
-                    }*/
                     
                     removeFavourite(img.alt, function(e){
                         refreshFavourites();
                     });
                 }
-                
-                //img.src= new_src;
             }
             
             function refreshFavourites()
             {
                 let collection = document.getElementsByClassName('toggleFavourite');
-                /*let favourites = sessionStorage.getItem('favourites').split('|');
-                for(let i = 0; i < collection.length; i++)
-                {
-                    let node = collection[i];
-                    let r_id = node.value;
-                    if(favourites.findIndex(val => val == node.alt) >= 0)
-                    {
-                        node.classList.add('favouriteOn');
-                        node.classList.remove('favouriteOff');
-                        node.src = "images/favourite_on.png";
-                    }
-                    else
-                    {
-                        node.classList.add('favouriteOff');
-                        node.classList.remove('favouriteOn');
-                        node.src = "images/favourite_off.png";
-                    }
-                }*/
 
                 getFavourites(function(e) {
-                    let favourites = e;
+                    let favourites = e.split('|');
                     for(let i = 0; i < collection.length; i++)
                     {
                         let node = collection[i];
diff --git a/RecipeView.php b/RecipeView.php
index e64b3e9200ec13c524f2ba32004fc941154b96a1..517e7ec80b5dee8fd49958272c1c4c6121cab54b 100644
--- a/RecipeView.php
+++ b/RecipeView.php
@@ -1,6 +1,7 @@
 <!-- HTML Fragment to display a recipe -->
 <head>
     <link rel="stylesheet" type="text/css" href="css/RecipeView.css">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
 </head>
 
 <body>
@@ -46,6 +47,7 @@
 
     </div>
 
+    <script src="scripts/DataQuery.js"></script>
     <script>
         
         document.addEventListener('keyup', function (e)
@@ -60,58 +62,56 @@
                 }
             });
 
-        function switchFavourite(img)
-        {
-            let new_src = "images/favourite_off.png";
-            if(!img.classList.contains('favouriteOn')) 
+            function switchFavourite(img)
             {
-                new_src = "images/favourite_on.png";
-                img.classList.add('favouriteOn');
-                img.classList.remove('favouriteOff');
-                
-                let f = sessionStorage.getItem('favourites');
-                if(f != '') f += '|';
-                f += img.alt;
-                sessionStorage.setItem('favourites', f);
+                if(!img.classList.contains('favouriteOn')) 
+                {
+                    new_src = "images/favourite_on.png";
+                    img.classList.add('favouriteOn');
+                    img.classList.remove('favouriteOff');
+                    
+                    addFavourite(img.alt, function(e) {
+                        refreshFavourites();
+                    });
+                }
+                else
+                {
+                    img.classList.remove('favouriteOn');
+                    img.classList.add('favouriteOff');
+                    
+                    removeFavourite(img.alt, function(e){
+                        refreshFavourites();
+                    });
+                }
             }
-            else
+
+            function refreshFavourites()
             {
-                img.classList.remove('favouriteOn');
-                img.classList.add('favouriteOff');
+                let collection = document.getElementsByClassName('toggleFavourite');
 
-                let f = sessionStorage.getItem('favourites').split('|');
-                let nf = '';
-                for(let i = 0; i < f.length; i++)
-                {
-                    if(img.alt != f[i])
+                getFavourites(function(e) {
+                    let favourites = e.split('|');
+                    for(let i = 0; i < collection.length; i++)
                     {
-                        if(i == 0) nf += '|';
-                        nf += f[i];
+                        let node = collection[i];
+                        let r_id = node.value;
+                        if(favourites.findIndex(val => val == node.alt) >= 0)
+                        {
+                            node.classList.add('favouriteOn');
+                            node.classList.remove('favouriteOff');
+                            node.src = "images/favourite_on.png";
+                        }
+                        else
+                        {
+                            node.classList.add('favouriteOff');
+                            node.classList.remove('favouriteOn');
+                            node.src = "images/favourite_off.png";
+                        }
                     }
-                }
-                sessionStorage.setItem('favourites', nf);
+                })
             }
-            
-            img.src= new_src;
-        }
 
-        let collection = document.getElementsByClassName('toggleFavourite');
-            let favourites = sessionStorage.getItem('favourites').split('|');
-            for(let i = 0; i < collection.length; i++)
-            {
-                let node = collection[i];
-                let r_id = node.value;
-                if(favourites.findIndex(val => val == node.alt) >= 0)
-                {
-                    node.classList.add('favouriteOn');
-                    node.src = "images/favourite_on.png";
-                }
-                else
-                {
-                    node.classList.add('favouriteOff');
-                    node.src = "images/favourite_off.png";
-                }
-            }
+            refreshFavourites();
     </script>
 
 </body>
\ No newline at end of file
diff --git a/Recipes.php b/Recipes.php
index 6c3f0b074fb5a3568ad271e797fece4f8dce587f..48c726f71d29e19347e311e3c19305d4f123ed46 100644
--- a/Recipes.php
+++ b/Recipes.php
@@ -10,7 +10,6 @@
 <body>
     <script src="scripts/DataQuery.js"></script>
     <script>
-
         getRecipes([], [], 0, true, true, function(e) {
             var data = {
                 event: 'recipelist',
diff --git a/scripts/DataQuery.js b/scripts/DataQuery.js
index 86f63e64405937ae988848fb396020f3360176f8..ddab936acecbfb9e80afc089c7fd9f662eb795d6 100644
--- a/scripts/DataQuery.js
+++ b/scripts/DataQuery.js
@@ -25,14 +25,25 @@ function getAllIngredients(callback)
     query('getAllIngredients', [], callback);
 }
 
+function connect_db(callback)
+{
+    query('connect_db', [], callback);
+}
+
 function create_user(u_email, u_pwd, callback)
 {
     query('create_user', [u_email, u_pwd], callback);
 }
 
-function connect(u_email, u_pwd, callback)
+function connect_user(u_email, u_pwd, callback)
+{
+    query('connect_user', [u_email, u_pwd], callback);
+}
+
+function disconnect_user(callback)
 {
-    query('connect', [u_email, u_pwd], callback);
+    sessionStorage.setItem('favourites', '');
+    query('disconnect_user', [], callback);
 }
 
 function is_connected(callback)
@@ -62,18 +73,31 @@ function set_password(u_newpwd, callback)
 
 function getFavourites(callback)
 {
-    is_connected(function(e)
+    get_favourites(function(f)
     {
-        alert('Connected : ' + (e ? 'true' : 'false'));
+        let localFavourites = sessionStorage.getItem('favourites').split('|');
+        let dbFavourites = f.split('|');
+        let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites));
         
-        get_favourites(function(f)
+        var resultStr = '';
+        let first = true;
+
+        for(let i = 0; i < res.length; i++)
         {
-            let localFavourites = sessionStorage.getItem('favourites').split('|');
-            let dbFavourites = f.split('|');
-            let res = joinCheckDuplicates(localFavourites, dbFavourites);
-            callback(res);
+            if(res[i] != '')
+            {
+                if(!first) resultStr += '|';
+                else first = false;
+                resultStr += res[i];
+            }
+        }
+
+        sessionStorage.setItem('favourites', resultStr);
+    
+        set_favourites(resultStr, function(g) {
+            callback(resultStr);
         });
-    })
+    });
 }
 
 function joinCheckDuplicates(e1, e2)
@@ -83,7 +107,9 @@ function joinCheckDuplicates(e1, e2)
     {
         if(e3.indexOf(e2[i]) < 0) e3.push(e2[i]);
     }
-    return e3;
+    return e3.sort(function(a, b) {
+        return a - b;
+      });
 }
 
 function addFavourite(id, callback)
@@ -92,11 +118,12 @@ function addFavourite(id, callback)
     {
         let localFavourites = sessionStorage.getItem('favourites').split('|');
         let dbFavourites = f.split('|');
-        let res = joinCheckDuplicates(localFavourites, dbFavourites);
+        let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites));
+
         let indexOfTest = res.indexOf(id);
         if(indexOfTest < 0) res.push(id);
 
-        let resultStr = '';
+        var resultStr = '';
         let first = true;
 
         for(let i = 0; i < res.length; i++)
@@ -108,12 +135,15 @@ function addFavourite(id, callback)
                 resultStr += res[i];
             }
         }
+        
+        //alert(sessionStorage.getItem('favourites') + ' ~ ' + f + ' + ' + id + ' => ' + resultStr);
 
         sessionStorage.setItem('favourites', resultStr);
 
-        set_favourites(function(g) {
+        set_favourites(resultStr, function(g) {
+            //alert('New favourites : ' + g);
             callback(resultStr);
-        })
+        });
     });
 }
 
@@ -123,11 +153,12 @@ function removeFavourite(id, callback)
     {
         let localFavourites = sessionStorage.getItem('favourites').split('|');
         let dbFavourites = f.split('|');
-        let res = joinCheckDuplicates(localFavourites, dbFavourites);
+        let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites));
+        res.sort();
         let indexOfToRemove = res.indexOf(id);
         if(indexOfToRemove >= 0) res.splice(indexOfToRemove, 1);
 
-        let resultStr = '';
+        var resultStr = '';
         let first = true;
 
         for(let i = 0; i < res.length; i++)
@@ -135,14 +166,18 @@ function removeFavourite(id, callback)
             if(res[i] != '')
             {
                 if(!first) resultStr += '|';
+                else first = false;
                 resultStr += res[i];
             }
         }
+        
+        //alert(sessionStorage.getItem('favourites') + ' ~ ' + f + ' - ' + id + ' => ' + resultStr);
 
         sessionStorage.setItem('favourites', resultStr);
 
-        set_favourites(function(g) {
+        set_favourites(resultStr, function(g) {
+            //alert('New favourites : ' + g);
             callback(resultStr);
-        })
+        });
     });
 }
\ No newline at end of file
diff --git a/scripts/DataQuery.php b/scripts/DataQuery.php
index 1ae0401152e0411f0a1a4b549cc57db80cbf9a94..cf6ce18eb62ac254f8233f4e5333a438564d8fe5 100644
--- a/scripts/DataQuery.php
+++ b/scripts/DataQuery.php
@@ -27,13 +27,21 @@
     {
         echo implode('|', getAllIngredients());
     }
+    else if($funcName == 'connect_db')
+    {
+        echo connect_db();
+    }
     else if($funcName == 'create_user')
     {
         echo create_user($_POST['arguments'][0], $_POST['arguments'][1]);
     }
-    else if($funcName == 'connect')
+    else if($funcName == 'connect_user')
+    {
+        echo connect_user($_POST['arguments'][0], $_POST['arguments'][1]);
+    }
+    else if($funcName == 'disconnect_user')
     {
-        echo connect($_POST['arguments'][0], $_POST['arguments'][1]);
+        echo disconnect_user();
     }
     else if($funcName == 'is_connected')
     {
diff --git a/scripts/SQL.php b/scripts/SQL.php
index a8376c5e0a8b7b0077a6fe1953a5a2745cdd5f83..4b5453b2f6eeabefc88976b5a6a7e09d1b4691eb 100644
--- a/scripts/SQL.php
+++ b/scripts/SQL.php
@@ -1,20 +1,28 @@
 <?php
 
+session_start();
 $bdd = new PDO('mysql:host=localhost;dbname=drinkpedia;charset=utf8', 'root', '', array(
     PDO::ATTR_PERSISTENT => true
 ));
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-$email = '';
+
+function connect_db()
+{
+
+}
 
 function create_user($u_email, $u_pwd)
 {
     global $bdd;
+    $res = $bdd->query('SELECT email FROM user WHERE email LIKE \'' . $u_email . '\'');
+    if($res->fetch()) return '0';
     $bdd->query('INSERT INTO user (email, pwdhash, favourites) VALUES (\'' . $u_email . '\', \'' . $u_pwd . '\', \'1|2|4\')');
+    return '1';
 }
 
-function connect($u_email, $u_pwd)
+function connect_user($u_email, $u_pwd)
 {
-    global $bdd, $email;
+    global $bdd;
     $res = $bdd->query('SELECT pwdhash FROM user WHERE email LIKE \'' . $u_email . '\'');
     if($res)
     {
@@ -24,52 +32,71 @@ function connect($u_email, $u_pwd)
             $fetched_pwd = $res[0];
             if($fetched_pwd == $u_pwd)
             {
-                $email = $u_email;
-                return true;
+                $_SESSION['email'] = $u_email;
+                return '1';
             }
         }
     }
-    return false;
+    return '0';
+}
+
+function disconnect_user()
+{
+    $_SESSION['email'] = '';
 }
 
 function is_connected()
 {
-    global $email;
-    return $email == '' ? false : true;
+    if(!isset($_SESSION['email'])) return '0';
+    $email = $_SESSION['email'];
+    return $email == '' ? '0' : '1';
 }
 
 function get_email()
 {
-    global $email;
+    if(!isset($_SESSION['email'])) return '';
+    $email = $_SESSION['email'];
     return $email;
 }
 
 function get_favourites()
 {
-    global $bdd, $email;
+    global $bdd;
+    if(!isset($_SESSION['email'])) return '';
+    $email = $_SESSION['email'];
     if($email != '')
     {
-        return $bdd->query('SELECT favourites FROM user WHERE email LIKE \'' . $email . '\'')->fetch()[0];
+        $res = $bdd->query('SELECT favourites FROM user WHERE email LIKE \'' . $email . '\'')->fetch(PDO::FETCH_OBJ);
+        if(!$res) return '';
+        else return $res->favourites;
     }
     return '';
 }
 
 function set_favourites($favourites)
 {
-    global $bdd, $email;
+    global $bdd;
+    if(!isset($_SESSION['email'])) return '';
+    $email = $_SESSION['email'];
     if($email != '')
     {
         $bdd->query('UPDATE user SET favourites=\'' . $favourites . '\' WHERE email like \'' . $email . '\'');
+        return $favourites;
     }
+    return '';
 }
 
 function set_password($u_newpwd)
 {
-    global $bdd, $email;
+    global $bdd;
+    if(!isset($_SESSION['email'])) return '';
+    $email = $_SESSION['email'];
     if($email != '')
     {
         $bdd->query('UPDATE user SET pwdhash=\'' . $u_newpwd . '\' WHERE email like \'' . $email . '\'');
+        return '';
     }
+    return '';
 }
 
 ?>
\ No newline at end of file