php et mysql - fnac-static.com...c++) et à la conduite de projets. php et mysql - entraînez-vous...

12
PHP et MySQL Entraînez-vous à développer une application collaborative Exercices et corrigés 45 QCM 47 Travaux pratiques et leurs corrigés Près de 28 H de mise en pratique Brice-Arnaud GUERIN En téléchargement le code source

Upload: others

Post on 22-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

PHP et MySQL Entraînez-vous à développer une application collaborative Exercices et corrigés

45 QCM47 Travaux pratiques et leurs corrigésPrès de 28 H de mise en pratique

Brice-Arnaud GUERIN

Ce livre sur PHP et MySQL vous permettra de maîtriser le développe-ment étape par étape d’une application collaborative associée à une base de données MySQL, tout en respectant les standards de développement actuels tels que MVC, HTML5 ou Bootstrap.

Le premier chapitre est consacré à l’installation de l’environnement de développement avec Apache, MySQL et PHP sous Windows et sous Linux. Ensuite, le lecteur crée les premières pages PHP et la base de données MySQL qui permettra la gestion des utilisateurs. Il est ensuite invité à développer son savoir-faire dans la réalisation d’inter-faces web avec des écrans réactifs optimisés pour le mobile.

Dans le chapitre qui suit, le lecteur poursuit dans un cadre MVC à l’aide du framework FPL pour, par exemple, afficher la page d’accueil, réaliser la page de connexion ou encore gérer l’authentification et les demandes des utilisateurs.

Un ensemble de travaux pratiques explore la gestion du temps en PHP/MySQL au travers de la réalisation d’une passerelle avec l’agenda Google. Puis, sortant des architectures classiques, le lecteur associe la technologie PHP à node.js et à MongoDB pour mettre en œuvre un module de messagerie instantanée incluant des fonctionnalités de recherche et de multimédia. Dans un chapitre dédié, il a l’occasion d’étudier la structure du framework FPL et de réaliser des extensions.

Pour finir, il s’entraîne au déploiement de son application PHP, en environnements on-premise et Cloud. L’auteur propose également d’implémenter un SEO basique avec Google Analytics.

Pour les apports théoriques sur ce sujet, Editions ENI édite dans la col-lection Ressources Informatiques des ouvrages sur PHP et sur MySQL.

Les éléments nécessaires à la réalisation des travaux pratiques sont en téléchargement sur le site www.editions-eni.fr.

45 QCM - 47 travaux pratiques et leurs corrigés Plus de 28 H de mise en pratique.

Ingénieur ESIEA, Brice-Arnaud GUÉRIN est Directeur de pro-grammes chez Kantar. Ses compé-tences en développement et son désir de partager ses connaissances l’ont naturellement conduit à l’écri-ture d’ouvrages consacrés à la réalisation d’applications (.NET, PHP, C++) et à la conduite de projets.

PHP et MySQL - Entraînez-vous à développer une application collaborative

ISBN : 978-2-409-02162-6ISSN 1765-7334

27 €

PH

P e

t M

yS

QL -

Entr

aîn

ez-

vous

à d

évelo

pper

une a

pplicati

on c

ollabora

tive

Pour plusd’informations :

Téléchargementwww.editions-eni.fr.fr

Sur www.editions-eni.fr :b Le code source nécessaire

à la réalisation des travaux pratiques.

En téléchargement

le code source

Page 2: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Avant-proposObjectif de ce livre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Comment utiliser ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Énoncés Chapitre 1 : Création de l’environnementPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Énoncé 1.1 L’environnement de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Énoncé 1.2 Structure du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Énoncé 1.3 Intégrer Bootstrap et définir des modèles de page . . . . . . . . . . . . . . . . . . 13Énoncé 1.4 Ajouter un menu défini en JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Énoncé 1.5 Enregistrer le profil utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Énoncé 1.6 Appliquer le thème graphique selon le profil . . . . . . . . . . . . . . . . . . . . . . 15

Chapitre 2 : Gestion des utilisateursPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Énoncé 2.1 Création de la base de données MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 19Énoncé 2.2 Saisie d’un utilisateur avec un template HTML simple . . . . . . . . . . . . . . . 19

Énoncé 2.3 Affichage d’un utilisateur avec template réactif (responsive) . . . . . . . . . . . 21Énoncé 2.4 Gestion des équipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Énoncé 2.5 Un service web pour lister les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . 23Énoncé 2.6 Une page HTML 5 pour afficher les utilisateurs . . . . . . . . . . . . . . . . . . . 24

Chapitre 3 : Les demandesPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Énoncé 3.1 Afficher la page d’accueil en MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Énoncé 3.2 Réaliser la page de connexion en MVC . . . . . . . . . . . . . . . . . . . . . . . . . 30Énoncé 3.3 Activer l’authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Énoncé 3.4 Brancher l’authentification sur la base de données . . . . . . . . . . . . . . . . . 35Énoncé 3.5 Tables SQL pour les demandes et les classes de données . . . . . . . . . . . . 35Énoncé 3.6 Saisir des demandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Énoncé 3.7 Affichage d’une demande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Énoncé 3.8 Liste des demandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Énoncé 3.9 Pour aller plus loin : gérer un workflow . . . . . . . . . . . . . . . . . . . . . . . . . 38Énoncé 3.10 Finaliser la page de liste des demandes . . . . . . . . . . . . . . . . . . . . . . . . . 39

lcroise
Tampon
Page 3: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Chapitre 4 : L’agendaPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Énoncé 4.1 Initialisation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Énoncé 4.2 Le DAO et la couche de service pour l’agenda . . . . . . . . . . . . . . . . . . . . 44Énoncé 4.3 Saisie et modification d’un rendez-vous . . . . . . . . . . . . . . . . . . . . . . . . 45Énoncé 4.4 Création d’un composant de sélection de date . . . . . . . . . . . . . . . . . . . . 46Énoncé 4.5 Affichage de la liste des rendez-vous . . . . . . . . . . . . . . . . . . . . . . . . . . 48Énoncé 4.6 Pour aller plus loin : export de l’agenda dans Outlook ou Gmail . . . . . . . . 48

Chapitre 5 : La messageriePrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Énoncé 5.1 Création d’un fil de discussion instantané avec Node.js et socket.io . . . . . 52Énoncé 5.2 Envoi de message à un utilisateur défini . . . . . . . . . . . . . . . . . . . . . . . . 54Énoncé 5.3 Gestion du statut connecté, non disponible, déconnecté . . . . . . . . . . . . . 55Énoncé 5.4 Envoi des messages offline par mail avec un service Cloud . . . . . . . . . . . 55

Chapitre 6 : La recherche et le multimédiaPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Énoncé 6.1 Installer MongoDB et l’extension PHP. . . . . . . . . . . . . . . . . . . . . . . . . . 60

2

Énoncé 6.2 Journalisation des discussions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Énoncé 6.3 Enrichissement des messages avec du texte riche . . . . . . . . . . . . . . . . . 62Énoncé 6.4 Intégrer du contenu multimédia en streaming . . . . . . . . . . . . . . . . . . . . 63Énoncé 6.5 Stocker et accéder à des données BLOB dans MongoDB. . . . . . . . . . . . . 66Énoncé 6.6 Rechercher dans les fils de discussion . . . . . . . . . . . . . . . . . . . . . . . . . 68

Chapitre 7 : Le framework PHP léger FPLPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Énoncé 7.1 Structure du framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Énoncé 7.2 La fabrique de contrôleurs et l’injection de dépendances. . . . . . . . . . . . . 71Énoncé 7.3 Intégrer du scripting dans les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Énoncé 7.4 Ajouter des traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Énoncé 7.5 Une interface pour visualiser les traces . . . . . . . . . . . . . . . . . . . . . . . . . 75

Page 4: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Chapitre 8 : Déployer et exploiterPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Énoncé 8.1 Gestionnaire de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Énoncé 8.2 Déployer le site sur le cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Énoncé 8.3 Monitoring du site web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Énoncé 8.4 Réaliser un SEO basique avec Google Analytics . . . . . . . . . . . . . . . . . . . 81

CorrigésChapitre 1 : Création de l’environnementPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Corrigé 1.1 L’environnement de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Corrigé 1.2 Structure du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Corrigé 1.3 Intégrer Bootstrap et définir des modèles de page . . . . . . . . . . . . . . . . . 104Corrigé 1.4 Ajouter un menu défini en JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Corrigé 1.5 Enregistrer le profil utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Corrigé 1.6 Pour aller plus loin : appliquer le thème graphique selon le profil . . . . . . 112

Chapitre 2 : Gestion des utilisateurs

3

Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Corrigé 2.1 Création de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Corrigé 2.2 Saisie d’un utilisateur avec un template HTML simple . . . . . . . . . . . . . . 120Corrigé 2.3 Affichage d’un utilisateur avec template réactif (responsive) . . . . . . . . . . 125Corrigé 2.4 Gestion des équipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Corrigé 2.5 Un service web pour lister les utilisateurs . . . . . . . . . . . . . . . . . . . . . . 144Corrigé 2.6 Une page HTML 5 pour afficher les utilisateurs . . . . . . . . . . . . . . . . . . 146

Chapitre 3 : Les demandesPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Corrigé 3.1 Affichage de la page d’accueil en MVC . . . . . . . . . . . . . . . . . . . . . . . . 150Corrigé 3.2 Réaliser la page de connexion en MVC . . . . . . . . . . . . . . . . . . . . . . . . 151Corrigé 3.3 Activer l’authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Corrigé 3.4 Brancher l’authentification sur la base de données . . . . . . . . . . . . . . . . 156Corrigé 3.5 Tables SQL pour les demandes et les classes de données . . . . . . . . . . . 158Corrigé 3.6 Saisir des demandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Corrigé 3.7 Affichage d’une demande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Page 5: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Corrigé 3.8 Liste des demandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Corrigé 3.9 Pour aller plus loin : gérer un workflow. . . . . . . . . . . . . . . . . . . . . . . . 176Corrigé 3.10 Finaliser la page de liste des demandes . . . . . . . . . . . . . . . . . . . . . . . 182

Chapitre 4 : L’agendaPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Corrigé 4.1 Initialisation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . 186Corrigé 4.2 Le DAO et la couche de service pour l’agenda . . . . . . . . . . . . . . . . . . . 192Corrigé 4.3 Saisie et modification d’un rendez-vous . . . . . . . . . . . . . . . . . . . . . . . 199Corrigé 4.4 Création d’un composant de sélection de date . . . . . . . . . . . . . . . . . . . 211Corrigé 4.5 Affichage de la liste des rendez-vous . . . . . . . . . . . . . . . . . . . . . . . . . 213Corrigé 4.6 Pour aller plus loin : export de l’agenda dans Outlook ou Gmail . . . . . . . 219

Chapitre 5 : La messageriePrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Corrigé 5.1 Création d’un fil de discussion instantané avec Node.js et socket.io . . . . 223Corrigé 5.2 Envoi de message à un utilisateur défini . . . . . . . . . . . . . . . . . . . . . . . 227Corrigé 5.3 Gestion du statut connecté, non disponible, déconnecté . . . . . . . . . . . . 230Corrigé 5.4 Envoi des messages offline par mail avec un service Cloud . . . . . . . . . . 233

4

Chapitre 6 : La recherche et le multimédiaPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Corrigé 6.1 Installer MongoDB et l’extension PHP. . . . . . . . . . . . . . . . . . . . . . . . . 240Corrigé 6.2 Journalisation des discussions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Corrigé 6.3 Enrichissement des messages avec du texte riche . . . . . . . . . . . . . . . . 249Corrigé 6.4 Intégrer du contenu multimédia en streaming . . . . . . . . . . . . . . . . . . . 252Corrigé 6.5 Stocker et accéder à des données BLOB dans MongoDB. . . . . . . . . . . . 254Corrigé 6.6 Rechercher dans les fils de discussion . . . . . . . . . . . . . . . . . . . . . . . . 258

Page 6: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Chapitre 7 : Le framework PHP léger FPLPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Corrigé 7.1 Structure du framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Corrigé 7.2 La fabrique de contrôleurs et l’injection de dépendances . . . . . . . . . . . . 266Corrigé 7.3 Intégrer du scripting dans les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Corrigé 7.4 Ajouter des traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Corrigé 7.5 Une interface pour visualiser les traces . . . . . . . . . . . . . . . . . . . . . . . . 277

Chapitre 8 : Déployer et exploiterPrérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Corrigé 8.1 Gestionnaire de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Corrigé 8.2 Déployer le site sur le cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Corrigé 8.3 Monitoring du site web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Corrigé 8.4 Réaliser un SEO basique avec Google Analytics . . . . . . . . . . . . . . . . . . 296

Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

5

Page 7: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Gestion des utilisateursChapitre 2énoncé

Chapitre 2Gestion des utilisateurs

PHP et MySQL

Durée : 3 heures 35Mots-clésCode PHP, formulaire, requêtes HTTP, service web, base de données, MySQL, phpMyAdmin.

ObjectifsC’est vers la création des premières pages PHP avec accès à la base de données que sont tour-nés les prochains TP. Ce chapitre n’introduit pas de framework PHP, mais inscrit néanmoinsle développement dans un écosystème auquel participent d’autres technologies telles queNode.js ou HTML 5.

PrérequisPour valider les prérequis nécessaires, avant d'aborder le TP, répondez aux questions ci-après :

1. Quel est l’attribut de la balise <form> qui détermine l’URL de traitement des données

17

d’un formulaire ?

a. processb. data-processc. actiond. react

2. Que signifie la valeur POST de l’attribut method ?

a. Les données sont envoyées au serveur par mail.

b. Les données sont envoyées sous forme d’une liste clé-valeur dans la query string del’URL.

c. Les données sont signées.

d. Les données sont envoyées sous forme d’une liste clé-valeur dans le corps de la re-quête HTTP.

lcroise
Tampon
Page 8: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

PHP et MySQL - Entraînez-vous à développer une applicationLes TP Informatiques

3. Quelle est la variable PHP qui reprend les données postées d’un formulaire ?

a. $_SERVERb. $_POSTc. $_FORMd. $_QUERYe. $_FORM

4. Quelles sont les principales fonctions de PHP pour exécuter une requête MySQL ?

a. db_mysql_connect, db_mysql_query, db_mysql_closeb. mysql_connect, mysql_query, mysql_fetch, mysql_closec. php_mysql_query, php_mysql_fetch_array

5. Selon le standard REST, quel est le verbe HTTP pour un appel de service web avec para-mètres retournant des données ?

a. GETb. POSTc. GETLISTd. HEAD

6. Quels sont les formats en sortie généralement produits par un service web REST ?

a. XML

18

b. JSON

c. PHP

d. HTML

7. Comment s’appelle l’utilitaire de base de données pour MySQL écrit en PHP ?

a. MySQLMyPHP

b. Maria Admin

c. phpMyAdmin

d. MyPHPAdmin

Corrigé p. 115

Page 9: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Gestion des utilisateursChapitre 2énoncé

Énoncé 2.1 Création de la base de données MySQLDurée estimative : 30 minutesLa première étape dans la réalisation de notre site dynamique consiste à créer la base dedonnées et sa première table `utilisateur'.

dLancez phpMyAdmin et connectez-vous au serveur local.

dCréez un compte d’utilisateur app_teamup.

dCréez la base de données teamup avec un classement de caractère insensible à la casse.

dCréez la table utilisateur formée des colonnes suivantes :

d Insérez dans la table deux enregistrements.

dSélectionnez le contenu de la table

Colonne Attributs de la colonne

id_utilisateur Int, auto_increment, clé primaire

utilisateur_nom Varchar(100)

utilisateur_login Varchar(100)

utilisateur_pwd Varchar(100)

utilisateur_email Varchar(100)

utilisateur_creation Datetime, peut être NULL

19

Énoncé 2.2 Saisie d’un utilisateur avec un template HTML simple

Durée estimative : 45 minutesLes choses sérieuses commencent ! Ce TP met en place le code PHP pour ajouter des utilisa-teurs dans la base de données. Même s’il ne repose pas sur la logique MVC, la structure ducode suit pourtant un découpage entre différentes préoccupations : présentation, traitement,service et accès aux données.

dAjoutez dans le répertoire application un dossier dal (pour Data Access Layer) et dans cedernier un fichier userdao.php contenant une classe vide UserDAO.

dAjoutez dans le répertoire application un dossier service ainsi qu’un fichier userservice.phpcontenant une classe vide UserService.

Corrigé p. 116

Page 10: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

PHP et MySQL - Entraînez-vous à développer une applicationLes TP Informatiques

dAjoutez dans le répertoire application/models un fichier userentity.php contenant une classeUserEntity. Définissez dans cette classe un champ pour chaque colonne de la tableutilisateur.

dAjoutez dans le répertoire application un fichier adduser.php. Copiez-collez le contenu dufichier views/_layout.php, retirez le contenu de la section <body> tout en conservant labarre de navigation. Vous devez inclure le fichier de configuration config.php.

d Installez un formulaire « auto-postant » avec des champs pour saisir chaque colonne de latable utilisateur (sauf la date de création). La clé id_utilisateur est représentéepar un champ caché. Prévoyez un bouton de soumission du formulaire.

dAjoutez dans le fichier de configuration des propriétés globales pour se connecter à la basede données MySQL : $cx_server, $cx_login, $cx_pwd, $cx_dbname. Définissezdans ce même fichier config.php une fonction globale get_default_connection() quiretourne l’ensemble des propriétés de connexion à la base de données.

dAjoutez dans la classe UserDAO un constructeur. Le constructeur doit récupérer les para-mètres de connexion depuis la classe get_default_connection() et la stocker dansune propriété privée db_connection.

dAjoutez dans la classe UserDAO une méthode adduser($userentity). Cette méthodeinsère dans la table utilisateur un enregistrement dont les valeurs de champs sont por-tées par le paramètre $userentity.

dAjoutez dans la classe UserService une méthode adduser($userentity). Cette mé-thode instancie la classe UserDAO et invoque la méthode adduser.

20

dDans le fichier utilisateur.php, aménagez un script PHP et testez si la requête HTTP est detype POST. Vous devez extraire les données du formulaire postées et initialiser une instancede UserEntity. Instanciez la classe UserService et appelez la méthode adduser.

dTestez le formulaire, saisissez des valeurs et cliquez sur le bouton de soumission desdonnées. Vérifiez dans la base de données la présence du nouvel enregistrement.

Corrigé p. 120

Page 11: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

Gestion des utilisateursChapitre 2énoncé

Énoncé 2.3 Affichage d’un utilisateur avec template réactif (responsive)

Durée estimative : 40 minutesCet exercice associe PHP et Bootstrap pour présenter la liste des utilisateurs dans un templateréactif. Le code PHP est employé pour effectuer une requête de sélection auprès de la base dedonnées et le framework Bootstrap apporte ses composants d’affichage optimisé pour différentséquipements (Web, mobile…).

dAjoutez dans la classe UserDAO la méthode getuserlist($filtrenom=null).Comme dans le TP précédent, récupérez la connexion depuis la propriété db_connection.Formez deux requêtes SQL pour sélectionner les enregistrements de la table utilisateur, selonque le paramètre de la méthode $filtrenom est null ou non. S’il est null, la requête sélec-tionne la totalité des enregistrements de la table utilisateur. Si le paramètre$filtrenom est non null, ajoutez une condition sur la colonne utilisateur_nom dansla requête.

Avant d’utiliser l’opérateur SQL like, vérifiez que le paramètre $filtrenom ne comportepas de signes pouvant dénaturer la requête SQL et ainsi exposer ce code à des attaques parinjection de script SQL. Les signes interdits sont notamment le point-virgule et les apos-trophes.

Instanciez pour chaque enregistrement un objet UserEntity et retournez un tableauindexé contenant la collection d’objets obtenue à partir de la lecture de la tableutilisateur.

21

dAjoutez dans UserService une méthode getuserlist($filtrenom) chargéed’appeler UserDAO::getuserlist($filtrenom).

dCréez une page application/utilisateurs.php et changez dans le fichier menu.json la propriétéroute=’#’ en route=’utilisateurs.php’ pour l’entrée située à l’index 1.Reprenez dans utilisateurs.php la mise en page générale depuis _layout.php et testez lapage.

dAménagez un script PHP, instanciez UserService et appelez la méthode getuserlistsans paramètre.

d Itérez à l’aide d’une boucle foreach dans la collection d’objets UserEntity et affichezles propriétés utilisateur_id, utilisateur_nom, utilisateur_email dans untableau.Ajoutez les attributs Bootstrap pour rendre le tableau réactif. Testez le tableau.

dDans un formulaire, ajoutez un champ texte ayant pour identifiant filtrenom afin de filtrerla liste à partir du nom. Le formulaire doit aussi comporter un bouton pour soumettre le for-mulaire.

Page 12: PHP et MySQL - fnac-static.com...C++) et à la conduite de projets. PHP et MySQL - Entraînez-vous à développer une application collaborative ISBN : 978-2-409-02162-6 ISSN 1765-7334

PHP et MySQL - Entraînez-vous à développer une applicationLes TP Informatiques

dDéfinissez les propriétés du formulaire sur POST et utilisateurs.php. Modifiez le script PHPpour appeler la méthode getuserlist($filtrenom) si le verbe est un POST.Testez le filtrage de la liste avec des préfixes de nom.

dAjoutez un lien vers la page adduser.php.

Énoncé 2.4 Gestion des équipesDurée estimative : 60 minutesCe TP est en quelque sorte la combinaison des deux précédents. Il s’agit de réaliser l’interfacede gestion des équipes d’utilisateurs en reprenant la même logique de séparation du code PHPen plusieurs couches. Patience, ce travail n’est pas superflu et trouvera très vite son utilitéquand le site sera plus étoffé.

dAjoutez dans la base de données les tables equipe(id_equipe,equipe_nom) etutilisateur_equipe(id_equipe,id_utilisateur).

dCréez dans Eclipse la classe TeamEntity reprenant chaque colonne de la table equipesous la forme d’un champ.

dAjoutez au projet deux classes TeamService et TeamDAO comportant les méthodesgetteamlist(), addteam($teamentity), editteam($teamentity). Employezdes requêtes SELECT, INSERT et UPDATE pour implémenter ces trois méthodes.

dAjoutez les méthodes getuserteam($id_equipe), adduserteam($id_utilisa-

Corrigé p. 125

22

teur, $id_equipe), removeuserteam($id_utilisateur, $id_equipe). Uti-lisez des requêtes SELECT, INSERT et DELETE pour implémenter ces trois méthodes.Définissez également la méthode getusernotinteam($id_equipe) qui sélectionne lesutilisateurs n’appartenant pas à une équipe.

dDans le répertoire application, ajoutez la page equipes.php en reprenant le contenu dufichier _layout.php. Installez un lien dans la page utilisateurs.php pour naviguer versequipes.php.

dDivisez l’écran equipes.php en colonnes : d’abord une zone de texte et une liste pour ajouteret afficher les équipes, puis encore deux listes pour afficher la composition d’une équipe etles utilisateurs n’appartenant pas à cette équipe.Chargez la liste des équipes avec la classe TeamService.Ajoutez un bouton de soumission cmd_addteam pour créer une nouvelle équipe.Dans le code POST, appelez la méthode addteam() et rafraîchissez le contenu de la listedes équipes.