Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Apprendre à développer un site web avec PHP et MySQL
  3. Base de données MySQL
Extrait - Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (5e édition)
Extraits du livre
Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (5e édition) Revenir à la page d'achat du livre

Base de données MySQL

Présentation

1. Introduction

Une base de données est un ensemble structuré de données géré par ordinateur. Dès que vous voulez enregistrer une information dans votre site web comme le nom ou le prénom ou pour créer un blog, vous êtes obligé d’utiliser une base de données. En théorie, vous pourriez utiliser un fichier texte mais en pratique ce n’est pas possible car il y aurait beaucoup de problèmes, par exemple si plusieurs personnes cherchent à écrire en même temps.

Il existe plusieurs logiciels de bases de données comme Oracle ou SQL Server, mais ils sont payants et n’ont une réelle utilité que dans le cas de gestion d’un gros volume de données. Vous allez voir dans ce support la base de données MySQL qui est gratuite et déjà intégrée dans Wamp. MySQL peut être installé sur un autre serveur que celui du serveur web mais en pratique il est souvent installé au même endroit.

Une base de données permet de stocker les données et de les classer, ce qui permet de les retrouver rapidement grâce au langage SQL (Structured Query Language). Le langage SQL est un langage permettant d’exécuter toutes les actions possibles dans la base de données comme créer des tables, ajouter des données, supprimer...

phpMyAdmin

phpMyAdmin est une interface web incluse dans Wamp permettant de gérer vos bases de données. Cette interface possède différents menus pour créer des bases de données, des tables, des champs, ajouter des données, les supprimer… Ainsi vous pouvez gérer votre base de données sans taper de commandes SQL.

Pour accéder à phpMyAdmin, faites un clic gauche sur l’icône images/02RI01N4.png dans la barre des tâches, puis phpMyAdmin 4.7.9.
Si vous constatez des ralentissements importants, il faut peut-être changer de port. Pour cela, faites un clic gauche sur l’icône images/02RI01N4.png dans la barre des tâches et choisissez Apache puis httpd.conf. Recherchez la ligne Listen 127.0.0.1:80 et mettez Listen 127.0.0.1:8081 à la place. Ensuite, recherchez la ligne ServerName 127.0.0.1:80 et mettez ServerName 127.0.0.1:8081 à la place. Cela a pour effet d’écouter votre serveur web sur un autre port. Attention de bien changer ce port dans votre URL et de mettre http://127.0.0.1:8081/ pour appeler vos pages PHP ainsi que phpMyAdmin.

Vous arrivez alors sur une interface web dont l’URL est : http://localhost/phpmyadmin5.2.1/

images/07RI02V5.png

Vous allez maintenant apprendre à créer une base de données et à utiliser tous les outils de phpMyAdmin.

 Cliquez sur l’onglet Bases de données.

 Entrez le nom de la base de données que vous voulez créer dans la zone de saisie et laissez l’interclassement (langue utilisée) par défaut. Cliquez sur le bouton Créer.

Votre base de données apparaît sur la gauche. Dans cet exemple, la base de données est nommée bdd.

images/07RI03V5.png

Ne mettez jamais de caractères spéciaux dans les noms de base, de table, de champ et de n’importe quel objet en base de données. Cela vous évitera de nombreux problèmes.

 Cliquez sur bdd.

Maintenant, il faut créer une table en indiquant le nombre de champs qu’elle contient. C’est une valeur indicative car tout est modifiable par la suite.

 Tapez "Personne" dans la zone de saisie à droite du nom et le chiffre 4 dans la zone de saisie du nombre de champs. En effet, la table Personne contiendra quatre champs : Id_personne (Int), Nom (Varchar 20), Prenom (Varchar 20) et Age (Int).

images/07RI04V5.png

 Cliquez sur le bouton...

Le langage SQL

1. Présentation

Dans ce support, il ne sera pas montré comment installer le serveur MySQL. Vous utiliserez phpMyAdmin et en particulier l’onglet SQL pour exécuter les différentes requêtes.

Il est conseillé de ne pas mettre de caractères spéciaux dans les noms de bases de données, de tables ou de champs. Vous devez essayer d’utiliser uniquement des caractères non accentués, des chiffres et le symbole _. Si vous ajoutez des espaces dans vos noms, vous êtes obligés de délimiter vos noms par des guillemets ou des apostrophes.

Vous avez vu dans la présentation de phpMyAdmin qu’une base contient des tables qui contiennent des champs. La syntaxe pour référencer un champ dans la requête est donc :

nom_base.nom_table.nom_champ 

Quand vous exécutez une requête SQL par l’onglet SQL de phpMyAdmin, il est important de savoir à quel endroit vous vous situez par rapport à votre base de données. Si vous avez déjà sélectionné votre base de données, vous voyez le nom du serveur et le nom de votre base de données affichés en haut de la page phpMyAdmin :

images/07RI10V3.png

Dans ce cas, il n’est pas nécessaire de rappeler le nom de votre base de données dans la requête puisque vous êtes déjà dedans.

Par exemple, il suffit d’écrire :

SELECT * FROM Personne 

et non pas :

SELECT * FROM bdd.Personne 

Dans la suite de ce chapitre, la base de données bdd contenant la table Personne avec les champs Id_personne, Nom, Prenom et Age est utilisée.

2. Lire des données

L’instruction qui permet de lire dans une table est SELECT.

Par exemple :

SELECT * FROM Personne 
  • SELECT : sélectionne ou lit.

  • * : tous les champs.

  • FROM : de ou dans.

  • Personne : nom de la table.

Cette requête signifie donc : lire tous les champs de la table Personne.

Sélectionnez la table Personne puis copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI10V5.png

Pour afficher seulement certains champs, il suffit de les nommer en les séparant par des virgules.

Par exemple :

SELECT Nom,Prenom FROM Personne 

Affiche :

images/07RI18N.png

3. Écrire des données

L’instruction qui permet d’écrire dans une table est INSERT...

SQL avancé

1. Les fonctions et instructions SQL

L’objectif de cette section n’est pas de vous apprendre toutes les fonctions SQL mais simplement celles qui sont les plus utilisées.

Dans la suite de cette section, la table Personne contient ces données :

images/07RI50V5.png

a. Limiter des données

L’instruction qui permet de limiter le nombre de lignes retournées par un SELECT est LIMIT nombre_lignes.

Par exemple :

SELECT * FROM Personne ORDER BY Nom LIMIT 4 

Cette requête signifie donc : lire les trois premières lignes contenant tous les champs de la table Personne triées par Nom.

Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI51V5.png

Il est possible aussi d’ajouter à partir de quel numéro de ligne vous souhaitez récupérer les données en ajoutant ce numéro avant le nombre de lignes.

Par exemple, pour récupérer les lignes de la cinquième à la sixième incluse :

SELECT * FROM Personne ORDER BY Nom LIMIT 4,2 

Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI52V5.png

b. Valeurs distinctes

L’instruction qui permet de prendre uniquement les valeurs des lignes distinctes retournées par un SELECT est DISTINCT.

Par exemple :

SELECT DISTINCT Nom FROM Personne ORDER BY Nom 

Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI51N.png

En réalité deux personnes s’appellent DUPUIS mais ce nom n’apparaît qu’une fois grâce au mot-clé DISTINCT.

c. Convertir en majuscules

L’instruction qui permet de convertir la valeur d’un champ en majuscules est UPPER(nom_du_champ).

Par exemple, pour afficher le prénom en majuscules :

SELECT Nom, UPPER(Prenom) FROM Personne ORDER BY Nom 

Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI52N.png

Vous pouvez créer un alias pour UPPER(Nom) de cette façon :

SELECT Nom, UPPER(Prenom) as Prenom_majuscule FROM Personne ORDER BY Nom 

Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :

images/07RI53N.png

d. Convertir en minuscules

L’instruction qui permet de convertir la valeur d’un champ en minuscules est LOWER(nom_du_champ).

Par exemple, pour afficher...

Exercices SQL

Pour effectuer ces exercices, il faut que la table Personne et la table Langue soient créées dans la base de données bdd. Ces tables ont les données suivantes :

Table Personne :

images/07RI101V5.png

Table Langue :

images/07RI102V5.png

Voici le script SQL permettant de créer les tables avec leurs données :

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
 
-- Base de données: `bdd` 
 
-- -------------------------------------------------------- 
 
-- Structure de la table `langue` 
 
DROP TABLE IF EXISTS Langue; 
CREATE TABLE IF NOT EXISTS Langue ( 
   Id int(11) NOT NULL AUTO_INCREMENT, 
   Libelle varchar(20) NOT NULL, 
   PRIMARY KEY (Id) 
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 
 
-- Contenu de la table `langue` 
 
INSERT INTO Langue (Id, Libelle) VALUES 
(1, 'Français'), 
(2, 'Anglais'), 
(3, 'Allemand'), 
(4, 'Russe'); 
 
-- -------------------------------------------------------- 
 
-- Structure de la table `personne` 
 
DROP TABLE IF EXISTS Personne; 
CREATE TABLE IF NOT EXISTS Personne ( 
   Id_personne int(11) NOT NULL AUTO_INCREMENT, 
   Nom varchar(20) NOT NULL, 
   Prenom varchar(20) NOT NULL, 
   Age int(11)...

L’accès aux bases de données avec PHP

1. Introduction

Vous avez vu précédemment les différentes requêtes SQL et vous allez voir maintenant comment les exécuter dans PHP et afficher le résultat.

Ce chapitre vous permettra de lire, d’insérer, de modifier et de supprimer des données depuis des formulaires PHP.

Il faut en prérequis avoir la structure de la table Personne suivante :

images/07RI112V5.png

Ainsi que ces données :

images/07RI113V5.png

Il existe deux extensions par défaut pour utiliser les fonctions pour accéder à MySQL : mysql_ et mysqli_. Ces deux extensions sont très proches mais mysqli_ est plus récente (version 5 de PHP) et a quelques fonctionnalités supplémentaires. C’est donc mysqli_ qui sera utilisé dans la suite de ce document. Dans une prochaine section, l’extension PDO (PHP Data Object) sera présentée. C’est une extension encore plus récente et plus complète utilisant les objets.

2. Connexion

La fonction permettant de se connecter à MySQL est mysqli_connect().

Cette fonction prend en paramètres :

  • L’hôte : chaîne de caractères contenant le nom ou l’adresse IP de l’hôte. Celui-ci correspond à "localhost" ou 127.0.0.1 si vous travaillez en local.

  • L’utilisateur : chaîne de caractères contenant le nom de l’utilisateur pour se connecter à la base de données. Si vous travaillez en local, celui-ci correspond à "root". Attention, cet utilisateur a tous les droits sur votre base de données.

  • Le mot de passe : chaîne de caractères contenant le mot de passe associé à l’utilisateur. Celui-ci est vide par défaut.

  • Le nom de la base de données : chaîne de caractères optionnelle contenant le nom de votre base de données.

  • Le port : numéro du port optionnel pour se connecter au serveur MySQL. Celui-ci vaut 3306 par défaut.

Cette fonction retourne false en cas d’erreur ou un objet mysqli contenant l’identifiant de connexion en cas de succès.

Par exemple :

<?php 
   $connect = mysqli_connect("127.0.0.1", "root", "", "bdd"); 
?> 

Autre exemple en gérant les erreurs :

<?php ...

PDO

Ce chapitre utilise quelques notions de POO. Le chapitre L’objet est donc un prérequis pour la bonne compréhension des syntaxes.

1. Introduction

PDO (PHP Data Object) est une bibliothèque de fonctions PHP permettant d’accéder à n’importe quelle base de données car elle apporte une couche d’abstraction à l’accès aux bases de données. C’est un langage orienté objet mais dont le fonctionnement n’est pas très différent de mysqli. Il faut toujours écrire la requête et l’exécuter.

Pour activer cette bibliothèque, il faut ouvrir le fichier php.ini accessible par le menu configuration, PHP. Ensuite, vérifiez qu’il n’y a pas de point-virgule devant la ligne :

images/07PHP46.png

Cette bibliothèque est écrite en langage objet donc la syntaxe peut être déroutante. Vous avez plus d’explications sur la programmation objet dans le chapitre L’objet.

Il faut en prérequis avoir créé la table Personne.

images/07RI117V5.png

Ainsi que ces données :

images/07RI118V5.png

Le chapitre sur phpMyAdmin explique comment créer la base avec les données.

2. Connexion

Pour se connecter à la base de données MySQL, il faut créer une instance de la classe PDO, c’est-à-dire créer un objet qui est un exemplaire de la classe PDO mais avec certains paramètres. Cette notion est abordée de façon plus précise dans le chapitre L’objet.

L’objet permettant de se connecter à MySQL est PDO().

Cet objet prend en paramètres :

  • La chaîne de connexion : chaîne de caractères contenant le SGBD utilisé et le nom ou l’adresse IP de l’hôte. Celui-ci correspond à "localhost" ou 127.0.0.1 si vous travaillez en local. Cette chaîne contient aussi le nom de la base de données.

  • L’utilisateur : chaîne de caractères contenant le nom de l’utilisateur pour se connecter à la base de données. Si vous travaillez en local, celui-ci correspond à "root". Attention, cet utilisateur a tous les droits sur votre base de données.

  • Le mot de passe : chaîne de caractères contenant le mot de passe associé à l’utilisateur. Celui-ci est vide par défaut.

Par exemple...

Exercices

1. Énoncés

Exercice 1 (facile) : Page de connexion

Créer une page login.php contenant une zone login et une zone password avec un bouton de type submit. Cette page appelle la page verif_login.php qui vérifie si le login et le mot de passe sont dans la base de données. Vous pouvez repartir de l’exercice 1 du chapitre Transmettre des données d’une page à l’autre et modifier la page verif_login.php pour afficher "login correct" dans le cas où la personne est présente en base de données et rediriger sur la page login.php dans le cas contraire. Il faut aussi créer une table login_password contenant l’Id, le login et le mot de passe.

images/07PHP104.png

Exercice 2 (moyen) : Formulaire d’inscription

Cet exercice nécessite quelques connaissances en JavaScript ou en HTML5.

Créez une page accueil.php permettant de s’inscrire à une formation.

images/07RI119V5.png

Tous les champs sont obligatoires. Le lien affiche un pdf contenant les conditions générales et il est nécessaire d’avoir cliqué sur ce lien puis coché la case pour pouvoir envoyer le formulaire.

Créez ensuite une page connection.php effectuant la connexion à la base de données puis une page ajouter.php vérifiant si la personne n’est pas déjà enregistrée avec son e-mail et stockant les données du formulaire dans la base de données. Cette page doit aussi vérifier les erreurs et retourner un message dans la page accueil.php.

D’autres exercices liés aux bases de données sont proposés à la fin de ce support. 

2. Corrigés

Solution de l’exercice 1

Dans cet exemple le login est Jean et le mot de passe est 1234.

  • Créez la base de données bdd.

  • Script SQL de création de la table login_password :

CREATE TABLE login_password ( 
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
Login VARCHAR( 20 ) NOT NULL , 
Password VARCHAR( 20 ) NOT NULL 
) ENGINE = MYISAM ; 
  • login.php :

<!DOCTYPE html> 
<html lang="fr">  
   <head> 
      <title>Exercice login</title> 
      <meta http-equiv="Content-Type" content="text/html; 
charset=utf-8" /> 
   </head> ...