Une base de données permet de grader des informations pour un site internet (la liste et les informations des utilisateurs, le contenu du site, etc.). Un site internet complexe ne peut exister sans base de données. L’utilisation de base de données n’est pas toujours simple et les documentations sont très utiles une fois que l’on a les connaissances fondamentales. Je vous propose donc dans cet article de faire le tour des 20 % de connaissance en Base de Données qui vous permettront de gérer 80 % des situations.

Cet article fait partie d’une série pour apprendre à créer son site internet en mode 20/80. Si vous arrivez en cours de route, commencez ici.

Prêt pour ajouter une couche extrêmement importante sur votre site internet ? C’est parti !

Qu’est-ce qu’une base de données ?

Une base de données est un logiciel que l’on installe sur son serveur (en ligne ou sur son poste) afin de stocker les informations pour votre site. Celle-ci permet ensuite de faire des requêtes pour vous retourner les infirmations sous le format que vous souhaitez.

Il existe plusieurs types de bases de données, mais nous ne rentrerons en détail que sur le plus utilisé : La base de données relationnelle.

Note : Dans la suite de cet article, je prendrai pour thème : la création d’une messagerie simplifiée avec des “utilisateurs” et des “messages”.

Carte mémoire sous forme de tableur

Une base de données MySQL se compose de table. Dans le cadre d’une base de données relationnelle, nous pouvons comparer une table à un dossier contenant des tableurs (comme MS Excel ou Google Sheet). Dans chaque Table, ce tableau en deux dimensions avec :

  • Les colonnes
    Le nom des différentes informations que le tableau contient. Pour la table dressant la liste des utilisateurs, nous aurions par exemple le prénom, le nom, l’émail et le mot de passe.
  • Les lignes
    Nous avons une ligne par utilisateur.

C’est à l’intérieur de ce tableau que nous viendrons piocher les informations pour alimenter notre site internet.

Maintenant que vous avez une image de ce à quoi ressemble une base de données, voyons…

Quelle base de données utiliser et comment l’installer ?

Personnellement, j’utilise majoritairement la base de données MySQL. C’est l’une des bases gratuites les plus utilisées au monde. Je poursuivrai donc cet article avec celle-ci.

Installer une base MySQL sur son poste

Si vous avez déjà appliqué les précédents articles, vous devez déjà avoir installé WAMP ou MAMP, le logiciel comprenant le serveur sur votre ordinateur. Et bien sachez que celui-ci installe en même temps que le serveur, une base de données MySQL. Celle-ci est donc déjà prête à l’emploi. Si ce n’est pas le cas, je vous invite à relire le chapitre sur l’installation d’un serveur dans mon article sur comment utiliser PHP.

Utiliser l’interface PHPMyAdmin pour régler sa base de données

Une fois que votre serveur est démarré (voir l’article que j’ai mentionné à l’instant, si vous ne savez pas comment procéder), rendez-vous sur la page :

  • Avec MAMP sur mac
    http://localhost:8888/MAMP/index.php?page=phpmyadmin&language=French
  • Pour WAMP sur window
    Cliquez sur le menu dans votre barre d’icônes et cliquez sur “PhpMyAdmin”

Créer une base avec un utilisateur associé

Personnellement, je recommande de créer une base pour chaque site. Pour cela, nous allons créer un utilisateur (un accès) pour notre site. Nous demanderons à PhpMyAdmin de générer une base qui appartiendra à cet utilisateur.

Voici la procédure à suivre :

Créer utilisateur

Puis, cliquez sur “Ajouter un compte utilisateur”.

Saisissez :

  • Le nom d’utilisateur
    Ce sera le nom de la base et l’identifiant pour s’y connecter
  • Sélectionnez “Local” comme nom d’hôte
    Cela permet de spécifier à la base de données que le site qui l’utilise doit être hébergé sur le même poste pour pouvoir se connecter.
  • Un mot de passe
    Saisissez le mot de passe que vous souhaitez utiliser ici pour que le site puisse se connecter. Vous pouvez aussi demander à PhpMyAdmin de vous générer un mot de passe aléatoire. (Dans ce cas, pensez bien à faire une copie du mot de passe)
  • /!\ Cochez la case : “Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base”.
    Cela demande à PhpMyAdmin de créer notre base de données et de créer le compte qui permettra à notre site de se connecter dessus.

Créer utilisateur

Cliquez ensuite sur “Exécuter” en bas de la page pour créer la base et le compte pour s’y connecter.

Créer / supprimer une table

Maintenant que notre base est créée, nous allons créer notre première table de données. Pour cela, cliquez sur le nom de la base dans le menu situé à gauche de votre écran.

Accéder à notre base

Nous pouvons désormais créer notre première table dans notre base “nom_de_notre_site”. Commençons par créer une table pour les “utilisateurs” en saisissant le nom de la table, puis en cliquant sur “Exécuter”.

Créer une table

Cela nous redirige vers le formulaire de création. Avant de le remplir, il nous faut savoir répondre à quelques questions :

Quelle est la structure de base d’une table de données ?

Comme je vous en ai parlé plus haut, une table est comme un tableau excel avec pour chaque ligne un élément (appelé “entrée”) et en colonne chaque information (appelée “valeur”) qui compose notre “entrée”. Mais avant de revenir sur les entrées (nos éléments enregistrés), revenons sur…

Les différents type de données qui compose une entrée

Types de variables

Lorsque l’on souhaite ajouter une information, PhpMyAdmin nous demande de quel “type” est cette information et la liste proposée semble bien longue… Que choisir ? Voyons ensemble les types les plus utilisés/pratiques en mode 20/80 :

  • Un nombre entier (INT)
    Ce type de données permet de stocker des nombres allant de -2147483648 à +2147483647. Celui-ci vous permet de traiter 90% des cas où un nombre est nécessaire.
  • Une chaîne de caractère / Phrase courte (VARCHAR)
    Ce type de données permet de stocker une chaîne de caractères (une phrase) d’une taille spécifique, taille que l’on définie dans la colonne “Taille/Valeurs”. Pratique lorsque l’on souhaite garder des phrases courtes comme une adresse ou un prénom en limitant à un petit nombre de caractères.
  • Un long texte (TEXT)
    Ce type de données permet de stocker des phrases beaucoup plus longues, comme les informations de type “VARCHAR”, mais avec le désavantage de prendre plus de taille dans la base de données.
  • Une date (DATE)
    Ce type de données permet de stocker une date
  • Un booléen oui/non (BOOLEAN)
    Ce type de données permet de stocker une valeur : “VRAI” (OUI, 1) ou “FAUX” (NON, 0). Très pratique pour indiquer que quelque chose est actif ou non (comme une option, ou une condition) et cela prend très peu de place.

Ressource : pour plus d’informations, vous pouvez consulter la documentation officielle ici.
Maintenant que vous connaissez les principaux type de données, je souhaite rendre en détail sur une information particulière :

La clé primaire (index primaire)

Une clé est un code, comme sur votre Carte d’identité, votre carte bleu ou un code barre d’article de magasin. Celle-ci permet d’identifier une entrée dans une table.

Par exemple, lorsqu’un utilisateur s’inscrit à notre site, nous allons lui assigner un numéro unique nous permettant de l’identifier. Comme ça, nous pourrons retrouver cet utilisateur grâce à celui-ci.

Vous devez donc commencer par définir comme première information, la clé primaire de votre table. Puis les autres informations. Au passage, les clés dans des informations de type “INT”.

Créer ma première table

Maintenant que nous avons vu les différents types de d’informations et le rôle de la clé primaire, créons notre table “utilisateurs”.

Nous allons donc saisir les informations suivantes :

  • id
    • type : INT
      Notre “id” est bien un nombre
    • index : PRIMARY
      Nous souhaitons que “id” soit notre clé (index) primaire
    • A_I : cochez
      Nous souhaitons que la base s’occupe d’Auto-Incrementer la valeur de “id”. Cela signifie que la base s’occupera de rajouter 1 à chaque nouvelle entrée, sans que nous le fassions nous-même. Donc “id” de la première ligne sera 1, “id” de la seconde sera 2 et ainsi de suite…
  • prenom, nom et email
    • type : VARCHAR
      Ces information sont des chaînes de caractères courtes
    • taille : 64
      Cela suffit à mettre des informations assez longue

Une fois ces informations rentrées, il suffit de cliquer sur “enregistrer” pour créer la table.

Comment créer des liens entre plusieurs informations ?

Comme j’en ai parlé au début de l’article, nous allons prendre comme exemple la création d’une messagerie simplifiée. Pour cela, nous avons déjà notre table “utilisateurs”, il nous faut désormais une table de données pour contenir les “messages” entres les utilisateurs.

Définissons les caractéristiques d’un message : un message, un émetteur et un récepteur.

Afin de savoir qui a envoyé et qui a reçu un message, il faut définir pour chaque message les utilisateurs en question. Pour cela, nous avons besoin de spécifier dans chaque message l’identifiant unique de l’émetteur, soit sont id dans la table. Et idem pour le récepteur.

Cela donnera donc dans la table de données, les informations suivantes :

  • id
    • type : INT
      Notre “id” est bien un nombre
    • index : PRIMARY
      Nous souhaitons que “id” soit notre clé (index) primaire
    • A_I : cochez
      Nous souhaitons que la base s’occupe d’Auto-Incrementer la valeur de “id”
  • idEmetteur
    • type : INT
      L’ id de l’émetteur un nombre
  • idRecepteur
    • type : INT
      L’ id du récepteur bien un nombre
  • message
    • type : TEXT
      Sachant que nous ne connaissons pas par l’avance la taille d’un message, autant laisser la base de données gérer ça.

Je vous laisse créer cette table. Nous allons passer au PHP et voir comment faire appel à la base de données pour demander des informations.

Comment envoyer ou récupérer des informations avec les requêtes SQL ?

Connecter son site à la base de données

Afin de prendre contact avec la base de données depuis le code PHP, nous avons besoin d’utiliser un utiliser. Il en existe plusieurs, mais dans cette exemple, nous utiliserons : mysqli

<?php
$con = mysqli_connect("localhost","nom_de_mon_site","nom_de_mon_site","nom_de_mon_site");

/* Verification si la connexion a reussi ou non */
if (mysqli_connect_errno()) {
echo "Echec de connexion a la base : " . mysqli_connect_error();
} else {
echo "Connexion a la base operationnelle";
}

/* Nous pouvons dialoguer avec la base autant que nous le souhaitons */

/* Puis on se deconnecte */
mysqli_close($con);
?>

Vous êtes désormais connecté à votre base de données.

Enregistrer une information avec “INSERT”

Commençons par le commencement, afin de récupérer de l’information, il faut commencer par la sauvegarder. pour cela, nous allons utiliser la “requête SQL” nommées INSERT.

Ajoutons Marc Dupont <marc.dupont@yopmail.com> dans notre base. Cela prend la forme d’une demande :

Ajouter la table utilisateurs une ligne avec

  • pour “prenom” la valeur : Marc
  • pour “nom” la valeur : Dupon
  • et pour “email” la valeur : marc.dupond@yopmail.com

Celle-ci prend la forme suivante dans le langage SQL :

INSERT INTO utilisateurs (prenom, nom, email)
VALUES ('Marc', 'Dupont', 'marc.dupond@yopmail.com');

Maintenant, voici la manière de l’effectuer en PHP ;

/* Se connecter a la base au prealable */
mysqli_query($con,"INSERT INTO utilisateurs (prenom, nom, email) VALUES ('Marc', 'Dupont', 'marc.dupond@yopmail.com')");
/* Puis se deconnecter */

Exécutez ce code PHP, puis rendez-vous sur la table “utilisateurs” dans votre PhpMyAdmin. Vous verrez qu’une nouvelle entrée avec ces informations vient d’être ajoutée.

Créez désormais un deuxième utilisateur : Jean Riviere <jean.riviere@yopmail.com>. Et cette fois-ci, pas depuis le code PHP. Rendez-vous dans l’interface de phpMyAdmin, dans la table “utilisateurs”, puis cliquez sur l’onglet “SQL”. Celui-ci permet de faire une requête SQL directement sur la base.

Nouvel utilisateur

Une fois la ligne de Jean créée dans la base, pensez à mettre la requête en commentaire pour ne pas l’exécuter en boucle.

Désormais, depuis l’interface phpMyAdmin, vérifier que les 2 utilisateurs ont bien été ajoutés dans la table utilisateurs. Pour cela rendez-vous dans la table “utilisateurs”, cliquez sur l’onglet “parcourir”. Profitez-en pour consulter les id de chaque utilisateur.

Id des utilisateurs

Je vous laisse créer quelques messages, mais cette fois-ci faisons le depuis l’interface PhpMyAdmin. Pour cela, rendez-vous sur la table “messages” précédemment créée, cliquer sur l’onglet “insérer” et remplissez le formulaire pour finalement “Exécuter”. (voir image)

Nouveau message

 

Récupérer une information avec “SELECT”

Maintenant que nous avons deux informations dans la table utilisateurs, Marc et Jean, demandons à la base de nous les renvoyer. Pour cela, nous utilisons le “requête SQL” nommée “SELECT.

Un bout de code vaut mieux qu’une longue description :

<?php
$con = mysqli_connect("localhost","nom_de_mon_site","nom_de_mon_site","nom_de_mon_site");

// Verification si la connexion a reussi ou non
if (mysqli_connect_errno()) {
echo "Echec de connexion a la base : " . mysqli_connect_error();
} else {
}
/* mysqli_query($con,"INSERT INTO utilisateurs (prenom, nom, email) VALUES ('Marc', 'Dupont', 'marc.dupont@yopmail.com')"); */

/* Je demande a la base de donner de me donner toutes les informations (signe *) de tous les utilisateurs */
$result = mysqli_query($con, "SELECT * FROM utilisateurs");

/* Et je demande a mettre la premiere ligne dans un tableau */
$utilisateur = mysqli_fetch_assoc($result);

/* SI la ligne est egale a NULL, c'est que j'ai fini de parcourir la table */
while ($utilisateur != NULL) {
/* J'affiche les informations */
echo $utilisateur["prenom"] . " " . $utilisateur["nom"] . " - " . $utilisateur["email"] . "<br />";

/* Puis de demande la prochaine ligne */
$utilisateur = mysqli_fetch_assoc($result);
}

mysqli_close($con);
?>

Vous savez désormais comment récupérer tous les utilisateurs dans la table. Voyons désormais comment récupérer des éléments avec des filtres.

Mettre à jour une information avec “UPDATE”

Nous savons désormais comment créer et récupérer de l’information depuis la base de données.
Regardons désormais comment mettre à jour une information existante avec le mot clé : UPDATE.

UPDATE<em>nom_de_la_table</em>
SET<em>colonne1</em>=<em>valeur1</em>,<em>colonne2</em>=<em>valeur2</em>, ...
WHERE<em>condition</em>;

Prenons un cas concret : Marc vient de changer d’adresse email et souhaite remplacer l’adresse “marc@dupond@yopmail.com” par “super.marc.dupond@yopmail.com”.

Nous procéderons de la manière suivante :

UPDATE u<em>tilisateurs</em>
SET email = 'marc.dupond@yopmail.com'
WHERE id = 1;

Nous spécifions id égal à 1 car, c’est l’id de Marc au sein de la table. Il est possible de mettre à jours plusieurs lignes dans la base en même temps. Il est donc important que la condition WHERE soit correctement formuler.

Pour s’en assurer, il suffit de faire une requête SELECT avec les mêmes conditions et de voir la ou le lignes sont celles qui vous intéressent.

Supprimer une information avec “DELETE”

Dans la majorité des cas, il est préférable de ne jamais supprimer les informations d’une base. Il est préférable de rendre les informations “active”. Pour cela, je vous conseille d’ajouter une colonne à chacune de vos tables afin de gérer la suppression (ou la dépréciation) des lignes.

Ainsi, vous pourrez ne pas supprimer d’information de la base, mais la supprimer de l’affichage.

Pour ma part, j’aurais créé une colonne “_active”. Le symbole _ (underscore, tiret du bas) n’a aucun impact sur le fonctionnement, mais nous donne un repère visuel pour distinguer les colonnes liées à utilisateurs et des colonnes liées au fonctionnement de la table.

Je vous laisse créer la colonne : “_active” de type booléen dans la table “utilisateurs” et “messages”.

Désormais, pour supprimer un message (le message n°2), nous utiliserons la requête suivante :

UPDATE messages<em></em>SET _active = FALSE WHERE id = 2;

Cela signifie qu’à partir de maintenant, dans chaque requête SQL, il faudra prendre l’habitude d’ajouter la condition

SELECT *
FROM messages
WHERE _active = TRUE;

Il faut un moment pour s’y habituer, mais une fois fait, c’est vraiment plus pratique, car cela permet de restaurer de l’information en cas d’une mauvaise manipulation à cause d’une requête ou d’un utilisateur maladroit une fois le site en place.

Si malgré ce conseil, vous souhaitez tout de même supprimer l’information, je vous invite à regarder la documentation du mot clé : DELETE.

Ce qu’il faut retenir en mode 20/80 !

Connaitre les 3 requêtes SQL : INSERT, SELECT et UPDATE vous permettra de gérer 99 % des cas sur votre site. Je vous conseille désormais de vous renseigner plus en détails sur la construction de requête SQL.

Avez-vous des questions ou des commentaires ? Partagez les en dessous afin que je puisse vous aider.

  •  
  •  
  •  
  •  
  • 1
  •  
  •  
  •