0% ont trouvé ce document utile (0 vote)
17 vues35 pages

Lap2 Print

Ce document présente un cours sur l'utilisation des bases de données avec PHP, en abordant des concepts d'architecture web, notamment les architectures client-serveur et 3-tier. Il inclut des exemples pratiques d'accès aux bases de données en écriture et en lecture, ainsi qu'un exercice pratique. Enfin, il décrit l'architecture LAPP, qui combine Linux, Apache, PostgreSQL et PHP.

Transféré par

saidreal2052
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
17 vues35 pages

Lap2 Print

Ce document présente un cours sur l'utilisation des bases de données avec PHP, en abordant des concepts d'architecture web, notamment les architectures client-serveur et 3-tier. Il inclut des exemples pratiques d'accès aux bases de données en écriture et en lecture, ainsi qu'un exercice pratique. Enfin, il décrit l'architecture LAPP, qui combine Linux, Apache, PostgreSQL et PHP.

Transféré par

saidreal2052
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 35

Application web de bases de

données avec PHP

Paternité - Partage des Conditions Initiales à l'Identique : http://creativecommons.org/licenses/by-sa/4.0/fr/


Table des matières

Objectifs 3
Introduction 4
I - Cours 5
1. Applications et bases de données .............................................................................5
1.1. Rappels ..............................................................................................................................................5
1.2. Exemples d'accès à une BD en écriture par un langage de programmation ..................................5
1.3. Exemples d'accès à une BD en lecture par un langage de programmation ....................................7

2. Architecture Web .......................................................................................................8


2.1. Notions d'architecture client-serveur ..............................................................................................8
2.2. Notions d'architecture 3-tier ............................................................................................................9
2.3. Notions de serveur et de client web ...............................................................................................11
2.4. Notion d'architecture web ..............................................................................................................12
2.5. Architecture LAPP ............................................................................................................................12

II - Exercice 13
1. Exercice : Recensement II ........................................................................................13
III - Complément 16
1. Exercice : Tester un environnement LAPP sur son ordinateur personnel .............16
Contenus annexes 19
Glossaire 33
Abréviations 34
Index 35

2 Stéphane Crozat
Objectifs

Savoir utiliser une base de données depuis un langage de programmation

Stéphane Crozat 3
Introduction

Les applications de BD sont aujourd'hui généralement réalisées selon des architectures réseaux.
L'explosion d'Internet de son côté a favorisé le langage HTML pour implémenter les IHM et a vu la
naissance de langages adaptés pour implémenter la couche applicative côté serveur, tels que PHP.

4 Stéphane Crozat
Cours I

1. Applications et bases de données


1.1. Rappels

Rappel

Architecture générale d'une application de base de données

Rappel

Architecture générale d'une application de base de données (cf. p.19)


Méthode générale d'accès à une BD en écriture par un langage de programmation (cf. p.20)
Méthode générale d'accès à une BD en lecture par un langage de programmation (cf. p.21)

1.2. Exemples d'accès à une BD en écriture par un langage de programmation

PHP (simplifiée, dépréciée) Exemple

1 function fInsert ($pValue) {


2 // Connexion à la base de données
3 $vHost = 'foo.fr';
4 $vPort = '5432';
5 $vData = 'myDatabase';
6 $vUser = 'me';
7 $vPass = 'secret';
8 $vConn = new PDO("pgsql:host=$vHost;port=$vPort;dbname=$vData",$vUser,$vPass);

Stéphane Crozat 5
Cours

9 // Écriture, exécution et test de la requête


10 $vSql = "INSERT INTO t (a) VALUES ($pValue)";
11 $vResult=$vConn->query($vSql);
12 if (! $vResult) {
13 echo 'Échec de l\'insertion';
14 return 0;
15 }
16 else {
17 return 1;
18 }
19 // Clôture de la connexion
20 $vConn = null;
21 }

Remarque

L'exemple précédent est présenté car il est simple à comprendre.


Il fonctionne mais son usage est déprécié, c'est à dire qu'il existe une façon de faire plus évoluée, qui
est recommandée, en utilisant les requêtes préparées.

Fonction PHP (avec requête préparée) Exemple

1 function fInsert ($pValue) {


2 // Connexion à la base de données
3 $vHost = 'foo.fr';
4 $vPort = '5432';
5 $vData = 'myDatabase';
6 $vUser = 'me';
7 $vPass = 'secret';
8 $vConn = new PDO("pgsql:host=$vHost;port=$vPort;dbname=$vData",$vUser,$vPass);
9 // Écriture, exécution et test de la requête
10 $vSql = "INSERT INTO t (a) VALUES (:value)";
11 $vStatement = $vConn->prepare($vSql);
12 $vStatement->bindValue(':value',$pValue,PDO::PARAM_INT);
13 $vResult = $vStatement->execute();
14 if (! $vResult) {
15 echo 'Échec de l\'insertion';
16 return 0;
17 }
18 else {
19 return 1;
20 }
21 // Clôture de la connexion
22 $vConn = null;
23 }

Procédure VBA Exemple

1 Sub fInsert(pValue As String)


2 vSql = "INSERT INTO t (a) VALUES ('" & pValue & "')"
3 CurrentDb.CreateQueryDef("", vSql).Execute
4 End Sub

6 Stéphane Crozat
Cours

1.3. Exemples d'accès à une BD en lecture par un langage de programmation

Fonction PHP Exemple

1 function fSelect () {
2 // Connexion à la base de données
3 $vHost = 'foo.fr';
4 $vPort = '5432';
5 $vData = 'myDatabase';
6 $vUser = 'me';
7 $vPass = 'secret';
8 $vConn = new PDO("pgsql:host=$vHost;port=$vPort;dbname=$vData",$vUser,$vPass);
9 // Écriture, préparation et exécution de la requête
10 $vSql = 'SELECT a, b FROM t';
11 $vResultSet = $vConn->prepare($vSql);
12 $vResultSet->execute();
13 // Traitement du résultat
14 while ($vRow = $vResultSet->fetch(PDO::FETCH_ASSOC)) {
15 echo $vRow['a'];
16 echo ' ';
17 echo $vRow['b'];
18 }
19 // Clôture de la connexion
20 $vConn = null;
21 }

Procédure VBA Exemple

1 Sub fSelect()
2 vSql = "select a, b from t"
3 Set vRs = CurrentDb.CreateQueryDef("", vSql).OpenRecordset
4 Do While Not vRs.EOF
5 Debug.Print vRs.Fields(0)
6 Debug.Print vRs.Fields(1)
7 vRs.MoveNext
8 Loop
9 End Sub

Programme Java Exemple

1 class fSelect {
2 public static void main(String[] args) {
3 try {
4 // Connexion
5 DriverManager.registerDriver (new OracleDriver());
6 Connection vCon =
DriverManager.getConnection("jdbc:oracle:thin:nf17/nf17@localhost:1521:test");
7 // Exécution de la requête
8 Statement vSt = vCon.createStatement();
9 ResultSet vRs = vSt.executeQuery("SELECT a, b FROM t");
10 // Affichage du résultat
11 while(vRs.next()){
12 String vA = vRs.getString(1);
13 String vB = vRs.getString(2);
14 System.out.println(vA + " - " + vB));
15 }
16 }
17 catch (Exception e) {
18 e.printStackTrace();
19 }

Stéphane Crozat 7
Cours

20 }
21 }

2. Architecture Web
Objectifs
Comprendre les principes des architectures d'application de bases de données (en particulier 3-tier et
web)

Cette section a été réalisée à partir de contenus de www.commentcamarche.net, © 2003 Jean-François


Pillou (document soumis à la licence GNU FDL).

2.1. Notions d'architecture client-serveur


Présentation de l'architecture d'un système client/serveur
De nombreuses applications fonctionnent selon un environnement clients∗/serveur∗, cela signifie
que des machines clientes (des machines faisant partie du réseau) contactent un serveur, une machine
généralement très puissante en terme de capacités d'entrée-sortie, qui leur fournit des services. Ces
services sont des programmes fournissant des données telles que l'heure, des fichiers, une
connexion...
Les services sont exploités par des programmes, appelés programmes clients, s'exécutant sur les
machines clientes. On parle ainsi de client FTP, client de messagerie...
Dans un environnement purement client/serveur, les ordinateurs du réseau (les clients) ne peuvent
voir que le serveur, c'est un des principaux atouts de ce modèle.

Avantages de l'architecture client/serveur


Le modèle client/serveur est particulièrement recommandé pour des réseaux nécessitant un grand
niveau de fiabilité, ses principaux atouts sont :
des ressources centralisées
étant donné que le serveur est au centre du réseau, il peut gérer des ressources communes à
tous les utilisateurs, comme par exemple une base de données centralisée, afin d'éviter les
problèmes de redondance et de contradiction
une meilleure sécurité
car le nombre de points d'entrée permettant l'accès aux données est moins important
une administration au niveau serveur
les clients ayant peu d'importance dans ce modèle, ils ont moins besoin d'être administrés
un réseau évolutif
grâce à cette architecture ont peu supprimer ou rajouter des clients sans perturber le
fonctionnement du réseau et sans modifications majeures

Inconvénients du modèle client/serveur


L'architecture client/serveur a tout de même quelques lacunes parmi lesquelles :
un coût élevé
dû à la technicité du serveur
un maillon faible
le serveur est le seul maillon faible du réseau client/serveur, étant donné que tout le réseau est
architecturé autour de lui! Heureusement, le serveur a une grande tolérance aux pannes
(notamment grâce au système RAID∗)

8 Stéphane Crozat
Cours

Fonctionnement d'un système client/serveur

Schéma de fonctionnement d'un système client/serveur (commentcamarche.net - © 2003 Pillou - GNU


FDL)
Un système client/serveur fonctionne selon le schéma suivant:
Le client émet une requête vers le serveur grâce à son adresse et à son port, qui désigne un
service particulier du serveur
Le serveur reçoit la demande et répond à l'aide de l'adresse de la machine client (et de son port)

2.2. Notions d'architecture 3-tier


Présentation de l'architecture à deux niveaux
L'architecture à deux niveaux (aussi appelée architecture 2-tier,tier signifiant étage en anglais)
caractérise les systèmes clients/serveurs dans lesquels le client∗ demande une ressource et le
serveur∗ la lui fournit directement. Cela signifie que le serveur ne fait pas appel à une autre
application afin de fournir le service.

Architecture 2-tier (commentcamarche.net - © 2003 Pillou - GNU FDL)

Présentation de l'architecture à trois niveaux


Dans l'architecture à 3 niveaux (appelée architecture 3-tier), il existe un niveau intermédiaire, c'est-à-
dire que l'on a généralement une architecture partagée entre:
1. Le client
le demandeur de ressources
2. Le serveur d'application
(appelé aussi middleware) le serveur chargé de fournir la ressource mais faisant appel à un autre
serveur
3. Le serveur secondaire
(généralement un serveur de base de données), fournissant un service au premier serveur

Stéphane Crozat 9
Cours

Architecture 3-tier (commentcamarche.net - © 2003 Pillou - GNU FDL)

Remarque

Étant donné l'emploi massif du terme d'architecture à 3 niveaux, celui-ci peut parfois désigner aussi les
architectures suivantes :
Partage d'application entre client, serveur intermédiaire, et serveur d'entreprise
Partage d'application entre client, base de données intermédiaire, et base de données
d'entreprise

Comparaison des deux types d'architecture


L'architecture à deux niveaux est donc une architecture client/serveur dans laquelle le serveur est
polyvalent, c'est-à-dire qu'il est capable de fournir directement l'ensemble des ressources demandées
par le client.
Dans l'architecture à trois niveaux par contre, les applications au niveau serveur sont délocalisées,
c'est-à-dire que chaque serveur est spécialisé dans une tâche (serveur web et serveur de base de
données par exemple). Ainsi, l'architecture à trois niveaux permet :
une plus grande flexibilité/souplesse
une plus grande sécurité (la sécurité peut être définie pour chaque service)
de meilleures performances (les tâches sont partagées)

L'architecture multi-niveaux Complément

Dans l'architecture à 3 niveaux, chaque serveur (niveaux 1 et 2) effectue une tâche (un service)
spécialisée. Ainsi, un serveur peut utiliser les services d'un ou plusieurs autres serveurs afin de fournir
son propre service. Par conséquence, l'architecture à trois niveaux est potentiellement une
architecture à N niveaux.

10 Stéphane Crozat
Cours

Architecture N-tier (commentcamarche.net - © 2003 Pillou - GNU FDL)

2.3. Notions de serveur et de client web

Fondamental

Un serveur web sert à rendre accessibles des pages web sur internet via le protocole HTTP.

Serveur web Définition

Un serveur web est un logiciel capable de répondre à des requêtes HTTP, c'est à dire de renvoyer des
données (par exemple une page HTML), en réponse à des demandes écrites en HTTP (par exemple une
requête GET).
Synonyme : serveur HTTP

Client web Définition

Un client web est un logiciel capable d'envoyer des requêtes HTTP à un serveur web et d'afficher les
résultats. Les navigateurs web sont les clients web les plus répandus.

Remarque

Un serveur web répond par défaut sur le port 80.

Exemple

Apache : logiciel libre fondation Apache, la moitié des sites web au monde
Nginx : logiciel libre BSD, en croissance
IIS : logiciel propriétaire Microso

Stéphane Crozat 11
Cours

2.4. Notion d'architecture web


Fait à partir de www.commentcamarche.net. Copyright 2003 Jean-François Pillou. Document soumis à
la licence GNU FDL.

Exemples d'architecture Web (commentcamarche.net - © 2003 Pillou - GNU FDL)

2.5. Architecture LAPP

Définition Définition

On appelle une architecture LAPP une architecture qui s'appuie sur :


Linux pour le système d'exploitation
Apache pour le serveur Web
PostgreSQL pour la base de données
PHP pour le langage applicatif

LAMP, WAMP, WAPP Complément

LAMP : Linux, Apache, MySQL, PHP


WAMP : Windows, Apache, MySQL, PHP
...

12 Stéphane Crozat
Exercice II

1. Exercice : Recensement II
[45 min]
Soit le fichier CSV suivant :
1 num;nom;population
2 01;Ain;529378
3 02;Aisne;552320
4 03;Allier;357110
5 04;Alpes-de-Haute-Provence;144809
6 05;Hautes-Alpes;126636
7 06;Alpes-Maritimes;1022710
8 07;Ardèche;294522
9 08;Ardennes;299166
10 09;Ariège;142834
11 10;Aube;301388

Question 1
Établir un modèle relationnel et un code SQL permettant d'accueillir le contenu de ce fichier (on
nommera la table dpt1).

Question 2
Implémenter ce modèle sous Postgres et importer le fichier CSV.
Indice :
Importer un fichier CSV (cf. p.22)

Question 3
En quelle forme normale est le modèle ? Normalisez le en 3NF (on nommera la table dpt2).

Question 4
Écrivez et exécuter la requête SQL permettant de migrer dpt1 dans dpt2.
Indice :
1 INSERT INTO dpt2 (...)
2 SELECT ...
3 FROM dpt1

Indice :
Utiliser la fonction SUBSTR.
Indice :
Si vous avez défini #num comme entier, vous aurez besoin de la fonction CAST(madonnée AS
montype)

Stéphane Crozat 13
Exercice

Question 5
Compléter le programme HTML/PHP permettant d'afficher le contenu de la table normalisée, tel que
présentée ci-dessous.

Page HTML visualisée avec un navigateur Web


1 <html>
2 <head>
3 <title>Exercice</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 </head>
6 <body>
7 <h1>Population par département</h1>
8 <table border="1">
9 <tr><th>Numéro</th><th>Nom</th><th>Population</th></tr>
10 <?php
11 // Connexion à la base de données
12 $vHost = 'localhost';
13 $vPort = '5432';
14 $vData = 'test';
15 $vUser = 'test';
16 $vPass = 'test';
17 $vConn = new PDO("pgsql:host=$vHost;port=$vPort;dbname=$vData", $vUser, $vPass);
18 // Affichage du tableau de données
19 $vSql ='______________________________________________________________';
20 $vSt = $vConn->prepare($vSql);
21 $vSt->execute();
22 while ($vResult = $vSt->fetch(PDO::FETCH_ASSOC)) {
23 echo '<tr>';
24 echo "<td>$vResult[__________]</td>";
25 echo "<td>$vResult[__________]</td>";

14 Stéphane Crozat
Exercice

26 echo "<td>$vResult[__________]</td>";
27 echo '</tr>';
28 }
29 ?>
30 </table>
31 <ul>
32 <?php
33 $vSql ='______________________________________________________________';
34 $vSt = $vConn->prepare($vSql);
35 $vSt->execute();
36 $vResult = $vSt->fetch(PDO::FETCH_ASSOC);
37 echo "<li>Département le plus peuplé : <b>$vResult[__________]</b></li>";
38
39 $vSql ='______________________________________________________________';
40 $vSt = $vConn->prepare($vSql);
41 $vSt->execute();
42 $vResult = $vSt->fetch(PDO::FETCH_ASSOC);
43 echo "<li>Département le moins peuplé : <b>$vResult[__________]</b></li>";
44 ?>
45 </ul>
46 </body>
47 </html>

Indice :
Méthode générale d'accès à une BD en écriture par un langage de programmation (cf. p.20)

Stéphane Crozat 15
Complément III

1. Exercice : Tester un environnement LAPP sur son ordinateur


personnel
Pré-requis
La réalisation de cet exercice nécessite un ordinateur sous Linux avec un accès root et un serveur
PostgreSQL installé. Les commandes sont spécifiées pour une distribution Ubuntu.

Rappels Linux
Utiliser Linux (cf. p.25)
Commandes de bases sous Linux : cd, ls, mkdir, rm, find, cat, nano... (cf. p.26)

Rappels Postgres
Présentation de PostgreSQL (cf. p.28)
Installation de PostgreSQL (cf. p.29)
Le client textuel "psql" (cf. p.30)
PostgreSQL sous Linux (cf. p.23)

Serveur web
L'objectif de cette partie est d'avoir un serveur web capable de distribuer des pages HTML.
Installez le serveur web Apache.
1 sudo apt-get install apache2

Tester l'accès au serveur Web en entrant l'adresse web dans un navigateur : http://localhost

Question 1
L'installation par défaut du serveur web permet de servir les fichiers situés dans le dossier
/var/www/html.
Déposez un fichier HTML de votre choix dans ce dossier et accédez-y via votre navigateur Web.
Indice :
Un exemple de fichier XHTML (cf. p.31)
Indice :
Si votre fichier s'appelle example.html et qu'il se trouve à la racine du serveur web
/var/www/html vous y accéderez par l'adresse http://localhost/example.html.

PHP
L'objectif de cette partie est d'avoir un interpréteur PHP en mode développement, c'est à dire qui affiche
les erreurs quand il y en a.
Installez l'interpréteur PHP pour Apache.
1 sudo apt-get install php

16 Stéphane Crozat
Complément

Précisions concernant l'installation : Installer Apache (cf. p.32).

Question 2
Créez le fichier example.php ci-après et déposez-le sur votre serveur web. Faites un test d'accès.
1 <?php
2 echo "Hello world";
3 ?>

Question 3
Créez et testez le fichier test.php ci-après. Ce fichier permet de visualiser la configuration PHP du
serveur.
1 <?php
2 phpinfo();
3 ?>

Question 4
Par défaut l'installation d'un interpréteur PHP est en mode production et il n'affiche pas les erreurs. Il faut
donc changer la configuration pour passer en mode développement.
1. À l'aide du fichier test.php précédent trouvez l'endroit où est stocké sur votre ordinateur le
fichier de configuration php.ini.
Par exemple : /etc/php/7.0/apache2/php.ini
2. Éditez ce fichier en tant que root: sudo nano php.ini
3. Remplacez le paramètre display_errors = Off par display_errors = On
4. Relancez le serveur web : sudo service apache2 reload

Question 5
Il est également nécessaire d'installer un complément à PHP pour qu'il se connecte à PostgreSQL.
1 sudo apt-get install php-pgsql
2 sudo service apache2 reload

PostgreSQL
L'objectif de cette partie est d'avoir une base PostgreSQL prête à être utilisée par un programme PHP.

Question 6
Connectez vous en tant qu'utilisateur postgres (su postgres).
Créez un utilisateur test et une base test. Connectez-vous à la base.
1 psql -c "CREATE USER test WITH ENCRYPTED PASSWORD 'test'";
2 psql -c "CREATE DATABASE test WITH OWNER test";
3 psql --host=localhost --dbname=test --username=test

Créez une table medicament et instanciez-la.


1 CREATE TABLE medicament (
2 nom varchar,
3 description varchar,
4 conditionnement integer,
5 PRIMARY KEY (nom)
6 );
7
8 INSERT INTO medicament (nom,description,conditionnement)
9 VALUES ('Chourix','Médicament contre la chute des choux',13);
10
11 INSERT INTO medicament (nom,description,conditionnement)
12 VALUES ('Tropas','Médicament contre les dysfonctionnements intellectuels',42);

Stéphane Crozat 17
Complément

L'objectif de cette partie est d'exécuter un programme PHP capable de lire le contenu de la table
medicament de notre base de données test.

Question 7
Créez le fichier select.php suivant (avec l'éditeur gedit par exemple) et déposez-le sur votre serveur
web. Accédez-y avec un client web pour exécuter le programme.
1 <?php
2
3 /** Connexion **/
4 $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test', 'test');
5
6 /** Préparation et exécution de la requête **/
7 $sql = 'SELECT nom FROM medicament';
8 $resultset = $connexion->prepare($sql);
9 $resultset->execute();
10
11 /** Traitement du résultat **/
12 while ($row = $resultset->fetch(PDO::FETCH_ASSOC)) {
13 echo $row['nom'];
14 echo ' ';
15 }
16
17 /** Déconnexion **/
18 $connexion=null;
19
20 ?>

L'objectif de cette partie est d'exécuter un programme PHP capable de modifier le contenu de la table
medicament de notre base de données test.

Question 8
Créez le fichier insert.php et testez-le (exécutez-le au moins deux fois).
1 <?php
2
3 /** Connexion **/
4 $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test', 'test');
5
6 /** Préparation et exécution de la requête **/
7 $sql = 'INSERT INTO medicament (nom) VALUES (\'Nouveau\')';
8 $result = $connexion->prepare($sql);
9 $result->execute();
10
11 /** Traitement du résultat **/
12 if ($result) {
13 echo 'Nouveau inséré';
14 }
15 else {
16 echo 'Erreur lors de l\'insertion';
17 }
18
19 /** Déconnexion **/
20 $connexion=null;
21
22 ?>

Question 9
Vérifiez que l'insertion a fonctionné en appelant select.php.

18 Stéphane Crozat
Contenus annexes

1. Architecture générale d'une application de base de données

Définition

Une application de base de données comporte :


1. Une base de données : Elle pose le modèle de données, stocke les données, définit des vues sur
les données (préparation des modalités de lecture)
2. Une application : Elle définit les interfaces homme-machine pour écrire et lire les données et
contient le programme informatique de traitement des données avant insertion dans la base ou
présentation à l'utilisateur.

Fondamental

Architecture générale d'une application de base de données

Procédure générale de développement Méthode

1. Développement de la BD∗ : Conception en UML∗ ou EA∗, puis traduction en R∗ (ou NoSQL∗),


puis implémentation SQL∗
Créer les tables
Ajouter des vues et triggers (lorsque le SGBD le permet, comme Oracle ou PostgreSQL)
pour implémenter les contraintes complexes non exprimables en SQL
Ajouter les vues utiles pour simplifier l'accès aux données en lecture

Stéphane Crozat 19
Contenus annexes

Implémenter des fonctions stockées (lorsque le SGBD le permet) permettant de renvoyer


les valeurs calculées prévues par le modèle conceptuel
2. Développement de l'application : traitements, formulaires et états
Les traitements sont réalisés dans le langage applicatif choisi (PHP, Python, Java, C++...)
Les IHM∗ sont parfois réalisées avec le même langage, mais de plus en plus souvent, on
privilégie des IHM Web (HTML, CSS, JavaScript)

Exemple de technologies Exemple

BD :
SQL pour les tables et les vues
PL/SQL (Oracle), PL/pgSQL (PostgreSQL) pour les triggers et les fonctions stockées
Formulaires
PHP, HTML (balise <form>), HTTP/POST (Web)
Formulaires Access
Input Python
États
PHP , HTML (<table>), HTTP/GET (Web)
États Access
Print Python
Contrôle :
Python, PHP, JavaScript, Java, C++, Macros & VBA (Access)

2. Méthode générale d'accès à une BD en écriture par un langage de programmation

Méthode

1. Connexion à la base de données et récupération d'un identifiant de connexion


2. Écriture de la requête d'insertion ou de mise à jour de données
3. Exécution de la requête sur la connexion ouverte (et éventuelle récupération d'un résultat
d'exécution, par exemple : le nombre de lignes modifiés, ou un booléen selon que la requête
s'est exécutée ou non avec succès)
4. Test du résultat et dialogue avec l'utilisateur an cas d'erreur ou de résultat incorrect
5. Clôture de la connexion

Pseudo-code Méthode

1 // Connexion à la base de données


2 host = "foo.fr"
3 port = "6666"
4 data = "myDatabase"
5 user = "me"
6 pass = "secret"
7 conn = CONNECT(host, port, data, user, pass)

20 Stéphane Crozat
Contenus annexes

1 // Connexion à la base de données


2 host = "foo.fr"
3 port = "6666"
4 data = "myDatabase"
5 user = "me"
6 pass = "secret"
7 conn = CONNECT(host, port, data, user, pass)
1 // Écriture de la requête
2 sql= "INSERT INTO t (a) VALUES (1) ;"
1 // Exécution de la requête
2 result = QUERY(conn, sql)
1 // Test du résultat
2 IF (NOT result) THEN MESSAGE("Échec de l'exécution")
1 // Clôture de la connexion
2 CLOSE (conn)

3. Méthode générale d'accès à une BD en lecture par un langage de programmation

Pointeur sur un résultat de requête Définition

Lorsqu'un programme exécute une requête dans une BD, il récupère un pointeur sur un résultat de
requête permettant de parcourir le tableau résultant de l'exécution de la requête ligne par ligne.
En effet :
Une requête SQL retourne toujours un tableau (même si parfois il n'a qu'une ligne et une
colonne), c'est le fondement du modèle relationnel
En général il n'est pas souhaitable que ce tableau soit transmis directement sous la forme d'une
structure en mémoire (array), car le résultat d'une requête peut être très volumineux (et ne
pas tenir en mémoire primaire)
La solution générale est donc que la BD fournisse le résultat ligne par ligne
Le pointeur permet de :
Retourner la ligne pointée sous la forme d'un vecteur (tableau à une seule ligne)
Passer à la ligne suivante
Savoir si l'on a atteint la fin du tableau (ligne N)

Pointeur sur un résultat de requête

Stéphane Crozat 21
Contenus annexes

Méthode

1. Connexion à la base de données et récupération d'un identifiant de connexion


2. Écriture de la requête de sélection
3. Exécution de la requête sur la connexion ouverte et récupération d'un pointeur sur un résultat
de requête
4. Parcours du pointeur dans une boucle permettant de rapporter et traiter (afficher par exemple)
le tableau ligne par ligne
5. Clôture de la connexion

Pseudo-code Méthode

1 // Connexion à la base de données


2 host = "foo.fr"
3 port = "6666"
4 data = "myDatabase"
5 user = "me"
6 pass = "secret"
7 conn = CONNECT(host, port, data, user, pass)
1 // Écriture de la requête
2 sql = "SELECT a, b FROM t;"
1 // Exécution de la requête
2 pointeur = QUERY (conn, sql)
1 // Traitement du résultat
2 WHILE (pointeur)
3 FETCH pointeur IN result
4 PRINT result[1]
5 PRINT result[2]
6 NEXT pointeur
7 END WHILE
1 // Clôture de la connexion
2 CLOSE (conn)

4. Importer un fichier CSV sous PostgreSQL

Syntaxe

1 \copy nom_table (att1, att2, ...) FROM 'fichier.csv' WITH CSV DELIMITER ';' QUOTE
'"'
WITH introduit les options de l'import
CSV indique qu'il s'agit d'un fichier CSV
DELIMITER 'c' indique que le caractère c est utilisé comme délimiteur de champ (en général
; ou ,)
QUOTE 'c' indique que le caractère c est utilisé comme délimiteur de chaîne (en général ")

Remarque

La table nom_table doit déjà exister


Le nombre de colonnes spécifié doit correspondre au nombre de colonnes du fichier CSV
Les types doivent être compatibles

22 Stéphane Crozat
Contenus annexes

Remarque

Ajouter l'option HEADER après WITH CSV si le fichier CSV contient une ligne s'entête.
1 \copy nom_table (att1, att2, ...) FROM 'fichier.csv' WITH CSV HEADER DELIMITER ';'
QUOTE '"'

Localisation du fichier CSV depuis psql Méthode

Par défaut, la commande \copy prendra le chemin du répertoire courant au moment où la


commande psql a été lancée.
Sous psql, vous pouvez utiliser les commandes :
dbnf17p007=> \! pwd
Pour exécuter la commande shell pwd et obtenir le répertoire courant
dbnf17p007=> \cd directory
Pour changer le répertoire courant

Complément

PostgreSQL sous Linux (cf. p.23)


Fichier CSV (cf. p.23)

5. PostgreSQL sous Linux

Exécuter une instruction PostgreSQL depuis Linux Syntaxe

1 psql -c "instruction psql"


1 psql -h localhost -U user -d db -c "instruction psql"

Exécuter un script PostgreSQL depuis Linux Exemple

1 #!/bin/sh
2 psql -c "DROP DATABASE mydb"
3 psql -c "CREATE DATABASE mydb"
4 psql -c "GRANT ALL PRIVILEGES ON DATABASE mydb TO user1"

psql : exécuter une commande Linux (Linux sous Postgres) Complément

\! : permet d'exécuter certaines commandes du shell Linux depuis le client psql.

6. Fichier CSV

Fichier CSV Définition

CSV∗ est un format informatique permettant de stocker des données tabulaires dans un fichier texte.
Chaque ligne du fichier correspond à une ligne du tableau. Les valeurs de chaque colonne du tableau
sont séparées par un caractère de séparation, en général une virgule ou un point-virgule. Chaque
ligne est terminée par un caractère de fin de ligne (line break).

Stéphane Crozat 23
Contenus annexes

Toutes les lignes contiennent obligatoirement le même nombre de valeurs (donc le même nombre de
caractères de séparation). Les valeurs vides doivent être exprimées par deux caractères de séparation
contigus.
La taille du tableau est le nombre de lignes multiplié par le nombre de valeurs dans une ligne.
La première ligne du fichier peut être utilisée pour exprimer le nom des colonnes.

Syntaxe

1 [NomColonne1;NomColonne2;...;NomColonneN]
2 ValeurColonne1;ValeurColonne2;...;ValeurColonneN
3 ValeurColonne1;ValeurColonne2;...;ValeurColonneN
4 ...

Fichier CSV sans entête Exemple

1 Pierre;Dupont;20;UTC;NF17
2 Pierre;Dupont;20;UTC;NF26
3 Paul;Durand;21;UTC;NF17
4 Jacques;Dumoulin;21;UTC;NF29

Fichier CSV avec entête Exemple

1 Prenom;Nom;Age;Ecole;UV
2 Pierre;Dupont;20;UTC;NF17
3 Pierre;Dupont;20;UTC;NF26
4 Paul;Durand;21;UTC;NF17
5 Jacques;Dumoulin;21;UTC;NF29

Valeur nulle Exemple

1 Jacques;Dumoulin;;UTC;NF29

L'âge est inconnu (NULL).

Variations... Attention

La syntaxe des fichiers CSV n'est pas complètement standardisée, aussi des variations peuvent exister :
Les chaînes de caractères peuvent être protégées par des guillemets (les guillemets s'expriment
alors avec un double guillemet).
Le caractère de séparation des nombres décimaux peut être le point ou la virgule (si c'est la
virgule, le caractère de séparation doit être différent)
...
Un des problème les plus importants reste l'encodage des caractères qui n'est pas spécifié dans le
fichier et peut donc être source de problèmes, lors de changement d'OS∗ typiquement.

24 Stéphane Crozat
Contenus annexes

Usage en base de données Méthode

Les fichiers CSV sont très utilisés en BD∗ pour échanger les données d'une table (export/import).
Les SGBD∗ contiennent généralement des utilitaires permettant d'exporter une table ou un résultat de
requête sous la forme d'un fichier CSV, en spécifiant un certain nombre de paramètres (caractère de
séparation de valeur, caractère de fin de ligne, présence ou non d'une ligne de définition des noms des
colonnes, etc.). De même ils proposent des utilitaires permettant d'importer un fichier CSV dans une
table (en spécifiant les mêmes paramètres), voire de créer directement une table à partir du fichier CSV
(quand les noms des colonnes sont présents).

Fichiers à largeur de colonne fixe Complément

Les fichiers à largeur de colonne fixe n'utilisent pas de séparateur de colonne, mais imposent le même
nombre de caractères pour chaque cellule. L'avantage est de ne pas avoir à spécifier le caractère de
séparation, l'inconvénient est la taille de fichier supérieure si les valeurs ne font pas toutes la même
largeur.

XML Complément

Les fichiers XML∗ tendent de plus en plus à remplacer les fichiers CSV car ils permettent d'être
beaucoup plus expressifs sur le schéma d'origine. Ils sont également plus standards (encodage
spécifié, principe de séparation des données par les tags, etc.). Leur seul inconvénient est d'être plus
verbeux et donc plus volumineux.

Tables externes Complément

Certains SGBD, comme Oracle, permettent de créer des tables dites externes, qui autorisent de créer
un schéma de table directement sur un fichier CSV, permettant ainsi un accès SQL standard à un
fichier CSV, sans nécessité de l'importer d'abord dans une table.

7. Utiliser Linux
Pour utiliser Linux, il y a plusieurs possibilité :
Avoir accès à un PC sur lequel Linux est déjà installé (il suffit de disposer d'un compte utilisateur
sur cet ordinateur).
Installer Linux sur son ordinateur :
En téléchargeant en installant une distribution (il faut savoir préalablement graver un DVD
ou créer une clé USB bootable) ;
En commandant un DVD ou une clé USB (coût de quelques euros) ;
En participant à une install party (organisées par des associations, elles permettent de se
faire aider dans le processus d'installation et la prise en main initiale de l'environnement).
Installer Linux sur son ordinateur en double-boot (à coté de son OS initial, on choisit au
démarrage quel système on utilise).
Installer Linux sur son ordinateur dans une machine virtuelle (par exemple : on peut utiliser
Linux dans un fenêtre Windows).
Installer Linux sur une clé en version live USB persistant.

Stéphane Crozat 25
Contenus annexes

Installer Xubuntu sur son PC Exemple

http://xubuntu.fr/

Installer Ubuntu dans une machine virtuelle sous VirtualBox sous Windows Exemple

https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/installez-linux-dans-une-
machine-virtuelle

8. Commandes de bases sous Linux : cd, ls, mkdir, rm, find, cat, nano...
Le manuel !
La commande man permet d'afficher le manuel d'une autre commande.
Par exemple man ls permet d'afficher les option de la commande ls, et man man est l'affichage du
manuel du manuel.

Organisation des fichiers


Les fichiers sont organisés sous Linux dans des dossiers (ou répertoires) arborescents (il n'y a pas de
notion de disques).
Le premier de ces dossiers, appelé racine, est /.
Des fils courants de racines sont :
/bin qui contient des programmes du systèmes ;
/home qui contient les données des utilisateurs ;
/tmp qui contient des données volatiles accessibles à tous.

Gestion de fichiers
pwd savoir où je me situe dans l'arborescence
cd aller quelque part dans l'arborescence
cd /home aller dans /home (déplacement absolu)
cd me aller dans le répertoire me fils de mon répertoire courant (déplacement relatif)
cd .. remonter dans l'arborescence (déplacement vers son père)
cd ~ permet de retourner dans son dossier initial (retour au domicile)
ls voir les fichiers et dossiers dans mon dossier actuel (sauf les fichiers cachés commençant par
un .)
ls -al voir tous les fichiers et dossiers dans mon dossier actuel avec leurs informations
associées (vue détaillée)
touch file créer un fichier file
rm file supprimer le fichier file dans mon dossier actuel
mkdir dir créer un nouveau dossier dir dans mon dossier actuel
rm * supprimer tous les fichiers de mon dossier actuel
rm -R dir supprimer le dossier dir dans mon dossier actuel
cat file afficher le contenu du fichier file
more afficher le contenu du fichier file en mode paginé
less afficher le contenu du fichier file en mode défilement

26 Stéphane Crozat
Contenus annexes

Édition de fichiers
nano file
Éditeur dans le terminal (simple d'utilisation)
Les commandes sont indiqués en bas de l'éditeur
gedit file &
Éditeur graphique
Utiliser une extension de fichier standard ou le menu Affichage > Mode de
coloration pour obtenir une visualisation adapté au type de fichier édité (par exemple
.sql pour un fichier SQL)

Rechercher un fichier
find / -name '*test*' permet de rechercher un fichier contenant la chaîne test sur tout
le disque
find ~ -name '*test*' permet de rechercher un fichier contenant la chaîne test dans
son espace personnel

Complément

Agir en tant que root (su / sudo) (cf. p.27)


Installer des applications sous Linux (cf. p.28)

9. Agir en tant que root (su / sudo)


Un système Linux est généralement utilisé par plusieurs utilisateurs (ou user) identifiés par un compte.
Tous les système ont en commun le premier de ces utilisateurs : root, l'administrateur du système qui
possède tous les droits.

su Syntaxe

Pour se connecter en tant qu'utilisateur root (et pouvoir faire les opérations qui lui sont réservées) : su
root.
Le mot de passe de utilisateur root est demandé par le système.

sudo Syntaxe

Pour exécuter une commande en tant que root sans changer d'user : sudo commande.
Le mot de passe de utilisateur lançant sudo est demandé par le système.
Seuls certains utilisateurs appelés sudoers ont le droit d'exécuter la commande sudo.
Pour ajouter un utilisateur dans la liste des sudoers, excéuté en tant que root (ou via un autre
utilisateur sudoers) :
adduser user sudo (en tant que root)
sudo adduser user sudo (avec un utilisateur déjà membre des sudoers)

Debian (sudo) Attention

Sous Debian la commande sudo n'est pas installée par défaut.

Stéphane Crozat 27
Contenus annexes

Ubuntu (su) Attention

Sous Ubuntu l'utilisateur root n'est pas actif et il n'est donc pas possible d'exécuter la commande su
root. On peut en revanche utiliser sudo, l'utilisateur créé à l'installation est membre des sudoers.
Pour activer le compte root, il faut lui attribuer un mot de passe avec la commande : sudo passwd
root.

Agir en tant qu'un autre utilisateur Complément

Pour agir en tant qu'utilisateur user, exécuter :


su user, ou su - user pour adopter l'environnement de user.

10. Installation d'applications sous Debian et Ubuntu (apt-get)


Pour installer une application exécuter la commande suivante en tant que root ou via sudo :
sudo apt-get install applications

Installer virtualbox, l p, cups-pdf, pd k, dia, gimp et git Exemple

1 sudo apt-get install virtualbox lftp cups-pdf pdftk dia gimp git

Maintenir le système à jour Complément

Pour mettre le système à jour, exécuter les deux commandes suivantes en tant que root ou via sudo :
1. sudo apt-get update
2. sudo apt-get upgrade

11. Présentation de PostgreSQL


PostgreSQL est :
un SGBDR
libre (licence BSD)
multi-plate-formes (Unix, Linux, Windows, MacOS, ...)
puissant
très respectueux du standard
très bien documenté

Documentation de PostgreSQL Fondamental

www.postgresql.org/docs1
en français : docs.postgresqlfr.org2

1
https://www.postgresql.org/docs/current
2
https://docs.postgresqlfr.org/current/

28 Stéphane Crozat
Contenus annexes

Fonctionnement général
PostgreSQL comme la grande majorité des SGBD est un logiciel client∗-serveur∗. Il faut donc pour
l'utiliser un serveur (programme postgresql sous Linux) et un client.
Il existe plusieurs clients, les deux plus utilisés sont le client textuel psql et le client graphique PgAdmin
III.

Complément

www.postgresql.org1
www.postgresql.fr2

12. Installation de PostgreSQL

Attention

Nous présentons ici une installation a minima de PostgreSQL uniquement à des fins de test et
d'apprentissage, et pour un usage local. Pour mettre en production une base de données PostgreSQL
sur le réseau, il faut suivre des directives supplémentaires, notamment pour assurer la sécurité du
système, sa sauvegarde...
Ces thèmes ne sont pas abordés dans le cadre de ce cours.

PostgreSQL est à l'origine une base de données conçue pour Unix, son installation et son
fonctionnement sont possibles aujourd'hui sur plusieurs OS, mais Linux reste son environnement de
prédilection. C'est l'architecture PostgreSQL sur Linux qui est étudiée ici.

Fondamental

https://www.postgresql.org/download/

Installation sous Debian ou Ubuntu à partir des paquets de la distribution Exemple

apt install postgresql


Ce méta-package permet d'installer le serveur postgresql et le client psql (ainsi que le client
graphique pgAdmin).
Il lance le service postgresql (que l'on peut voir en tant que process avec ps aux | grep
postgres et en tant que service avec systemctl status postgresql.service).
Il crée un utilisateur Linux postgres (que l'on peut voir dans /etc/passwd).
Il crée également une base de données par défaut nommée postgres et un utilisateur par défaut
pour le SGBD nommé postgres.

Tester son installation Méthode

1 sudo su postgres
2 psql

1
http://www.postgresql.org/
2
http://www.postgresql.fr/

Stéphane Crozat 29
Contenus annexes

sudo su postgres permet de devenir l'utilisateur Linux postgres qui a été créé par
l'installation
psql permet d'établir la connexion par défaut entre le client psql et le serveur postgresql en
utilisant l'utilisateur Linux et une base de données du même nom, donc ici postgres.
Le client connecté affiche son numéro de version, propose de taper help et une invite de
commande postgres=#.
\l permet d'afficher la liste des base de données existantes (on retrouve la base postgres à
laquelle on est connecté).
\q permet de quitter.

Complément

https://doc.ubuntu-fr.org/postgresql

Installer PostgreSQL sous Windows Complément

1. Télécharger un installer depuis https://www.postgresql.org/download/windows1


2. Exécuter l'installation en validant les propositions par défaut (et sans installer les éventuels
programmes complémentaires proposés à l'issue de l'installation)
3. Exécuter le client psql (également appelé Shell SQL)

SHOW ALL Complément

La commande show all permet de voir tous les paramètres du serveur PostgreSQL.
Par exemple data_directory permet de connaître le répertoire de stockage utilisé sur le disque
dur.

13. Le client textuel "psql"

psql Définition

psql est le client textuel de PostgreSQL.

Connexion Méthode

1 psql -h tuxa.sme.utc -U nf17a001 -d dbnf17a001

Cette commande psql essaye de se connecter sur la machine tuxa.sme.utc avec un utilisateur
PostgreSQL nommé nf17a001 à la base de données dbnf17a001.
Un serveur PostgreSQL doit tourner sur la machine distante tuxa.sme.utc (sur le port standard
5432).
Un utilisateur nf17a001 doit exister sur PostgreSQL et avoir un mot de passe défini.
Une base de données dbnf17a001 doit exister sur PostgreSQL et l'utilisateur nf17a001 doit avoir
le droit d'y accéder.
Le mot de passe de l'utilisateur nf17a001 sera demandé.

1
https://www.postgresql.org/download/windows/

30 Stéphane Crozat
Contenus annexes

Écrire une instruction SQL Syntaxe

1 dbnf17p015=> SELECT * FROM matable ;

Écrire une instruction SQL sur plusieurs lignes Syntaxe

Une instruction SQL peut s'écrire sur une ou plusieurs lignes, le retour chariot n'a pas
d'incidence sur la requête, c'est le ; qui marque la fin de l'instruction SQL et provoque son exécution.
1 dbnf17p015=> SELECT *
2 dbnf17p015-> FROM matable
3 dbnf17p015-> ;

On notera dans psql la différence entre les caractères => et -> selon que l'on a ou pas effectué un
retour chariot.

Commandes de base : aide Fondamental

\? : Liste des commandes psql


\h : Liste des instructions SQL
\h CREATE TABLE : Description de l'instruction SQL CREATE TABLE

Commandes de base : catalogue Fondamental

\d : Liste des relations (catalogue de données)


\d maTable : Description de la relation maTable

Commandes de base : quitter Fondamental

\q : Quitter psql

Complément

http://www.postgresql.org/docs/current/static/app-psql.html

14. Un exemple de fichier XHTML

Corps Exemple

1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title>Exemple de fichier XHTML</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5 </head>
6 <body>
7 <p>Hello world !</p>
8 </body>
9 </html>

Stéphane Crozat 31
Contenus annexes

15. Installer Apache

Rappel

Notions de serveur et de client web (cf. p.11)

Installer Apache sous Debian ou Ubuntu Méthode

1 apt-get install apache2

Tester l'accès au serveur Web en entrant l'adresse web dans un navigateur : http://localhost
L'installation par défaut du serveur web permet de servir les fichiers situés dans le dossier
/var/www/html.

Complément

http://httpd.apache.org/docs
http://httpd.apache.org/docs/current/getting-started.html

Nginx Complément

Nginx est un autre serveur web libre comparable à Apache.


https://school.picaso .net/modules/web01

32 Stéphane Crozat
Glossaire

Client
Un client est un programme informatique qui a pour fonction d'envoyer des requêtes à un autre
programme informatique, appelé serveur, d'attendre le résultat de cette requête et de traiter le
résultat de la requête. Notons qu'un programme peut-être client vis à vis d'un programme et
serveur vis à vis d'un autre. On ne prend pas ici le terme client dans son acception matérielle, qui
signifie alors un ordinateur qui a pour fonction d'héberger des programmes clients.
NoSQL
NoSQL désigne une famille de systèmes de gestion de base de données (SGBD) qui s'écarte du
paradigme classique des bases relationnelles. (Wikipédia)
RAID
La technologie RAID permet de repartir de l'information à stocker sur plusieurs "petits" disques, au
lieu de la concentrer sur un seul "gros" disque. Cette technologie permet donc d'améliorer les
performances (les accès disques pouvant être parallélisés) et d'améliorer la sûreté (en repartissant
les risques de crash et en jouant sur une redondance des données). Il existe plusieurs types
d'architecture RAID, privilégiant ou combinant la parallélisation et la redondance.
Serveur
Un serveur est un programme informatique qui a pour fonction de recevoir des requêtes d'un autre
programme, appelé client, de traiter ces requêtes et de renvoyer en retour une réponse. Notons
qu'un programme peut-être serveur vis à vis d'un programme et client vis à vis d'un autre. On ne
prend pas ici le terme serveur dans son acception matérielle, qui signifie alors un ordinateur qui a
pour fonction d'héberger des programmes serveurs.

Stéphane Crozat 33
Abréviations

BD : Base de Données
CSV : Comma Separated Values
E-A : Entité-Association
IHM : Interaction Homme Machine ou Interface Homme Machine
OS : Operating Système (Système d'Exploitation)
R : Relationnel
SGBD : Système de Gestion de Bases de Données
SQL : Structured Query Language
UML : Unified Modeling Language
XML : eXtensible Markup Language

34 Stéphane Crozat
Index

3-tier....................................... 9, 12
Architecture.................. 8, 9, 11, 12
Client.................................. 8, 9, 12
HTTP ..........................................11
Serveur......................... 8, 9, 11, 12
Web ...................................... 11, 12

Stéphane Crozat 35

Vous aimerez peut-être aussi