##### Base de données ##### Maintenant que vous maîtrisez la structure de base de notre application, nous pouvons nous attaquer sérieusement au forum. Avant tous, nous allons étudier le schéma relationnel, c'est-à-dire la structure de la base de données. En voici un aperçu complet : .. image:: base_donnees/0.png :height: 10000 px :width: 700 px :scale: 60 % .. important:: Il est à noter que cette base de données comporte des redondances avec les noms d'utilisateurs. Il serait en effet plus judicieux de mettre ``id_utilisateur`` à la place de ``nom_utilisateur`` dans les tables ``session``, ``likes`` et ``messages``. Le choix d'utiliser la colonne ``nom_utilisateur`` est uniquement motivé parce qu'il facilite l'écriture des requêtes SQL, mais dans une application professionnelle, il faudrait supprimer ces redondances. Users ***** Cette table contient toutes les informations sur les utilisateurs qui ont créé un compte. Nous l'utilisons pour afficher le profil de l'utilisateur (avec son nom d'utilisateur, son nom, son prénom, son avatar et son courriel) et se connecter (en vérifiant si le mot de passe entré correspond à celui dans la base de données). Messages ***** Cette table contient toutes les informations relatives à un message. A chaque nouveau message est créée une nouvelle entrée dans cette table. On y trouve l'identifiant du message, l'identifiant de la discussion à laquelle il appartient, le nom d'utilisateur de celui qui a écrit le message, le contenu du message, les dates d'écriture et de modification du message (la date de modification existe seulement si le message a été modifié), et le nombre de likes de ce message. Discussions ***** Cette table contient simplement les sujets des discussions. Likes ***** Cette table contient les noms d'utilisateur qui ont aimé un message (message qui est identifié avec son ``id``). Elle empêche qu'un utilisateur aime un message plus d'une fois. Session ***** Cette table contient les "token", c'est-à-dire des jetons d'authentification et les relie aux noms d'utilisateur. Le token est enregistré dans la session du navigateur, ce qui évite au client de devoir entrer son nom d'utilisateur et son mot de passe à chaque fois qu'il charge une page. .. only:: html .. seealso:: Pourquoi ne pas stocker directement le nom d'utilisateur dans la session du navigateur ? .. only:: latex .. hint:: Pourquoi ne pas stocker directement le nom d'utilisateur dans la session du navigateur ? Pour des raisons de sécurité. En effet, un utilisateur avancé peut facilement modifier sa session. Si les sessions n'étaient pas "encodées" sous la forme d'un token, il serait alors facile d'usurper l'identité d'un autre utilisateur. .. note:: Pour l'instant, nous n'avons pas encore vu le fonctionnement des sessions avec ``expressJS``. Alors, ne vous inquiétez pas si vous ne comprenez pas entièrement la table ``session``. Quiz ***** .. only:: latex A quelles tables de la base de données faudra-t-il accéder pour exécuter les requêtes suivantes ? Pour chaque question, choisissez si les tables suivantes sont concernées : - Users - Messages - Discussions - Likes - Session Puis, vérifiez vos réponses à la fin de quiz. 1. Système de publication de messages (on fait une requête à la base de données pour enregistrer le message que l'utilisateur vient d'écrire) 2. Affichage de la page qui contient les messages de la première discussion (cochez seulement les tables qui sont nécessaires pour charger la page) 3. Vérification du mot de passe lors du login d'un utilisateur 4. Lorsqu'un utilisateur se connecte 5. Affichage de la page servant à créer un nouveau compte 6. Modification des coordonnées d'un utilisateur (à noter qu'il n'est pas possible de changer le nom d'utilisateur) 7. Affichage de la page du profil d'un utilisateur quelconque 8. Affichage de la page d'accueil avec les discussions 9. Modification ou suppression d'un message 10. Like d'un message __________________________________________________________________________________________________________________________________ .. raw:: latex \rotatebox[origin=c]{180}{10. Messages, Likes} \rotatebox[origin=c]{180}{9. Messages} \rotatebox[origin=c]{180}{8. Messages, Discussions} \rotatebox[origin=c]{180}{7. Users} \rotatebox[origin=c]{180}{6. Users} \rotatebox[origin=c]{180}{5. Aucune table n'est concernée} \rotatebox[origin=c]{180}{4. Users, Session} \rotatebox[origin=c]{180}{3. Users} \rotatebox[origin=c]{180}{2. Messages, Discussions} \rotatebox[origin=c]{180}{1. Messages} .. only:: html A quelles tables de la base de données faut-il accéder pour exécuter les requêtes suivantes ? Choisissez la(les) réponse(s) qui vous semble(nt) correcte(s) - si il y en a - dans chaque question, puis cliquez sur le bouton "corriger". .. quiz:: quiz1 :question: "Système de publication de messages (on fait une requête à la base de données pour enregistrer le message que l'utilisateur vient d'écrire) :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, True, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Affichage de la page qui contient les messages de la première discussion (cochez seulement les tables qui sont nécessaires pour charger la page) :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, True, True, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Vérification du mot de passe lors du login d'un utilisateur :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [True, False, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Lorsqu'un utilisateur se connecte :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [True, False, False, False, True] :genre: checkbox .. quiz:: quiz1 :question: "Affichage de la page servant à créer un nouveau compte :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, False, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Modification des coordonnées d'un utilisateur (à noter qu'il n'est pas possible de changer le nom d'utilisateur) :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [True, False, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Affichage de la page du profil d'un utilisateur quelconque :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [True, False, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Affichage de la page d'accueil avec les discussions :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, True, True, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Modification ou suppression d'un message :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, True, False, False, False] :genre: checkbox .. quiz:: quiz1 :question: "Like d'un message :" :answers: ["Users","Messages","Discussions","Likes","Session"] :correction: [False, True, False, True, False] :genre: checkbox :btn_correction: quiz1 .. raw:: html
Création de la base de données ***** Nous savons désormais comment fonctionne la base de données, il ne reste plus qu'à la créer. Ouvrez votre interface de ``phpMyAdmin`` et cliquez sur ``nouvelle base de données``. Entrez ``forum`` et cliquez sur ``créer``. .. image:: base_donnees/1.png :height: 10000 px :width: 600 px :scale: 60 % .. only:: html Naviguez ensuite dans l'onglet ``SQL`` et copiez-collez les instructions disponibles sur `ce lien`_. .. only:: latex Naviguez ensuite dans l'onglet ``SQL`` et copiez-collez les instructions disponibles sur le lien suivant : http://j.mp/1Wydvm6 Puis, cliquez sur ``exécuter``. .. image:: base_donnees/2.png En allant dans l'onglet ``structure``, vous devriez voir apparaître les tables du forum. .. image:: base_donnees/3.png .. liens .. _ce lien: http://tutoriel-forum.s3-website-eu-west-1.amazonaws.com/creation_base_donnees_forum.html