Ignorer la navigation

Partie 2.1 : qu'est-ce qu'une base de données ?

Partie 2 : base de données gérée par PHP et remplie par le capteur de la carte Arduino


Introduction : transformation de votre ordinateur en serveur local

Toute la suite du TP est présentée avec le logiciel WAMP. Mais, ces derniers temps, cela ne fonctionne pas bien.

Il est donc préférable de prendre la version gratuite de MAMP pour le TP (l'adaptation par rapport à l'énnoncé est facile)

 

 

Le programme qui va transformer votre ordinateur en serveur s'appelle WAMP. Il va installer le serveur (Apache), la base de données (MySql) et tous les éléments permettant de se comporter comme un serveur.

Vous allez créer un répertoire de travail que vous appellerez « test2_votre nom de famille ». Pour ce faire, ouvrez l'explorateur Windows et rendez-vous dans le dossier où WAMP a été installé, puis dans le sous-dossier intitulé www. Créez votre répertoire « test2_votre nom de famille » (normalement : c :\wamp\www\ ).


Lancer maintenant le programme WAMP (wampserveur). Si l’icône du logiciel (dans la barre du bas ou cliquer sur l’icône « afficher les icônes cachées ») est verte cela signifie que tout fonctionne.

Si ce n'est pas le cas, cliquer (clic de gauche) sur l’icône du logiciel et lancer les application (« start all » service ou « démarrer les services »).

Pour vérifier que tout fonctionne, dans la barre d'adresse de Mozilla tapez « http://localhost/ ». La fenêtre de gestion de notre serveur local doit apparaître ainsi que votre dossier de travail (rubrique « vos projets »)






Partie 2.1 : qu'est-ce qu'une base de données ?

Introduction
La base de données (BDD) est un système qui enregistre des informations de manière ordonnée. C'est une sorte de grand tableau mémoire où tout est rangé. Les SGBD (Systèmes de Gestion de Bases de Données) sont les programmes qui se chargent du stockage de vos données. Il y en a plusieurs. Ici nous allons nous servir de  MySQL qui est libre, gratuit et très utilisé.
On va aussi utiliser PHP, qui va faire l'intermédiaire entre nous et MySQL. On devra demander à PHP : « Va dire à MySQL de faire ceci. » suivant le principe ci dessous :





Structure d'une base de données :
Une base de donnée est une sorte d'armoire qui contient différents tiroirs (appelés « tables »). Chaque table est une sorte de mini base de données :

Exemple : la table « membre » d'un club de foot

Numéro nom prenom Date de naissance
1 Martin toto 15-05-1970
2 Durant Denis 31-12-2001
3 Antiononi Marcello 23-11-1956
4 ... ...

Concrètement, quand MySQL enregistre des informations, il les écrit dans des fichiers ! Ces fichiers sont quelque part sur votre disque dur, mais il ne faut jamais les ouvrir et encore moins les modifier directement. Il faut toujours parler avec MySQL qui va se charger d'extraire et de modifier les informations dans ces fichiers. Pour gérer une base de données, soit on se sert de l'interface phpMyAdmin (en général juste pour la création), soit de pages web en PHP, tout ça à l'aide de requêtes (une requête est une instruction compréhensible par MySql comme SELECT, INSERT,…).

 

 

1. Création de notre base de donnée et d'une première table

Etape 1 : création de la base de donnée 'test':

 

 

Etape 2 : création de la table 'club' :

  

Choisir dans 'phpMyAdmin' la base de donnée 'test' que vous venez de créer (en cliquant dessus). Sur la partie centrale apparaît alors la fenêtre 'nouvelle table'.  Mettre le nom de votre table (club), choisir 4 colonnes et cliquer sur 'Exécuter'. La table est crée. Il reste à la paramétrer ces 4 colonnes (id, nom, prenom et date_naissance).

Voici le paramétrage à remplir (ne pas mettre d'accents):



Quelques remarques :

  • la colonne 'id' , de type INT (nombre entier), est l'index primaire de la table (celui qui dicte en quelque sorte le classement des éléments de la table). La valeur sera mise automatiquement à chaque rentrée des données (on dit qu'elle est Auto-implémentée c'est pour cela que la case 'A.I.' est cochée).
  • Les colonnes 'nom' et prénom sont de type VARCHAR (texte court : 0 à 255 caractères).
  • La colonne 'date_naissance' est de type DATE selon la forme anglo-saxonne : jour, mois, année


Une fois ce paramétrage effectué, cliquez sur 'Sauvegarder'. Çà y est, notre table est créée. Il ne reste plus qu'à la remplir !

 

 


Etape 3 : essayons de la remplir à la main :

  

1. Cliquez sur l'onglet « Insérer » et rentrez Hugo Jean né le 4 février 1989 :


et cliquez sur 'Exécuter' pour valider.

Vous remarquerez que phpMyAdmin vous bascule automatiquement sur l'onglet « SQL » dans lequel la vraie requête est écrite (une requête est une ligne de programme effectuant une action sur une base de données)


2. Recopier cette requête
3. Surlignez, de différentes couleurs, sur cette requête, le nom de votre table , le nom de votre base de données, le nom de l'instruction MySql composant la requête, les paramètres transmis à votre table dans la base de données et leur valeurs.

 


Etape 4 : gestion de notre table 'club' avec PHP:

   Avec PHP, la structure va être toujours la même :
  • connexion à la base de données
  • gestion (lecture, écriture, …) de la ou les tables présentes dans la base de données ouverte



Soit la page 'essai_sql_0.php' suivante :
<?php
 // connection à la base de données
try      // On essaie de se connecter à MySQL
{
         $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)     // En cas d'erreur, on affiche un message et on arrête tout
{
        die('Erreur : '.$e->getMessage());
}

// écriture dans la table
$bdd->exec('INSERT INTO club (id, nom, prenom, date_naissance) VALUES(NULL, \'Martin\', \'Jacques\', \'1975-03-14\')');
echo ('donnee  ecrite!');
?>


4. Copiez la page 'essai_sql_0.php' dans 'notepad++' et enregistrez la dans votre répertoire de travail (test2_votre nom de famille). Lancer cette page (l'URL est localhost/test2_votre nom de famille/essai_sql_0.php). Allez voir ensuite ce qui s'est passé dans la table 'club' de votre basse de donnée. Expliquez
5. Entourez, en couleur, sur le code de la page 'essai_sql_0.php' précédente, la partie concernant l'ouverture de la base de donnée
6. Entourez, en couleur, la partie où l'on insert les nouvelles valeurs dans la table 'club'

 

 

Échapper un caractère :
Quand on a besoin d'afficher un caractère spécial (comme >,< , '', /, ', ….) mais que celui-ci a un sens dans la structure de l'instruction en cours il n'est pas possible de l'utiliser. Il faut donc le rendre inopérant (inactif), cela s'appelle « échapper un caractère ». Pour cela il faut placer un slash \ devant le caractère . Par exemple pour rentre inactif  > on utilisera \ >



Exemple tiré du programme précédent :
   $bdd->exec('INSERT INTO club (id, nom, prenom, date_naissance) VALUES(NULL, \'Martin\', \'Jacques\', \'1975-03-14\')');

en langage MySql la requête est normalement:
   INSERT INTO club (id, nom, prenom, date_naissance) VALUES(NULL, 'Martin', 'Jacques', '1975-03-14')

7. Surlignez les caractères ' échappés' dans l'exemple PHP précédent ($bdd-> ……….)
8. Expliquez pourquoi ce caractère là a besoin d'être 'échapper' et pas le caractère – présent dans la date.




Etape 5 : manipulation de notre table 'club' avec PHP:

   Pour mémoire:
  • nom de notre base de données : test
  • nom de notre table : club
  • noms des colonnes : id, nom, prenom, date_naissance


Objectif : étude de quelques requêtes (SELECT FROM, UPDATE, DELETE FROM) et de leurs options.

Vous allez prendre les 3 fichiers suivants (donnees_post.php, essai_sql_1.php et style.css) du fichier "ressources eleves MySql.zip"  et vous allez les copier dans votre répertoire de travail (c:/wamp/www/test2_votre nom de famille) .

La structure est la suivante :

  • La page 'essai_sql_1.ph' est la page principale. Elle contient 2 parties. La première est la possibilité de rentrer un nouvel élément à votre table 'club' (en validant par 'Envoyer' ou la touche 'entrer' du clavier). Les données sont envoyées à la page ' donnees_post.php' qui écrit ces données dans la table 'club' et qui renvoie ensuite à la page 'essai_sql_1.ph'.
  • La deuxième partie affiche le contenu de la base de donnée. La page 'style.css' est la page de mise en forme.





Lancer cette page (l'URL est : localhost/test2_votre nom de famille/essai_sql_1.php)

9. Faire des essais pour comprendre comment tout fonctionne.
10. Recopier la requête qui est envoyée à la basse de donnée par votre page php (instruction 'query') pour afficher le contenu de votre table 'club'. Essayez d'expliquer ce qu'elle signifie.

 

 

Nous allons maintenant travailler sur quelques sélections et manipulations possibles. Pour cela nous allons avoir besoin d'une table un peu remplie et identique pour tous.

Allez dans l'onglet 'Afficher' de 'phpMyAdmin' (en ayant choisi votre table 'club' bien sûr), cliquez 'Tout cocher' puis 'effacer' et enfin 'oui'. Votre table 'club' doit maintenant être vide.


Allez récupérer le fichier 'club.sql' dans le fichier ressource utilisé précédemment. Ensuite, dans 'phpMyAdmin', se mettre sur votre base de données 'test' puis sur la table 'club'. Cliquer sur l'onglet 'Importer', choisir votre fichier 'club.sql' dans la rubrique 'Fichier à importer' en cliquant sur 'Parcourir'. Ne rien modifier d'autre et cliquez sur 'Exécuter' pour finir. Ensuite allez voir dans votre table (onglet 'afficher') pour vérifier que votre table 'club' est remplie.

Nous allons voir les options possibles de SELECT: WHERE, ORDER BY et LIMIT

11.  Modifier la page 'essai_sql_1.ph' en mettant comme requête : SELECT * FROM club LIMIT 0,10'.  Relancer la page (actualisation de la page dans le navigateur Mozilla). Décrire ce qui se passe.
12. Modifier la page 'essai_sql_1.ph' en mettant comme requête : 'SELECT * FROM club LIMIT 5,10'. La relancer . Décrire ce qui se passe.

13. Donnez la requête à écrire pour afficher les éléments de Herelle à Dubois Aline. Faire l'essai.



14. Modifier la page 'essai_sql_1.ph' en mettant comme requête : 'SELECT * FROM club ORDER BY date_naissance'. Décrire ce qui se passe.
15. Modifier la page 'essai_sql_1.ph' en mettant comme requête : 'SELECT * FROM club ORDER BY date_naissance DESC'. Décrire ce qui se passe.
16. Faites des essais avec cette option ORDER sur les différentes colonnes avec et sans DESC.
17. Donnez la requête à écrire pour afficher tous les éléments par ordre alphabétique (sur le nom de famille). Faire l'essai.
18. Modifier la page 'essai_sql_1.ph' en mettant comme requête : SELECT * FROM club WHERE nom='Martin'. Pensez à 'échapper' les caractères qu'il faut. Décrire ce qui se passe.

 

Il faut utiliser les mots-clés dans l'ordre suivant : WHERE puis ORDER BY puis LIMIT, sinon MySQL ne comprendra pas votre requête.


19. Donnez la requête à écrire (avec l'instruction PHP : query( 'votre requête');) pour afficher les éléments dont le prénom est 'laurent' en les classant par ordre alphabétique du nom de famille. Faire l'essai :   query('……………………………………………………………………………..') ;
20. Donnez la requête à écrire (avec l'instruction PHP : query) pour afficher les éléments dont le prénom est 'laurent' en les classant du plus vieux au plus jeune. Faire l'essai.
21. Donnez la requête à écrire (avec l'instruction PHP : query) pour afficher les éléments dont le prénom est 'laurent' en affichant les 2 plus jeunes. Faire l'essai.
 

 
Il existe aussi une instruction UPDATE qui permet de mettre à jour une donnée déjà écrite dans la table :
Un exemple : je change la date de naissance de l'élément Dubois Jacques
   UPDATE club SET date_naissance= '1996-02-07' WHERE nom = 'Dubois' AND prenom = 'Jacques'

 
Il existe aussi une instruction DELETE qui permet d'effacer des données déjà écrites dans la table :
Un exemple : j'efface l'élément Dubois Jacques
   DELETE FROM club WHERE nom = 'Dubois' AND prenom = 'Jacques'

 

Ceci n'est qu'une petite présentation des possibilités de gestions des bases de données. C'est le minimum pour comprendre et mettre en œuvre la suite du TP. Vous pouvez bien évidemment compléter vos connaissances à l'aide du document issu du site 'OpenClassRoom' et disponible sur l'intranet:   concevez-votre-site-web-avec-php-et-mysql.pdf

Créé avec eXeLearning (Nouvelle fenêtre)