Objectifs pédagogiques
Les objectifs principaux de ce sujet de travaux pratiques sont d'exécuter et de comprendre :
- une procédure d'installation d'un serveur web associé à une base de donnée.
- la mise en œuvre d'une application web simple sur la base de cette architecture 3 niveaux.
Un objectif secondaire est de se familiariser avec la pratique des interfaces de commande de ligne.
Pour traiter ces exercices, il est recommandé d'avoir étudié les chapitres R2‑III et R2‑IV du cours. Des renvois aux principaux éléments de cours ou à des pages web d'information générale sont donnés au fur et à mesure des questions.
Mise en situation
Environnement et matériel
Les manipulations demandées sont à accomplir sur un réseau local utilisant la pile de protocoles TCP/IP et disposant de tous les services attendus : passerelle vers l'Internet, serveur DHCP, résolveur DNS.
La présence d'un serveur proxy comme ceux mis en œuvre par les DSI académiques de l'Éducation nationale peut sérieusement compliquer certaines procédures d'installation.
On requiert le matériel listé ci‑dessous :
- pour jouer le rôle de client web, un poste de travail – de préférence un PC Linux, sinon un PC Windows avec service
sshactivé dans le terminal Powershell (cela évite de recourir à un logiciel tiers comme PuTTY) ; - pour jouer le rôle de serveur web et de base de données, un nano‑ordinateur de type Raspberry Pi 4 (ou éventuellement 3B), son bloc d'alimentation au secteur et une carte microSD de 8 Go minimum pour installer son système d'exploitation et ses logiciels.
Ces deux machines doivent être l'une et l'autre raccordées au réseau local – typiquement, via un switch comme sur la figure ci‑dessus – et se voir attribuer chacune une adresse IP sur le même segment pour pouvoir communiquer – ce qui est assuré avec la présence d'un serveur DHCP sur le réseau local et la configuration appropriée des machines (cf. chap R2‑II ). Évidemment, il faut connaître la plage d'adresses IP dynamiques paramétrée par l'administrateur du réseau.
Pour des questions pédagogiques, pour contrôler la carte Raspberry Pi, plutôt que de lui raccorder spécifiquement un écran et un clavier, on fait le choix d'une connexion distante via le protocole SSH (secure shell, cf. chap. R1‑IV ) directement dans un terminal de commandes en ligne sur le poste de travail avec la commande ssh. C'est en effet la solution usuellement adoptée dans un contexte professionnel, et tout particulièrement dans le domaine du cloud computing.
Travail demandé
Effectuer toutes les manipulations méticuleusement dans l'ordre indiqué. Saisir les commandes en ligne par copier‑coller des commandes pour éviter les fautes de frappe et d'inattention. Dans une perspective de consolidation des connaissances, il est recommandé de bien comprendre le rôle de chaque commande, en consultant éventuellement les pages web données en référence.
Répondre aux explications demandées sur un cahier ou dans un fichier.
Travail préparatoire
- Préparation du poste de travail
- Pour le gravage de la clef USB bootable d'une carte Raspberry Pi, quel que soit le système d'exploitation du poste de travail, il est recommandé d'employer l'utilitaire de gravage dédié Raspberry Pi Imager.
- Sur le poste de travail, vérifier qu'un logiciel de scan réseau est installé (cf. chap. R1‑II ).
- Préparation du système d'exploitation du serveur
- Pour le futur serveur, télécharger l'image du système d'exploitation Raspberry Pi OS (en abrégé, raspios) dans sa version 64 bits « lite » (without desktop) la plus récente . Il s'agit d'un fichier d'archive
.xz. En cas de débit trop lent, demander à l'enseignant une image déjà téléchargée sur clef USB. - Introduire la carte microSD dans un lecteur USB3.0 (attention au sens) et la brancher au poste de travail. Si elle n'est pas vierge, il est inutile de la formater ; cette opération sera automatiquement effectuée avant le gravage.
- Pour le modèle de carte, choisir celui qui est fourni par comme matériel de TP – typiquement,
Raspberry Pi 4. - Pour le système d'exploitation, choisir l'option « utiliser une image personnalisée » (use custom) tout en bas de la liste et sélectionner celle qui a été téléchargée à la question 2.a.
- Pour le support de stockage, sélectionner la carte MicroSD branchée sur le poste – attention à ne pas confondre avec une clef USB personnelle qui serait éventuellement montée sur le poste, le risque étant d'écraser tout son contenu.
- Cliquer alors sur le bouton
Suivantet, dans la fenêtre depersonnalisation de l'OS, sélectionner l'optionModifier réglages. Sélectionner les options ci‑dessous avec le plus grand soin (un mauvais choix risque d'empêcher la possibilité ultérieure de se connecter à la carte, et donc de devoir recommencer le processus de « gravage » de l'image du système). - Cocher l'option
nom d'hôte(hostname) et saisirRPIXoù X est un numéro indiqué par l'enseignant, différent pour chaque carte utilisée dans la salle de travaux pratiques. - Cocher l'option
Définir nom d'utilisateur […]puis saisir respectivementpi(sans numéro accolé) et le mot de passe indiqué par l'enseignant, étant très vigilant sur sa saisie car elle se fait presque « à l'aveugle ». - Cocher l'option
Définir les réglages locauxet choisir la zone horaire locale (Paris) ainsi que le clavierfr. - cocher l'option
Enable SSHavec la sous‑optionuse password authentication. - cocher l'option
Éjecter le media quand terminé; - décocher l'option
Activer la télémétrie. - Finalement, enregistrer ces paramétrages puis cliquer sur le bouton
OUIpour démarrer le gravage l'image du système sur la carte MicroSD. -
bootfs, qui constitue le secteur de démarrage du système ; -
rootfs, qui constitue le système de fichiers usuels sur Linux, avec les répertoires/bin/boot/dev/etc/homeetc. - Mise en service et paramétrage du serveur
- Introduire la carte microSD dans le bon sens dans le logement sous la carte Raspberry Pi (cf. la photo ci‑contre) puis raccorder cette dernière au réseau local via un câble Ethernet avant sa mise sous tension.
- Scanner le réseau local sur toute la plage d'adresses IP dynamiques. Dans la liste obtenue, repérer l'adresse IP de la carte en correspondance avec son adresse MAC ou son nom d'hôte.
- Sur le poste de travail, ouvrir un terminal de commandes en ligne et se connecter à la carte Raspberry Pi par le protocole SSH (secure shell) via la commande :
- si demandé, saisir d'abord le mot de passe de l'utilisateur du poste de travail (typiquement,
elv) pour valider le recours à la commandesudo; - saisir ensuite le mot de passe de l'utilisateur
pide la carte Raspberry Pi, paramétré lors de l'opération de gravage (typiquement,pi– cf. question 2.b supra ). - En cas d'échec de la connexion
ssh(par oubli lors du paramétrage ou blocage après saisie d'un mot de passe erronné), il est possible de la rétablir sans avoir à regraver tout le système. Pour cela : - Débrancher l'alimentation de la carte Raspberry Pi, retirer la carte microSD, la replacer dans le lecteur, et brancher ce dernier sur un port USB3.0 du poste de travail. Ses partitions doivent alors apparaître dans le panneau de gauche du navigateur de fichiers.
- Dans le navigateur de fichiers du poste de travail, cliquer sur la partition
bootfs, puis, dans la fenêtre ainsi ouverte, par un clic‑droit, y créer un nouveau document (vide) et le nommerssh. - Démonter la partition, retirer le lecteur, extraire la carte et la replacer dans le logement de la carte Raspberry Pi. Rebrancher son alimentation et attendre que le système d'exploitation se charge en mémoire vive. En principe, la connexion
sshdevrait être à nouveau possible. - Si le mot de passe de l'utilisateur
pia été mal choisi (trop court, trop banal, etc.) lors du paramétrage du système, il est recommandé de le changer dès le début de la connexionssh. Utiliser pour cela la commandepasswdW et adopter le mot de passe indiqué par l'enseignant. Également, il est prudent de le mémoriser avec un gestionnaire de mots de passe W pour le retrouver en cas d'oubli ultérieur. - À l'aide de la commande
date, vérifier si le système est réglé sur la bonne zone horaire (cf. chap. R2‑VI ) et que l'heure est synchrone avec celle affichée par le poste de travail. - À l'aide de la commande
locale(sans argument), vérifier si les valeurs des variables d'environnement du système (notammentLANGetLANGUAGE) sont cohérentes avec les paramètres régionaux W de la France. - Modifier le fichier de sélection des locales :
- Saisir la commande :
- Modifier le fichier de configuration des paramètres régionaux de langage :
- Pour rendre ces modifications effectives, exécuter la commande :
- Mettre à jour le système par la séquence de commandes suivantes :
- Sur le poste de travail, à l'aide d'un navigateur, sélectionner un site de dépôt sur la page web suivante (copier son URL dans le presse‑papier).
- Sur la carte Raspberry Pi, coller cet URL à la place de ceux codés dans les fichiers suivants (à éditer à l'aide de la commande
sudo nano) : -
/etc/apt/sources.list -
/etc/apt/sources.list.d/raspi.list
apt (advanced packaging tool W), c'est‑à‑dire en exécutant la commande suivante :
sudo apt install rpi‑imager
.deb (paquets Debian) sur la page de téléchargement du site de l'application puis double‑cliquer sur le fichier obtenu pour lancer l'installation. Fetchers… du menu Outils, ajouter les colonnes Constructeur MAC et Adresse MAC dans fenêtre d'affichage (cf. la capture d'écran ci‑dessous).
Général : Services : Options :
ping nom d'hôte de la carte.local
rpiX. En principe, cette commande affiche entre parenthèses l'adresse IP de l'hôte ainsi sollicité.
sudo ssh pi@adresse IP de la carte
ssh à la carte sans connaître son adresse IP, grâce à la seule connaissance du nom d'hôte (cf. chap. R2‑I ), via la commande :
sudo ssh pi@nom d'hôte de la carte.local
ssh.
sudo timedatectl set-timezone Europe/Paris && sudo timedatectl set-ntp True
date, que le système est bien réglé sur l'heure locale, à savoir la zone horaire CET – Central European Time – ou CEST – Central European Summer Time. fr.FR-UTF-8 en suivant la procédure ci‑dessous.
sudo nano /etc/locale.gen
# en début de ligne) :
#en_GB.UTF-8 UTF-8
fr_FR.UTF-8 UTF-8
Ctrl-S (save) et Ctrl-X (exit) pour sauvegarder ces modifications et quitter l'éditeur. sed (stream editor W) :
sudo sed -i '/^en_GB.UTF-8 UTF-8/ s/^/#/' /etc/locale.gen
sudo sed -i '/^# fr_FR.UTF-8 UTF-8/ s/^# //' /etc/locale.gen
sudo locale-gen
fr.FR-UTF-8.
sudo nano /etc/default/locale
LANG=fr_FR.UTF-8 LANGUAGE=fr_FR.UTF-8
Ctrl-S) et quitter (Ctrl-X). sed (stream editor W) :
sudo sed -i '2d' /etc/default/locale && echo -e "LANG=fr_FR.UTF-8\nLANGUAGE=fr_FR.UTF-8" | sudo tee -a /etc/default/locale > /dev/null
source /etc/default/locale
locale, vérifier que les paramètres régionaux sont maintenant conformes à la localisation du système. exit) puis renouveler la connexion ssh et re‑vérifier les paramètres régionaux.
sudo apt update
sudo apt upgrade -y
sudo apt autoremove
sudo reboot
ssh. Si la commande de mise à jour du système échoue au motif que le serveur des paquets est indisponible (typiquement, avec une erreur 503), cela peut être dû au serveur proxy académique (cf. TP S1‑1 ).
Pour y remédier, une solution peut consister à changer de site de dépôt, en suivant la procédure ci‑dessous.
Recommencer alors la procédure de mise à jour (update, upgrade et reboot) décrite supra.
Installation et test d'un serveur web
- Installation du logiciel serveur HTTP Apache
- En connexion
sshavec la carte Raspberry Pi, installer le logiciel serveur HTTP Apache (cf. chap. R2‑IV ) : - Spécifier le nom du serveur en éditant le fichier de configuration (avec activation de la numérotation des lignes de l'éditeur
nano) : - Relancer le service
apache2(une authentification de l'utilisateur par mot de passe est requise) puis vérifier ensuite qu'il est bien actif en tâche de fond : - Donner à l'utilisateur
pila propriété du répertoire/var/wwwqui constitue pour l'applicationapache2la racine des fichiers de pages web qu'elle peut servir : - Créer un répertoire
examplePHPet y charger la page web dynamiquechangeBackground.phpdonnée à titre d'exemple académique dans le cours (cf. chap. R2‑IV ) : - L'option
--no-check-certificatese justifie par le fait qu'il s'agit d'un site de confiance, administré par l'établissement, mais dont les certificats ne sont pas toujours bien gérés… - Sur le serveur, le fichier
changeBackgroundest stocké avec l'extension.txtet non pas.php, pour qu'il soit interprété par un navigateur non pas comme une page web dynamique, mais seulement une ressource à télécharger. La commandemvqui suit sert à rétablir son extension normale après téléchargement, ce qui est indispensable à sa bonne interprétation sur le navigateur du poste client. - Installation du langage de backend PHP
- Toujours en connexion
sshavec la carte Raspberry Pi, installer les paquets du langage php (cf. chap. R2‑IV ) dans sa version stable sélectionnée sur le dépôt Raspberry Pi, ainsi que les paquets communs partagés par toutes les versions : - Installer quelques modules d'extension supplémentaires usuellement utilisées pour le développement web en suivant la procédure ci‑dessous.
- Tout d'abord, il faut récupérer le numéro de version du paquet php au format x.y (ce qu'on vérifie juste après avec une commande
echo) : - Ensuite, on peut installer les différents modules en désignant leur numéro de version par la valeur de la variable
PHP_VERSIONpréalablement définie : - Après ces manipulations, on peut vérifier la liste des modules d'extension installés par la commande :
- Dans le navigateur du poste de travail, on peut maintenant recharger la page web
changeBackground.phpouverte à la question 1.e et constater qu'elle fonctionne comme prévu. Si tel n'est pas le cas, penser à vider le cache du navigateur pour cette entrée (avec Firefox, utiliser la commandeOublier ce sitedepuis l'historique de navigation, accessible dans le menu principal). - Installation du SGBDR MariaDB
- Toujours en connexion
sshavec la carte Raspberry Pi, installer les paquets du SGBDR MariaDB (cf. chap. R2‑IV ) dans sa version stable sélectionnée sur le dépôt Raspberry Pi : - Paramétrer la sécurité du SGBDR via la commande :
- ne pas définir de mot de passe pour l'utilisateur
root, autrement dit taper juste sur la touche ENTRÉE (l'authentification se fera par socket Unix – c'est‑à‑dire via la commandesudo) ; - valider l'authentification par
unix_socket; - ne pas changer le mot de passe de l'utilisateur
root; - supprimer l'accès aux utilisateurs anonymes ;
- supprimer la possibilité d'accès distant pour l'utilisateur
root; - supprimer la base de donnée de test et son accès ;
- recharger la table des privilèges maintenant.
- Exécuter MariaDB en tant qu'utilisateur
root: - Créer maintenant un compte d'accès à l'utilisateur
piavec des droits limités et avec le même mot de passe celui d'utilisateur de la carte Raspberry Pi – à saisir dans la commande avant avant de la valider : - Se placer dans le répertoire
/etc/sudoers.d/et lancer la commandevisudo: - Dans ce fichier, juste avant la ligne de commentaire
# User privilege specificationajouter les directives suivantes : - De façon étonnante,
Ctrl-Xne termine pas l'édition mais entre en mode itératif pour accéder successivement à les fichiers inclus dans le répertoire/etc/sudoers.d. On accède à l'édition d'un fichier en tapant la touche ENTRÉE et on en sort parCtrl-X, précédé d'unCtrl-Ssi on a modifié le fichier. - Dans le fichier
010_global-tty, mettre en commentaire la seule ligne présente comme ainsi : - Dans le fichier
010_pi-nopasswd, modifier comme ci‑dessous la seule ligne présente : - Attention ! En mode itératif, même le fichier
READMEdoit être ouvert pour finaliser la procédure de modification. - Créer un répertoire
example3tieret y télécharger les fichiers source d'un exemple d'application 3 niveaux proposé dans le cours (cf. chap. R2‑IV ), en exécutant la séquence des commandes suivantes : - La commande
wgetest ici invoquée en mode récursif (option-r) avec une profondeur limitée à un seul niveau de répertoire (option-l1), sans télécharger le répertoire parent (option--no-parent) en supprimant les 6 premiers segments (noms des répertoires du chemin) dans le nom des fichiers téléchargés (option--cut-dirs=6) ainsi que le nom d'hôte (option-nH). L'option--rejectest également activée pour supprimer certains fichiers temporaires inutiles. - On se reportera supra pour comprendre le recours à l'option
--no-check-certificateainsi que la manipulation des extensions des fichiers (detxtversphp). - Éditer le fichier
dbConnect.php, en activant la numérotation des lignes de l'éditeurnano: - Ouvrir la page web sur le poste de travail via l'URL :
http://adresse IP/example3tier/index.php
et vérifier qu'elle s'affiche conformément à son modèle (cf. chap. R2‑IV ) mais ne pas tester son fonctionnement pour le moment (cela produirait une erreur de connexion puisqu'aucune base de donnée n'a encore été créée). - Toujours en connexion
sshavec la carte Raspberry Pi, consulter le contenu du fichier sourcetableCreation.sqlqui va servir à créer la base de donnée nécessaire : - Sur le poste de travail, dans le navigateur, recharger la page web
index.phppuis tester son fonctionnement en saisissant par exemple la couleur nommémediumyellowavec les valeurs(255, 255, 127)comme code RGB. Cliquer sur le boutonRecordpour valider la saisie. - Installation de l'interface web phpMyAdmin
- Toujours en connexion
sshavec la carte Raspberry Pi, installer les paquets de l'interface web phpMyAdmin d'administration d'une base de donnée de type mySQL (cf. chap. R2‑IV ) dans sa version stable sélectionnée sur le dépôtaptde Raspberry Pi : - valider le choix de configurer la base de donnée avec
dbconfig-common; - saisir le même mot de passe qu'avec MariaDB pour l'accès à l'application phpMyAdmin ;
- choisir
apache2comme serveur web à configurer. - Sur le poste de travail, dans un navigateur, ouvrir la page web de connexion à phpMyAdmin via l'URL :
http://adresse IP/phpmyadmin
et se connecter avec l'identifiantpi(et non pasroot) et le mot de passe utilisé depuis le début. Puis : - s'il est masqué, afficher le panneau navigation en cliquant sur le bouton en haut à gauche de la page ;
- dans ce panneau, retrouver la base de donnée
userPrefet cliquer sur son bouton «+» pour visualiser la liste des tables qu'elle contient ; - y retrouver la table
favoriteColorset cliquer sur son bouton «+» pour visualiser la liste de ses colonnes ; puis cliquer sur le nom de la table – qui est un hyperlien – pour afficher la page qui permet de manipuler son contenu ; - Avec les fonctionnalités de la page web dynamique :
http://adresse IP/example3tier/index.php
ajouter de nouvelles couleurs et constater qu'elles apparaissent dans la tablefavoriteColorsen rafraîchissant la page ; - dans l'interface phpMyAdmin, expérimenter les différentes possibilités de modifier les données de la table : ajouter des lignes, modifier une ligne, supprimer une ligne, etc.
- Vérifier que l'accès à phpMyAdmin en tant qu'utilisateur
rootest impossible sans saisir un mot de passe.
sudo apt install apache2 -y
sudo nano -l /etc/apache2/apache2.conf
ServerName cielXwebserver
X est un numéro spécifique indiqué par l'enseignant, différent pour chaque carte sur le réseau (le même qu'à la question 2.b – cf. supra ). Crtl-S) et quitter (Ctrl-X).
systemctl restart apache2 && systemctl status apache2
http://adresse IP de la carte ou http://nom d'hôte du système.local
sudo chown -R pi:pi /var/www
ls -l /var/www
cd /var/www/html && mkdir examplePHP && cd examplePHP/
wget --no-check-certificate https://www.lycee-ferry-versailles.fr/snir/moduleR/prog/R2tp2_serveurs/changeBackground.txt
mv changeBackground.txt changeBackground.php
http://adresse IP/examplePHP/changeBackground.php
et constater qu'elle est dysfonctionnelle à plusieurs titres (observer le texte affiché et tester les deux liens). Proposer une explication à ces dysfonctionnements mais ne pas fermer cet onglet (il sera réutilisé ultérieurement).
sudo apt install php php-common -y
PHP_VERSION=$(php --version | grep -oP '^PHP \K[0-9]+\.[0-9]+')
echo "${PHP_VERSION}"
sudo apt install "php${PHP_VERSION}-mysql" "php${PHP_VERSION}-curl" "php${PHP_VERSION}-gd" "php${PHP_VERSION}-intl" "php${PHP_VERSION}-mbstring" "php${PHP_VERSION}-xml" "php${PHP_VERSION}-zip" "php${PHP_VERSION}-fpm" -y
fpm W (fastGCI process manager) n'étant pas activée par défaut, il faut le faire « manuellement » via la séquence de commandes suivantes :
sudo a2enmod proxy_fcgi setenvif && sudo a2enconf "php${PHP_VERSION}-fpm" && sudo a2dismod "php${PHP_VERSION}"
apache via la commande :
systemctl restart apache2
php -m
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
http://adresse IP/info.php
pour y lire toutes les caractéristiques techniques de l'environnement d'exécution de php.
sudo apt install mariadb-server mariadb-client -y
sudo mariadb-secure-installation
sudo mysql -u root
sudo.
root, créer l'utilisateur phpmyadmin avec un mot de passe spécifié par l'enseignant – à saisir dans la commande avant avant de la valider ; accorder à cet utilisateur tous les droits sur les bases de données (il en sera l'administrateur) :
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'mot de passe administrateur';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
CREATE USER 'pi'@'localhost' IDENTIFIED BY 'mot de passe utilisateur'; GRANT CREATE, ALTER, DROP, SHOW DATABASES, SELECT, INSERT, UPDATE, DELETE ON *.* TO 'pi'@'localhost' IDENTIFIED BY 'mot de passe utilisateur' WITH GRANT OPTION; FLUSH PRIVILEGES;
quit.
root sans demande de mot de passe par le système (cf. supra ) n'est pas conforme au paramètre de sécurisation par unix_socket choisie via la commande mysql_secure_installation et cela crée une vulnérabilité. Cela est dû au fait que, pour faciliter l'administration de la carte (dans le cadre usuel d'un emploi en amateur), l'utilisateur pi est dispensé de saisie de mot de passe même pour les commandes sudo. sudo, comme indiqué ci‑dessous.
cd /etc/sudoers.d/ && sudo visudo
/etc/sudoers dans une version provisoire que ne sera validée qu'après vérification syntaxique. Defaults timestamp_type=tty Defaults!/usr/bin/mysql timestamp_timeout=0 Defaults!/usr/bin/mariadb timestamp_timeout=0 Defaults!/usr/sbin/visudo timestamp_timeout=0 Defaults!/usr/bin/chmod timestamp_timeout=0 Defaults!/bin/chmod timestamp_timeout=0 Defaults!/usr/bin/chown timestamp_timeout=0 Defaults!/bin/chown timestamp_timeout=0
sudo lorsqu'elle s'applique aux commande mysql mariadb visudo chmod et chown, et ce même si le mot de passe a été saisi juste avant (annulation de la temporisation). @includedir /etc/sudoers.d puis sauvegarder (Crtl-S) et quitter (Ctrl-X). visudo ne passe pas automatiquement en mode itératif, il est toujours possible d'éditer chaque fichier individuellement en saisissant son nom après la commande. # Defaults timestamp_type=global
pi ALL=(ALL) ALL
pi n'est plus dispensé de saisie de mot de passe.
cd /var/www/html && mkdir example3tier && cd example3tier/
wget -r --no-parent -nH -l1 --cut-dirs=6 --reject="index.html*","example3tier*" --no-check-certificate -- https://www.lycee-ferry-versailles.fr/snir/moduleR/prog/R2tp2_serveurs/example3tier
for f in *.txt; do mv -- "$f" "${f%.txt}.php"; done
sudo nano -l dbConnect.php
"*********" pour donner à la variable $dbpasswd le mot de passe de l'utilisateur pi (toujours le même). Sauvegarder (Crtl-S) et quitter (Ctrl-X).
cat tableCreation.sql
pi avec saisie de mot de passe :
sudo mysql -u pi -p
userPref et de la table favoriteColors :
source tableCreation.sql
userPref est bien créée :
SHOW DATABASES;
favoriteColors existe, puis détailler sa structure : SHOW TABLES; DESCRIBE `favoriteColors`;
favoriteColors grâce à la commande SQL :
SELECT * FROM `favoriteColors`;
mediumyellow enregistrée via la page web. Effacer alors cet enregistrement avec la commande SQL :
DELETE FROM `favoriteColors` WHERE `colorName`="mediumyellow";
INSERT INTO `favoriteColors` (colorName, redCode, greenCode, blueCode) VALUES ("mediumyellow", 255, 255, 127);
mediumyellow via la commande SQL :
UPDATE `favoriteColors` SET `blueCode` = 128 WHERE `colorName`="mediumyellow";
quit. Faire alors une recherche dans le fichier source recordColor.php pour y retrouver le codage de la commande INSERT en langage php :
cat recordColor.php | grep "INSERT"
sudo apt install phpmyadmin -y
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin && systemctl reload apache2