Vous êtes sur la page 1sur 99

Conception et Création de Bases de Données

SVA8511A (Licence Biologie 3e année)

T. Lecroq

LITIS EA 4108
Batiment Extension Biologie - 1er étage
Thierry.Lecroq@univ-rouen.fr
Cours rédigé par L. Mouchard

Année 2008–2009

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 1 / 99


Contenu du cours
1 Organisation de l’UE
2 Concepts génériques
Base de données
Est-ce si simple ?
Principe client-serveur
3 Langage SQL
Pourquoi ?
LES langages
Schémas
4 Première base de données
Conception
Insertion dans une table
Affichage

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 2 / 99


Plan
1 Organisation de l’UE
2 Concepts génériques
Base de données
Est-ce si simple ?
Principe client-serveur
3 Langage SQL
Pourquoi ?
LES langages
Schémas
4 Première base de données
Conception
Insertion dans une table
Affichage

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 3 / 99


Organisation de l’Unité d’Enseignement

Cours
I concepts génériques des bases de données ;
I bases du langage structuré de requêtes SQL ;
Travaux dirigés (apprentissage du langage SQL)
I descriptif approfondi des fonctions SQL ;
I exercices de conception de bases de données ;
I normalisation des relations et construction des tables ;
I construction des requêtes SQL.
Travaux pratiques (pratique du langage SQL)
I mise en pratique des TD sous MySQL ;
I requêtes et vérifications sous phpMyAdmin ;
I réalisation pratique d’une base de données (( grandeur nature )).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 4 / 99


Plan
1 Organisation de l’UE
2 Concepts génériques
Base de données
Est-ce si simple ?
Principe client-serveur
3 Langage SQL
Pourquoi ?
LES langages
Schémas
4 Première base de données
Conception
Insertion dans une table
Affichage

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 5 / 99


Qu’est-ce qu’une base de données (relationnelle) ?
c’est généralement un ensemble de données :
I de taille importante ;
I organisé (on dit également structuré) ;
I interrogeable grâce à un langage de requêtes ;
elle constitue une représentation du monde réel, qui, dans sa version
relationnelle, manipule des entités, par exemple :
I étudiant ;
I enseignant ;
I cours.
et des associations entre ces entités, par exemple :
I suivre : un étudiant suit un cours ;
I donner : un enseignant donne un cours ;
I noter : un enseignant note un étudiant.
etudiant note enseignant légende : entité
suit donne association
cours

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 6 / 99


Qu’est-ce qu’un SGBD ?
Un SGBD (Système de Gestion de Bases de Données) est un ensemble
logiciel (un ensemble de programmes) qui permet :
I le stockage des informations ;
I la gestion des entités et des mécanismes souples pour représenter les
associations (dans le modèle relationnel) ;
I l’affichage de tout ou partie de la base de données.
Quelques exemples de SGBD : Access, DBase, Ingres, Informix, mSQL,
MySQL, Oracle, O2 , PostgresQL, Sybase, ...
Le modèle relationnel n’est pas le seul possible : nous pouvons considérer
les éléments de la base comme des objets, de définir les méthodes propres
à leur utilisation et aux interactions entre les objets (équivalentes aux
associations dans le modèle que nous avons ébauché). C’est le cas par
exemple de la base O2 (qui est Orientée-Objet).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 7 / 99


Est-ce si simple ?

Nous venons de décrire rapidement ce que pourrait être une base de


données :
I quelques entités (étudiants, enseignants, cours) ;
I quelques associations (suivre, donner, noter) entre les entités ;
mais suffit-il de mettre des noms en face des entités pour que le tour
soit joué ?
l’entité cours n’est sans doute pas satisfaisante : cours, TD ou TP ;
l’association noter n’est pas satisfaisante : un enseignant ne note pas
un étudiant mais note : un contrôle continu, un compte-rendu de TP
ou un examen final.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 8 / 99


Pourquoi utiliser une base de données ?

Parce que :
les données sont séparées (chaque entité est représentée par une table
indépendante des autres données) et donc réutilisables ;
les données sont spécifiées : les (( attributs )) d’une entité sont connus
et contraints ;
les données sont sécurisées : les transactions concurrentes sur les
données sont efficacement gérées ;
les mécanismes d’importation/exportation des données existent et
permettent d’alimenter efficacement les tables ;
les mécanismes génériques d’interrogation des données sont déjà
développés, le temps de développement d’une application est par
conséquent réduit ;
possibilités d’interfaçage www...

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 9 / 99


Modèle client-serveur
serveur





























client








1. émission 2. réception


















requête requête requête

















































internet 3. traitement





5. réception 4. émission





réponse réponse réponse









































client : Le client peut interroger le serveur en utilisant :
I un langage de requêtes structuré (compatible avec la norme ANSI SQL)
I un langage de programmation classique doublé d’un connecteur
spécifique (DBC : DataBase Connectivity) : ODBC pour le langage C,
JDBC pour Java et équivalents pour les langages C++, Delphi, Perl,
Python, TCL, ...
Le client peut être installé sur tout type de système d’exploitation
(Windows, Mac OS, Linux, OS/2, ...), il interagit le plus souvent avec
le serveur au travers d’un mécanisme réseau.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 10 / 99


Modèle client-serveur

serveur : c’est le (( cœur )) du SGBD, il :


I attend les sollications des clients, éventuellement nombreux, et
provenant de divers systèmes d’exploitation ;
I effectue les recherches correspondantes dans la base ;
I retourne la réponse correspondante au client dans un format
indépendant du système d’exploitation.
il est assez facile d’étendre ce modèle pour que plusieurs serveurs se
répartissent la charge et répondent de façon efficace aux sollicitations
des multiples clients (comme les moteurs de recherche par exemple).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 11 / 99


Plan
1 Organisation de l’UE
2 Concepts génériques
Base de données
Est-ce si simple ?
Principe client-serveur
3 Langage SQL
Pourquoi ?
LES langages
Schémas
4 Première base de données
Conception
Insertion dans une table
Affichage

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 12 / 99


Le langage de requêtes SQL (Structured Query
Language) : le pourquoi d’un tel langage

si l’on souhaite que le client et le serveur se comprennent, quelque


soit le système d’exploitation des machines sur lesquels ils sont
installés, il faut que le langage qui leur serve à s’échanger requêtes et
réponses aux requêtes soit normalisé ;
le langage de requêtes doit être indépendant de la structuration
interne des entités ;
les différents systèmes de gestion de bases de données (Oracle,
MySQL, PostgresQL, ...) doivent pouvoir échanger des données
aisément.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 13 / 99


Le langage de requêtes SQL (Structured Query
Language) : le pourquoi d’un tel langage

un langage de requêtes structuré SQL (Structured Query Language)


est un langage conçu pour extraire des informations de la base de
données. Le premier SQL à la fin des années 70 s’appelait Oracle...
c’est à présent une des grandes entreprises informatiques, comme
peuvent l’être Intel (processeurs), Microsoft (environnements
graphiques), Cisco (réseaux Internet) ;
il a été normalisé (ou agréé par le American National Standards
Institute) en 1986, 1992 et 1999 ;
nous utiliserons pour les TD/TP le SGBD MySQL, conforme à la plus
récente des normes préconisées par l’ANSI, qui est décrit dans un
grand nombre d’ouvrages et de sites www.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 14 / 99


Le langage de requêtes SQL (Structured Query
Language) : structuration
Le langage de commandes SQL peut être séparé suivant quatre catégories :
DDL (Data Definition Language) :
langage de manipulation des tables représentant les entités (exemples :
commandes alter, create, drop)
DML (Data Manipulation Language) :
langage de manipulation des données présentées dans les tables (exemples :
delete, insert, load data, update)
DQL (Data Query Language) :
langage de requêtes (d’interrogation) sur les données (exemple : select
avec toutes les clauses)
DCL (Data Control Language) :
langage de contrôle d’accès aux données (exemples : alter password,
grant, revoke, commit, rollback)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 15 / 99


Les schémas
Il est possible de considérer quatre niveaux de ce que nous nommerons des
schémas :
externe 1 externe 2 externe 3 différentes vues

conceptuel entités/relations

interne index/optimisation

physique fichiers/répertoires

UN schéma externe est UNE façon dont les données seront


présentées à l’utilisateur, en quelque sorte, le masque de saisie ou de
visualisation, ce que nous appellerons la vue. Il peut y avoir plusieurs
schémas externes pour une même base de données ;
le schéma conceptuel est la façon dont les données sont réparties
dans les tables, en fonction des entités qui ont été définies et des
différents attributs associés à une entité ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 16 / 99


Les schémas
le schéma interne est la façon dont sont organisés les index et tous les
éléments associés indirectement aux données, permettant une
optimisation des ressources de stockage et de meilleurs performance lors
de l’accès aux données ;
le schéma physique correspond au schéma de stockage des tables et
bases en fonction du matériel (disques durs, mémoire, ...) et du système
d’exploitation. Ce schéma ne concerne que l’administrateur.
Ces deux derniers niveaux sont moins faciles d’accès, nous ne parlerons par
la suite que succintement du schéma interne.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 17 / 99


Plan
1 Organisation de l’UE
2 Concepts génériques
Base de données
Est-ce si simple ?
Principe client-serveur
3 Langage SQL
Pourquoi ?
LES langages
Schémas
4 Première base de données
Conception
Insertion dans une table
Affichage

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 18 / 99


Conception d’une première base de données

Nous allons concevoir une petite base de données toute simple. Elle va
contenir les noms, prénoms et filières des étudiants inscrits pour cette
option. Elle consiste en une seule table, que nous nommerons etudiant,
qui contient quatre attributs typés :
le prénom : une chaı̂ne de caractères d’au plus 30 lettres ;
le nom : une chaı̂ne de caractères d’au plus 30 lettres ;
la qualité : au choix ’Melle’,’Mme ou ’M.’ ;
la filière : une chaı̂ne de caractères de 6 caractères ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 19 / 99


Code SQL correspondant à la création de la base de
données base du cours
création de la base de données par une requête SQL
Syntaxe : create database nom base
nom base est constitué de lettres, et chiffres et du caractère souligné , il peut
comporter jusqu’à 30 lettres et doit être unique.
create database base du cours ;
Vous devez créer une base de données par projet que vous développez même
s’il est possible théoriquement de regrouper des tables sans aucun rapport les
unes avec les autres dans une même base.
utilisation de la base nouvellement créée :
use base du cours ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 20 / 99


Code SQL correspondant à la création de la table etudiant
création de la table
Syntaxe : create table nom table(liste de déclarations d’attributs)
les règles de construction de nom table sont identiques à nom base...
create table etudiant(
prenom varchar(30),
nom varchar(30),
qualite enum(’Melle’,’Mme’,’M.’) not null,
filiere varchar(6) default ’SVA331’) ;

etudiant
nom VARCHAR (30)
prenom VARCHAR (30)
qualite ENUM (’Melle’,’Mme’,’M.’)
filiere VARCHAR (6)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 21 / 99


Affichage des informations relatives à la table etudiant

show databases ; va afficher base du cours


show tables ; va afficher etudiant
describe etudiant ; va afficher la structure de la table sous la forme
suivante :

Field Type Null Key Default Extra


prenom varchar(30) YES NULL
nom varchar(30) YES NULL
qualite enum(’Melle’,’Mme’,’M.’) Melle
filiere varchar(6) YES SVA331

Certains champs ici (champs Key et Extra) ne sont pas utilisées pour
l’instant, le reste est compréhensible.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 22 / 99


Les types des attributs

Une déclaration d’attribut est de la forme


nom attribut type d attribut [contraintes]
les types des attributs pouvant être :
des chaı̂nes de caractères : char(longueur), varchar(longueur),
tinytext, text, mediumtext, longtext, ...
des numériques : tinyint, smallint, mediumint, int, bigint,
float, double, real, ...
des dates : timestamp, date, time, datetime, year, ...
ensemblistes : enum(valeurs), set(valeurs)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 23 / 99


Les contraintes sur les attributs

Certaines contraintes peuvent être ajoutées lors de la déclaration des


attributs, elles sont de plusieurs ordres :
contraintes de domaine (valeurs prises par un attribut not null -
pour l’attribut qualite, default pour l’attribut filiere, unique). Ces
contraintes peuvent être implicites, comme pour la valeur par défaut
de l’attribut qualite ;
contraintes d’intégrité d’entité (précise la clé primaire de chaque
table : nous en reparlerons plus tard primary key)
contraintes d’intégrité référentielle (assure de la cohérence entre clés
primaires et clés étrangères correspondantes : nous en reparlerons plus
tard foreign key, references)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 24 / 99


Insertion d’éléments dans une table

Nous avons plusieurs possibilités :


insertion simple totale :
Syntaxe : insert into ident table values(liste complète des valeurs) ;
insert into etudiant values(’Marie’,’Delabio’,’Melle’,’SVA331’) ;
insertion simple partielle :
Syntaxe : insert into ident table(liste attributs) values(liste de valeurs) ;
insert into etudiant(prenom) values(’Pierre’) ;
insertion multiple (totale ou partielle) :
Syntaxe : insert into ident table(liste attributs) values(plusieurs listes de valeurs) ;
insert into etudiant(prenom) values(’Paul’),(’Isabelle’) ;
insertion à partir des données d’un fichier :
Syntaxe : load data infile nom fichier into table ident table ;
load data infile ’fic liste etudiants’ into table etudiant ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 25 / 99


Affichage (simplifié) des éléments d’une table

Pour vérifier que les éléments ont bien été ajoutés à la table, il nous faut
affiche le contenu de cette table :
Syntaxe : select liste attributs from nom table ;
select * from etudiant ; (affichage de tous les attributs)

prenom nom qualite filiere


Marie Delabio Melle SVA331
Pierre null Melle SVA331
Paul null Melle SVA331
Isabelle null Melle SVA331

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 26 / 99


Affichage (simplifié) des éléments d’une table

select prenom from etudiant ; select nom from etudiant ;


prenom nom
Marie Delabio
Pierre null
Paul null
Isabelle null
select prenom as ’Prénom’, filiere as ’Filière’ from etudiant ;
Prénom Filière
Marie SVA331
Pierre SVA331
Paul SVA331
Isabelle SVA331

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 27 / 99


Affichage avec clause restrictive des éléments d’une table

Nous pouvons souhaiter n’afficher qu’une partie des informations


disponibles dans une table, pour cela nous utiliserons le mot clé where
suivi d’une clause de restriction :
Syntaxe : select liste attributs from nom table where
clause restrictive ;
select * from etudiant where nom<>’null’ ;
prenom nom qualite filiere
Marie Delabio Melle SVA331
select prenom as ’Prénom’, filiere as ’Filière’ from etudiant where prenom
like ’P%’ ;
Prénom Filière
Pierre SVA331
Paul SVA331

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 28 / 99


Contenu du cours

5 Association 1,n
Table filiere
Clé primaire
Peuplement
Nouvelle table etudiant
Clé étrangère
Requête conjointe

6 Association n, n
Table cours
Table etu cou
Peuplement
Requête conjointe

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 29 / 99


Plan

5 Association 1,n
Table filiere
Clé primaire
Peuplement
Nouvelle table etudiant
Clé étrangère
Requête conjointe

6 Association n, n
Table cours
Table etu cou
Peuplement
Requête conjointe

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 30 / 99


Création de la table filiere

En fait, on s’aperçoit bien vite que le code (sur six caractères) de la filière
n’est pas explicite, et que l’on souhaiterait avoir, pour chaque étudiant
plus d’informations sur la filière dans laquelle il est inscrit. Nous allons
créer une entité spécifique, nommée filière regroupant les informations qui
lui sont associées, nous établirons ensuite une association entre ces deux
entités. L’entité filière sera représentée par une table filiere contenant :
le code : une chaı̂ne de caractères de 8 caractères (celui que l’on
trouve dans la table etudiant pour l’instant) ;
l’intitulé complet : une chaı̂ne de caractères (< 40 lettres) ;
le parcours : licence, master ou doctorat codé sur un caractère ;
l’année : un entier sur un chiffre ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 31 / 99


Création de la table filiere : clé primaire

Nous allons à présent (( étoffer )) notre table en ajoutant un attribut


particulier qui va nous permettre d’identifier de façon non-ambigüe une
entrée dans la table filiere : c’est une clé primaire, comme un numéro de
sécu ou un numéro d’étudiant. Nous pourrions utiliser le code de
l’université, mais nous allons plutôt utiliser un entier, qui aura comme
propriété d’être auto increment not null.

create table filiere(


fil id int(3) auto increment not null,
fil code char(6),
fil intitule varchar(40),
fil parcours enum(’l’,’m’,’d’),
fil annee int(1),
primary key (fil id)) ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 32 / 99


Ce qu’il faut en comprendre

Voici ce qu’en dit MySQL :

Field Type Null Key Default Extra


fil id int(3) pri null auto increment
fil code char(6) yes null
fil intitule varchar(30) yes null
fil parcours enum(’l’,’m’,’d’) yes null
fil annee int(1) yes null

On peut noter la colonne Key et Extra où fil id est indiqué comme pri et
auto increment

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 33 / 99


Peuplement de la table filiere

Nous allons à présent (( peupler )) notre table filiere.

insert into filiere(fil code, fil intitule, fil parcours, fil annee)
values(’SVA331’,’Biochimie et Biologie Moléculaire’,’l’,3),
(’SVA332’,’Biologie Cellulaire et Physiologie’,’l’,3),
(’SVA333’,’Sciences de Vie et de la Terre’,’l’,3),
(’SVA334’,’Écologie et Biologie des Organismes’,’l’,2),
(’SVA335’,’Écologie et Biologie des Organes’,’l’,3)) ;

Nous avons entré les attributs fil code, fil intitule, fil parcours et fil annee
mais pas l’attribut fil id, qui rappelons-le est auto increment et not
null. Cela veut dire que le système va attribuer une valeur si elle n’est
pas fournie, pour la première entrée, ce sera 1, puis cette valeur sera
auto-incrémentée pour chaque nouvelle entrée.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 34 / 99


Peuplement de la table filiere

fil id fil code fil intitule fil parcours fil annee


1 SVA331 Biochimie et Biologie Moléculaire l 3
2 SVA332 Biologie Cellulaire et Physiologie l 3
3 SVA333 Sciences de la Vie et de la Terre l 3
4 SVA334 Écologie et Biologie des Organismes l 2
5 SVA335 Écologie et Biologie des Organes l 3

Essayons d’ajouter une ligne avec une clé primaire déjà attribuée :
insert into filiere values(3,’SVA331’,’Filière imaginaire’,’l’,1) ;
error 1062 : Duplicate entry ’3’ for key 1
L’entrée 3 ne peut être utilisée deux fois (déjà attribuée).

Corrigeons l’erreur sur l’attribut fil annee correspondant à fil id=4 :


update filiere set fil annee=3 where fil id=4 ;

Supprimons la ligne superflue correspondant à ’SVA335’


delete from filiere where fil code=’SVA335’ ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 35 / 99


Modification de notre table etudiant
Nous devons modifier la table etudiant pour lui ajouter un attribut clé primaire,
renommer les attributs pour les préfixer avec etu et retirer l’attribut filiere pour
l’instant.

drop table etudiant ;


create table etudiant(
etu id int(5) auto increment not null,
etu prenom varchar(30),
etu nom varchar(30),
etu qualite enum(’Melle’,’Mme’,’M.’) not null,
primary key (etu id)),

Nous aurions pu modifier l’attribut (( prenom )) en (( etu prenom )) de la structure de


la table etudiant de la façon suivante :

alter table etudiant change prenom etu prenom varchar(30) ;

Pour plus d’information, voir la syntaxe d’alter table

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 36 / 99


Schéma entités/associations
Nous pouvons représenter à présent les deux entités et l’association entre
ces deux entités :
n 0
etudiant inscrit en filiere
etu_id INT NOT NULL AUTO_INCREMENT fil_id INT NOT NULL AUTO_INCREMENT
etu_prenom VARCHAR (3O) fil_code CHAR (6)
etu_nom VARCHAR (3O) fil_intitule VARCHAR(4O)
etu_qualite ENUM (’Melle’,’Mme’,’M.’) fil_parcours ENUM (’l’,’m’,’d’)
fil_annee INT (1)

L’association entre les deux entités est indiquée avec sa cardinalité :


c’est le nombre d’une entité qui peut être mis en association avec l’autre ;
plusieurs étudiants (n du coté de la table etudiant) peuvent être inscrits
dans la même filière
mais un étudiant ne peut être inscrit dans plusieurs filières...
remarquons qu’une filière peut ne pas ouvrir par manque d’étudiants, donc
la cardinalité minimale peut être 0 (du coté de la table filiere) !

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 37 / 99


Ajout de la clé étrangère dans la table etudiant

Nous allons à présent établir l’association 0, n entre les entités étudiant et


filière, nous allons pour cela créer dans la table etudiant une référence vers
la clé primaire de la table filiere, ce que nous allons appeler une clé
étrangère (si la cardinalité de la relation avait été n, n nous aurions dû
procéder différemment, comme nous le verrons plus tard) :
n 0
etudiant inscrit en filiere
etu_id INT NOT NULL AUTO_INCREMENT fil_id INT NOT NULL AUTO_INCREMENT
etu_fil_id INT NOT NULL fil_code CHAR (6)
etu_prenom VARCHAR(3O) fait référence à fil_intitule VARCHAR(4O)
etu_nom VARCHAR(3O) fil_parcours ENUM (’licence’,’master’,’doctorat’)
etu_qualite ENUM (’Melle’,’Mme’,’M.’) fil_annee INT (1)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 38 / 99


Ajout de la clé étrangère dans la table etudiant

drop table etudiant ;


create table etudiant(
etu id int(5) not null auto increment,
etu fil id int(3) not null,
etu prenom varchar(30),
etu nom varchar(30),
etu qualite enum(’Melle’,’Mme’,’M.’) not null,
primary key (etu id)),
foreign key (etu fil id) references filiere(fil id)) ;

le mot clé foreign key indique que cet attribut est la clé primaire
d’une autre table ;
le mot clé references, suivi d’un nom de table (ici filiere), va
préciser à quelle table appartient la clé étrangère ;
le nom d’attribut entre parenthèses (ici fil id) indique le nom de la clé
primaire tel qu’il est connu dans la table l’hébergeant.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 39 / 99


Peuplement de la table etudiant

insert into etudiant(etu prenom,etu nom,etu qualite,etu fil id)


values(’Marie’, ’Delabio’, ’Melle’, 1),
(’Pierre’, ’Delageno’, ’M.’, 2),
(’Isabelle’, ’Delaproteo’, ’Mme’, 1) ;
select ∗ from etudiant ;

etu id etu fil id etu prenom etu nom etu qualite


1 1 Marie Delabio Melle
2 2 Pierre Delageno M.
3 1 Isabelle Delaproteo Mme

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 40 / 99


Utilisation des deux tables simultanément

Nous pouvons à présent utiliser conjointement les tables etudiant et filiere


de la façon suivante :

select etu prenom,etu nom,etu qualite,fil intitule


from etudiant,filiere
where etudiant.etu fil id = filiere.fil id ;

etu prenom etu nom etu qualite fil intitule


Marie Delabio Melle Biochimie et Biologie Moléculaire
Pierre Delageno M. Biologie Cellulaire et Physiologie
Isabelle Delaproteo Mme Biochimie et Biologie Moléculaire

l’utilisation conjointe des tables est réalisée par (( from etudiant,filiere )) ;


l’association entre les deux entités est réalisée par la clause (( where
etudiant.etu fil id = filiere.fil id ; )) qui précise explicitement comment les
entrées des deux tables sont mises en correspondance ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 41 / 99


Utilisation des deux tables simultanément

Afficher en ordre alphabétique les prénoms, noms et filières des étudiants :


select etu prenom as ’Prénom’,
etu nom as ’Nom’,
fil intitule as ’Filière’
from etudiant,filiere
where etudiant.etu fil id = filiere.fil id
order by etu prenom ;

Prénom Nom Filière


Isabelle Delaproteo Biochimie et Biologie Moléculaire
Marie Delabio Biochimie et Biologie Moléculaire
Pierre Delageno Biologie Cellulaire et Physiologie

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 42 / 99


Plan

5 Association 1,n
Table filiere
Clé primaire
Peuplement
Nouvelle table etudiant
Clé étrangère
Requête conjointe

6 Association n, n
Table cours
Table etu cou
Peuplement
Requête conjointe

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 43 / 99


Création de la table cours

Nous allons à présent créer une table cours dans laquelle seront stockées
toutes les informations relatives aux cours. Elle contiendra au minimum les
attributs suivants :

create table filiere(


cou id int(3) auto increment not null,
cou intitule varchar(40),
cou page www varchar(40),
primary key (cou id)) ;

Nous aurions pu ajouter des attributs supplémentaires comme le semestre,


le nombre d’heures de cours, TD et TP, mais l’enseignant ne peut être
ajouté, dans la mesure où plusieurs enseignants peuvent se partager les
cours, TD et TP. Il est donc nécessaire de penser entité enseignant.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 44 / 99


Association n, n
Nous souhaitons à présent établir l’association entre les entités cours et
étudiant, les tables correspondantes sont :
n n
etudiant suit cours
etu_id INT NOT NULL AUTO_INCREMENT cou_id INT NOT NULL AUTO_INCREMENT
etu_fil_id INT NOT NULL cou_intitule VARCHAR (4O)
etu_prenom VARCHAR (3O) cou_page_www VARCHAR (4O)
etu_nom VARCHAR (3O)
etu_qualite ENUM (’Melle’,’Mme’,’M.’)

une clé étrangère dans la table etudiant ne pourrait faire référence


qu’à une seule clé primaire de la table cours alors qu’un étudiant peut
suivre plusieurs cours ;
une clé étrangère dans la table cours ne pourrait faire référence qu’à
une seule clé primaire de la table etudiant alors qu’un cours peut être
suivi par plusieurs etudiants ;
nous allons utiliser une table supplémentaire qui va faire le relai entre
les tables des deux entités, cette table s’appelle une table de jointure.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 45 / 99


Association n, n

La table que nous allons créer ne va contenir que peu d’informations,


uniquement celles qui permettent l’association : une référence à une entrée
de la table etudiant et une entrée de la table cours, nous allons passer de
deux entités et d’une association n, n entre ces entités à :
trois entités (étudiant, cours et étu cou) ;
deux associations : une association 1, n entre les entités étudiant et
étu cou et une association n, 0 entre les entités étu cou et cours.
etudiant 1 n etu_cou 0 cours
etu_id INT NOT NULL AUTO_INCREMENT etu_id INT NOT NULL cou_id INT NOT NULL AUTO_INCREMENT
etu_fil_id INT NOT NULL cou_id INT NOT NULL cou_intitule VARCHAR (4O)
etu_prenom VARCHAR (3O) n cou_page_www VARCHAR (4O)
etu_nom VARCHAR (3O)
etu_qualite ENUM (’Melle’,’Mme’,’M.’)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 46 / 99


Création de la table etu cou

Nous allons à présent créer une table etu cou dans laquelle seront stockées
les deux clés étrangères :

create table etu cou(


etu id int(3) not null,
cou intitule int(3) not null,
foreign key(etu id) references etudiant(etu id),
foreign key(cou id) references cours(cou id)) ;

Nous allons ajouter par la suite des attributs : les numéros du groupe de
TD et de TP par exemple

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 47 / 99


Peuplement des tables etudiant et etu cou
insert into etudiant(etu prenom,etu nom,etu qualite,etu fil id)
values (’Paul’,’Dutranscripto’,’M.’,3),
(’Maxime’,’Dumetabolo’,’M.’,4) ;
insert into etu cou
values (1,1),(1,2),(1,3),(2,1),(2,2),(3,1),(4,1),(5,3) ;
select ∗ from etu cou ;

etu id cou id
1 1
1 2
1 3
2 1
2 2
3 1
4 1
5 3

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 48 / 99


Utilisation des deux tables simultanément
Nous pouvons à présent utiliser conjointement les tables etudiant et cours
de la façon suivante :

select fil intitule as ”Intitulé du cours”,


etu nom as ”Nom”,
etu prenom as ”Prénom”
from etudiant,cours,etu cou
where etudiant.etu id = etu cou.etu id
and etu cou.cou id = cours.cou id
order by fil intitule ;

Intitulé du cours Nom Prénom


Conception et Construction de Bases de Données Paul Dutranscripto
Conception et Construction de Bases de Données Marie Delabio
Conception et Construction de Bases de Données Pierre Delageno
Conception et Construction de Bases de Données Isabelle Delaproteo
Programmation en Informatique Marie Delabio
Programmation en Informatique Pierre Delageno
Unix et langage C Pierre Delageno
Unix et langage C Maxime Dumetabolo

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 49 / 99


Contenu du cours

7 Architecture trois tiers


Aperçu
Trois tiers
Langages à balises

8 HTML
Paragraphes
Entêtes
Caractères
Listes
Tableaux
image
Hyperlien

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 50 / 99


Plan

7 Architecture trois tiers


Aperçu
Trois tiers
Langages à balises

8 HTML
Paragraphes
Entêtes
Caractères
Listes
Tableaux
image
Hyperlien

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 51 / 99


Architecture trois tiers :
HTML, PHP/Python/Perl (ou autre) et MySQL
client (ordinateur personnel)

Navigateur web

Envoi de la page Réseau Demande de la page web


web de résultat

Programme
HTML PHP, Python, Perl

Récupération de la
Page web de saisie Récupération Envoi de
requête SQL
des paramètres la requête SQL Exécution de la
Construction de la requête SQL

















requête SQL



















Base de














Réseau



























Données


Récupération du



résultat de la Résultat de la






requête SQL Envoi du requête SQL







résultat de la







Construction de la requête SQL




Page web de résultat page web de résultat

serveur SGBD
serveur web

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 52 / 99


Les trois tiers

1 HTML – Hyper Text Markup Language


Le langage HTML est un langage à balise utilisé pour la présentation
des pages web, la construction des formulaires à partir desquels seront
transmises les données.
2 PHP – PHP Hypertext Preprocessor
Le langage PHP est utilisé pour récupérer les données transmises à
partir du formulaire, construire la requête SQL, la transmettre au
serveur. Il permet également de récupérer le résultat de la requête,
une fois effectuée par le SGBD, puis de construire la page HTML
présentant les résultats.
3 SGBD – Système de Gestion de Bases de Données
Le langage MySQL (dans notre cas) est utilisé pour exécuter la
requête, le serveur retourne alors au programme appelant le résultat
de la requête.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 53 / 99


D’autres possibilités ?

PHP n’est pas le seul langage permettant de faire le lien entre la page web
et le SGBD :
Python est une alternative extrémement intéressante, c’est un langage
facile à apprendre, puissant et extensible : il dispose d’un module
permettant l’interrogation d’un SGBD distant (il est étudié en
deuxième année de licence du parcours Biologie) ;
Perl est très utilisé, il dispose d’un ensemble de modules pour
l’interrogation d’un SGBD distant et la construction de pages HTML ;
ces deux langages possédent de nombreuses fonctionnalités pour le
traitement de données, des mécanismes souples de gestion de listes,
particulièrement utiles pour traiter les résultats d’une requête SQL ;
plus généralement, les langages qui s’appuient sur la CGI (Common
Gateway Interface)

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 54 / 99


L’introduction à MySQL, HTML et PHP

MySQL est indispensable (lui ou un autre SGBD) à l’interrogation des


données contenues dans la base, il a été appris pour pouvoir
construire les requêtes qui seront transmises au SGBD.
HTML est le langage de présentation des pages web, il faut
l’apprendre pour pouvoir par la suite afficher sur une page web les
résultats des requêtes transmises au serveur.
PHP est un langage qui va (( se glisser )) dans le code HTML et va
permettre l’interaction avec le SGBD. Il faut comprendre quelques-uns
de ses mécanismes pour permettre la transmission de la requête au
SGBD, mais également la construction de la page web de résultats.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 55 / 99


Quelques généralités sur les langages à balises
Les langages à balises (ou marqueurs) sont des langages de description structurelle,
ils rendent explicite la façon dont le document est construit :
<lettre>
<entete>
<lieu>Mont-Saint-Aignan</lieu>
<date>le 31 octobre 2008</date>
</entete>
<ouverture> Madame, </ouverture>
<corps> Je suis très heureux de votre lettre </corps>
<fermeture>Cordialement,</fermeture>
<signature>Votre obligé</signature>
</lettre>

Quelques langages à balises : SGML (Std Generalized Markup Language, depuis les
années 1960), XML (eXtensible Markup Language, 1998), TEXet LATEX 2ε , ...
Chaque langage dispose de ses propres balises, ainsi parfois que de
mécanismes permettant d’en définir de nouvelles.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 56 / 99


Plan

7 Architecture trois tiers


Aperçu
Trois tiers
Langages à balises

8 HTML
Paragraphes
Entêtes
Caractères
Listes
Tableaux
image
Hyperlien

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 57 / 99


Le langage HTML
HTML est utilisé pour décrire les pages web ;
développé à la fin des années 1980 par Tim Berners-Lee alors qu’il
travaillait au CERN pour mettre en commun des documents de travail ;
des versions successives, des mécanismes de feuilles de styles, ...
voici un exemple de code HTML :

<html>
<head>
<title>Mon titre</title>
</head>
<body>
<center>Mon texte centré</center>
</body>
</html>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 58 / 99


Le langage HTML :
l’entête <head> ... </head>

L’entête <head> contient essentiellement les informations relatives à la


page :

<title>Mon titre</title>
le titre qui apparaı̂tra sur la barre de titre ;
<meta name=author content="Thierry Lecroq">
le nom de l’auteur de la page ;
meta http-equiv="content-type" content="text/html;charset=iso-8859-15">
l’encodage utilisé (caractères accentués avec ¿ par exemple) ;
<link rel="stylesheet" href="ficstyle.css">
l’utilisation d’un fichier de style (fonctionnalité non présentée dans ce
cours).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 59 / 99


Le langage HTML :
le corps <body> ... </body>

C’est cette partie du fichier HTML qui va être affichée par votre
navigateur. Elle contient des balises pour :
les paragraphes ;
les entêtes (titres) ;
les listes ;
la construction de tableaux ;
la gestion des images ;
la création de liens vers d’autres documents ;
la mise en place de formulaires ;
...

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 60 / 99


Le balisage HTML : les paragraphes <p> </p> et les
ruptures <br/>

un paragraphe est balisé par <p>, et est par défaut justifié à gauche ;
une rupture de paragraphe (passage à la ligne) est balisé par <br/> ;
pour modifier ce comportement, il faut ajouter un attribut à la balise
<p> comme ci-dessous :

<p>un paragraphe normal sera...</p>

<p align="left"> un paragraphe justifié à ga...</p>

<p align="center">un paragraphe centré</p>

<p align="right">un paragraphe justifié à dr...</p>

<p align="justify">un paragraphe totalement ...</p>

<p> un paragraphe<br/>avec rupture</p>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 61 / 99


Le balisage HTML : les entêtes <h1> </h1> à <h6>
</h6>

<h1>Ent^
ete de niveau 1</h1>

<h2>Ent^
ete de niveau 2</h2>

<h2 align="center">Ent^
ete centrée de niveau 2</h2>

<h3>Ent^
ete de niveau 3</h3>

<h4>Ent^
ete de niveau 4</h4>

<h4>Ent^
ete de niveau 4 justifiée à droite</h4>

<h5>Ent^
ete de niveau 5</h5>

<h6>Ent^
ete de niveau 6</h6>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 62 / 99


Le balisage HTML :
les caractères et leur mise en forme
En HTML, les caractères ne sont pas des balises mais des codes réservés construits
en indiquant dans l’ordre :
l’esperluette & ;
le caractère ;
le modificateur (grave, acute, circ, cedil, uml) ;
le point-virgule.
Ce sont :
code symbole code symbole code symbole
&eacute; é &egrave; è &ecirc; ê
&Eacute; É &Egrave; È &Ecirc; Ê
... ... ... ... ... ...
&ccedil; ç &Ccedil; Ç &uuml; ü
Les effets sur les caractères sont eux accessibles grâce à des balises :
<b>texte1</b> et <i>texte2</i> pour texte1 et texte2 ;
<u>texte</u> pour texte en souligné.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 63 / 99


Le balisage HTML : les liste non-ordonnées <ul> <li>
</li> </ul>

<ul>
<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ul>

<ul style="list-style-type: square;">


<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ul>

<ul style="list-style-type: circle;">


<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ul>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 64 / 99


Le balisage HTML : les liste ordonnées <ol> <li> </li>
</ol>

<ol>
<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ol>

<ol style="list-style-type: lower-roman;">


<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ol>

<ol start="19" style="list-style-type: lower-alpha;">


<li>HTML</li>
<li>PHP</li>
<li>MySQL</li>
</ol>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 65 / 99


Le balisage HTML : les listes descriptives <dl>
<dt></dt> <dd></dd> </dl>

<dl>
<dt>HTML </dt>
<dd>langage...</dd>
<dt>PHP </dt>
<dd>langage...</dd>
<dt>MySQL</dt>
<dd>système...</dd>
</dl>

<dl>
<dd>HTML</dd>
<dd>langage...</dd>
<dd>PHP</dd>
<dd>langage...</dd>
<dd>MySQL</dd>
<dd>système...</dd>
</dl>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 66 / 99


Le balisage HTML : les tableaux <table> <tr> <td>
</td> </tr> </table>
<table width="100%" border=1>
<tr>
<td>haut gauche</td>
<td align="left">haut droite</td>
</tr>
<tr>
<td align="center">bas gauche</td>
<td align="right">bas droite</td>
</tr>
</table>

<table border=1 ncols=2>


<tr>
<td colspan=2 align="center">haut</td>
</tr>
<tr>
<td>bas gauche</td>
<td>bas droite</td>
</tr>
</table>

<table border=1>
<tr>
<td rowspan=2 valign="center">gauche</td>
<td>haut droite</td>
</tr>
<tr>
<td>bas droite</td>
</tr>
</table>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 67 / 99


Le balisage HTML : les tableaux
<table> <tr> <td> </td> </tr> </table>
<table frame="vsides">
<tr>
<td rowspan="2" valign="top">gauche</td>
<td colspan="2" align="right">haut droite</td>
</tr>
<tr>
<td>bas milieu</td>
<td style="background-color: rgb(192, 192, 192);">
bas droite</td>
</tr>
</table>

<table frame="hsides" rules="rows">


<tr>
<td rowspan="2" valign="center">gauche</td>
<td colspan="2" align="center">haut droite</td>
</tr>
<tr>
<td bgcolor="ff00ff">bas milieu</td>
<td>bas droite</td>
</tr>
</table>

<table frame="vsides" rules="cols">


<tr>
<td rowspan="2" valign="bottom">gauche</td>
<td colspan="2" align="left">haut droite</td>
</tr>
<tr>
<td>bas milieu</td>
<td bgcolor="blue">bas droite</td>
</tr>
</table>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 68 / 99


Le balisage HTML : les tableaux
<table> <tr> <td> </td> </tr> </table>
<table cellspacing=0
frame="hsides"
rules="rows">
<tr bgcolor="lightgrey">
<td>Delabio</td><td>Marie</td>
</tr>
<tr>
<td>Delageno</td><td>Pierre</td>
</tr>
<tr bgcolor="lightgrey">
<td>Delaproteo</td><td>Isabelle</td>
</tr>
<tr>
<td>Dumetabolo</td><td>Maxime</td>
</tr>
</table>

<br/>

<table border=1>
<tr>
<td background="chutes_niagara.jpg">
un petit texte pour la<br/>
cellule avec image<br/>
pas très lisible n’est-ce pas ?</td>
<td>rien d’autre</td>
</tr>
</table>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 69 / 99


Le balisage HTML : l’insertion d’une image
<img src=”...”/>

Une petite image :


<img src="chutes_niagara.jpg"/>

<br/>

Une image étirée en hauteur :


<img alt="Chutes du Niagara"
src="chutes_niagara.jpg"
align="middle"
height="240"
width="120"/>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 70 / 99


Le balisage HTML : l’insertion d’un hyperlien
<a href=”...”>...</a>

<a href="Cours/Ba_Do/index.html">
Lien
</a>
vers les pages de cours.

<br/>

Un lien vers
<a href="mailto:Thierry.Lecroq@univ-rouen.fr">
mon mél
</a>

<br/>

Une image avec un lien autour :


<a href="http://www.niagara.com">
<img src="chutes_niagara.jpg"
alt="Niagara"
height="40">
</a>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 71 / 99


Contenu du cours
9 Formulaires
Principe
Forme générale
Méthodes
Les formulaires
10 PHP
Introduction
Exemples
Actions
11 Connexions au SGBD
Liste des bases
Requête simple
Requête améliorée
12 Interrogation de notre base
Formulaire
action
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 72 / 99
Plan
9 Formulaires
Principe
Forme générale
Méthodes
Les formulaires
10 PHP
Introduction
Exemples
Actions
11 Connexions au SGBD
Liste des bases
Requête simple
Requête améliorée
12 Interrogation de notre base
Formulaire
action
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 73 / 99
Principe des formulaires
client (ordinateur personnel)

La page web est associée à


Navigateur web
un fichier-action, écrit dans
Envoi de la page
Réseau Demande de la page web
un langage de programma-
web de résultat
tion, qui va traiter les données
Programme entrées dans le formulaire web :
HTML PHP, Python, Perl

Page web de saisie Récupération


la page formulaire et le fichier-
des paramètres
action sont généralement sur le
même serveur (web).

Construction de la
Page web de résultat page web de résultat

serveur web

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 74 / 99


Le balisage HTML : les formulaires
<form action=”...” method=”...”> </form>
<form action="..." method="...">
...
<input type="submit">
</form>

<form déclaration du formulaire ;


action="..." fichier-action à exécuter après validation
du formulaire ;
method="..."> méthode de transfert des informations vers
le fichier-action ;
... suit alors la construction elle-même du for-
mulaire ;
<input type="submit">construit le bouton de transfert des infor-
mations ;
</form> fin du formulaire.
Nous allons apprendre à construire divers formulaires et par la suite comprendre
comment les fichiers-actions peuvent être construits.
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 75 / 99
Les méthodes pour les formulaires

la méthode get va transmettre les données au serveur en les ajoutant


à la fin de l’adresse du fichier-action, après un ?, lorsque les données
sont peu nombreuses et assez petites en taille :

la méthode post va transmettre les données au serveur


indépendemment de l’adresse du fichier-action, ce lorsque le nombre
ou la taille des données transmises entre le formulaire et le
fichier-action est importante ;
Ces deux méthodes ne sont pas spécifiques à PHP mais sont rattachées à
la partie CGI (Common Gateway Interface).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 76 / 99


Formulaire contenant une entrée texte simple :
<input type=”text”>
Formulaire avec l’entr&eacute;e text<br/>
<form action="action_input_text.php"
method="get">
Entrer votre nom :
<input type="text"
name="nom"/>
<br/>
<input type="submit"
value="Entrer"/>
</form>

le nom du fichier-action est action_input_text.php


la méthode est get, très peu d’informations sont transmises
le formulaire contient une entrée de type text, appelé nom
le formulaire contient un bouton cliquable (submit), sur lequel sera affiché
Entrer. C’est ce bouton qui permettra la transmission des informations au
fichier-action

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 77 / 99


Formulaire contenant des boutons sélectionnables :
<input type=”radio”>
Formulaire avec l’entr&eacute;e radio<br/>
<form action="action_input_radio.php"
method="get">
<table border=0>
<tr>
<td valign="top">
Choisissez une fili&egrave;re :
</td>
<td>
<input type="radio" name="filiere"
value="SVA331" checked="checked">
SVA321<br/>
<input type="radio" name="filiere"
value="SVA332">SVA332<br/>
<input type="radio" name="filiere"
value="SVA333">SVA333<br/>
<input type="radio" name="filiere"
value="SVA334">SVA334
</td>
</tr>
<tr>
<td>
<input type="submit" value="Entrer"/>
</td>
<td></td>
</tr>
</table>
</form>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 78 / 99


Formulaire contenant des boutons exclusifs :
<input type=”checkbox”>
Formulaire avec l’entr&eacute;e checkbox<br/>
<form action="action_input_checkbox.php"
method="post">

Choisissez quelques cours : <br/>

<input type="checkbox" name="cours[]"


value="Programmation en informatique">
Programmation en informatique<br/>

<input type="checkbox" name="cours[]"


value="Bases de donnees">
Bases de donn&eacute;es<br/>

<input type="checkbox" name="cours[]"


value="Unix et langage C">
Unix et Langage C<br/>

<input type="checkbox" name="cours[]"


value="Assemblage">
Assemblage<br/>

<input type="submit" value="Entrer"/>


</form>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 79 / 99


Formulaire contenant un menu déroulant :
<select>
Formulaire avec le menu select<br/>
<form action="action_select.php"
method="get">
S&eacute;lectionner votre couleur pr&eacute;f&eacute;r&eacute;e :<br/>
<select name="couleur">
<option value="bleu">
bleu
</option>
<option value="rouge">
rouge
</option>
<option value="jaune">
jaune
</option>
<option value="vert">
vert
</option>
<option value="violet">
violet
</option>
<option value="rose">
rose
</option>
</select>
<input type="submit" value="Entrer"/>
</form>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 80 / 99


Plan
9 Formulaires
Principe
Forme générale
Méthodes
Les formulaires
10 PHP
Introduction
Exemples
Actions
11 Connexions au SGBD
Liste des bases
Requête simple
Requête améliorée
12 Interrogation de notre base
Formulaire
action
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 81 / 99
Qu’est-ce que PHP ?, pourquoi utiliser ce langage ?

PHP = (Personal Home Page ou) PHP Hypertext Preprocessor :


langage facilitant la génération de code HTML
PHP peut aisément :
I analyser les données transmises depuis un formulaire ;
I effectuer une requête SQL vers un serveur distant ;
I mettre en forme la page web présentant le résultat de la requête ;
PHP est facile à programmer, il dispose d’un grand nombre de
modules spécifiques additionnels ;
beaucoup de documentations pour PHP/MySQL sont disponibles sur
le réseau ;
PHP fonctionne indifféremment sur PC (Windows et Linux), Mac
(Mac OS X) et stations de travail ;
PHP est gratuit, ces codes sources sont disponibles.

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 82 / 99


Notre premier programme PHP
<html>
<head>
<title>premier exemple de
programme PHP</title>
</head>
<body>
<?php
print("Nous sommes le ",
date("d m Y, H:i"));
?>
</body>
</html>

le nom du fichier doit se terminer par .php ;


le programme PHP est inséré au milieu du code HTML ;
le programme PHP est délimité par <?php et ?> ;
le caractère ; termine toutes les lignes d’instructions ;
la commande print va afficher dans cette page HTML l’information
passée entre parenthèses, ici Nous sommes le " suivi de la
commande date, avec un format particulier (d : jour, m : mois, Y :
année avec 4 chiffres, H : heure sur 24 h et i : minutes).

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 83 / 99


Notre deuxième programme PHP

<html>
<head>
<title>deuxi&egrave;me exemple de
programme PHP</title>
</head>
<body>
<center>
<?php
$texte = "marie delabio";
print(strtoupper($texte));
?>
</center>
</body>
</html>

ici, la valeur de la variable texte est donnée de façon explicite ;


une fonction, strtoupper transformant toutes les minuscules d’une
chaı̂ne de caractères en majuscules, est utilisée ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 84 / 99


Exemple de fichier-action pour l’entrée texte

<html>
<head>
<title>Action pour l’entr&eacute;e texte</title>
</head>
<body>
<?php
$nom = $_GET[’nom’] ;
print("Vous vous appelez : $nom");
?>
</body>
</html>

$nom = $_GET[’nom’] permet de récupérer la valeur nom transmise


en mode get ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 85 / 99


Exemple de fichier-action pour l’entrée radio

<html>
<head>
<title>Action pour l’entr&eacute;e radio</title>
</head>
<body>
<?php
$filiere = $_GET[’filiere’] ;
print("Vous avez s&eacute;lectionn&eacute;
la fili&egrave;re suivante : $filiere");
?>
</body>
</html>

$filiere = $_GET[’filiere’] permet de récupérer la valeur


filiere transmise en mode get ;

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 86 / 99


Exemple de fichier-action pour l’entrée checkbox

<html>
<head>
<title>Action pour l’entr&eacute;e checkbox</title>
</head>
<body>
Liste des cours auxquels vous vous
&ecirc;tes inscrit&nbsp;: <br/>
<table>
<?php
$cours = $_POST[’cours’];
$couleur="#ffffff";
for ($i=0;$i<count($cours);$i++)
{
if ( $couleur == "#ffffff" )
$couleur="#dddddd";
else
$couleur="#ffffff";
print("<tr bgcolor=\"$couleur\">");
print("<td>$cours[$i]</td></tr>\n");
}
?>
</table>
</body>
</html>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 87 / 99


Explication de l’action pour l’entrée checkbox

$cours = $_GET[’cours’] récupére la valeur cours transmise en


mode post
$couleur="#ffffff"; la couleur est le blanc
for ($i=0;$i<count($cours);$i++) boucle parcourant une à une les valeurs
de 0 à nombre(cours) - 1
if ( $couleur == "#ffffff" )
$couleur="#dddddd"; si la couleur est le blanc, elle est
changée en gris
else
$couleur="#ffffff"; sinon (elle est grise), elle est changée
en blanc
echo "<tr bgcolor=\"$couleur\">" ;
echo "<td>$cours[$i]</td></tr>\n"; ajoute au fichier HTML une balise ligne
(de couleur) dans le tableau

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 88 / 99


Exemple de fichier-action pour le select

<html>
<head>
<title>Action pour le menu select</title>
</head>
<body>
<?php
$couleur = $_GET[’couleur’] ;
print("Votre couleur s&eacute;lectionn&eacute;e est : ");
print("$couleur\n");
?>
</body>
</html>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 89 / 99


Plan
9 Formulaires
Principe
Forme générale
Méthodes
Les formulaires
10 PHP
Introduction
Exemples
Actions
11 Connexions au SGBD
Liste des bases
Requête simple
Requête améliorée
12 Interrogation de notre base
Formulaire
action
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 90 / 99
Interrogation du Système de Gestion de Bases de
Données : la liste des bases de données
<html>
<head>
<title>Liste des bases g&eacute;r&eacute;es</title>
</head>
<body>
Liste des bases g&eacute;r&eacute;es :
<ol>
<?php
# Requ^
ete de connexion à l’hote
$connexion=mysql_connect("localhost","","");

# Déterminer la liste des bases


$resultat=mysql_list_dbs($connexion);

# Combien y-a-t-il de bases ?


$nbre_bases=mysql_num_rows($resultat);

# Affichage des bases (une par une)


for($i=1;$i<=$nbre_bases;$i++) {
$ligne=mysql_fetch_array($resultat);
print("<li>$ligne[0]</li>\n"); }
# Terminer la connexion
mysql_close($connexion);
?>
</ol>
</body>
</html>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 91 / 99


Explication du code PHP
→ $connexion=mysql_connect("localhost","","");
ouverture de la connexion, dans l’ordre, doivent être indiqués le nom du SGBD, le nom de connexion,
le mot de passe

→ $resultat=mysql_list_dbs($connexion);
$resultat va recevoir la liste des bases de données, il y aura dans $resultat autant de lignes que de
bases de données gérées par le SGBD

→ $nbre_bases=mysql_num_rows($resultat);
$nbre_bases va recevoir le nombre de lignes dans $resultat, c’est-à-dire le nombre de bases de
données gérées par le SGBD

→ for($i=1;$i<=$nbre_bases;$i++) {
boucle de traitement : nous allons exécuter les commandes suivantes autant de fois qu’il y a de bases
de données

→ $ligne=mysql_fetch_array($resultat);
intérieur de boucle : récupération de la prochaine ligne de resultat

→ print("<li>$ligne[0]</li>\n"); }
intérieur de boucle : affichage dans <li> de la ligne récupérée de resultat

→ mysql_close($connexion);
fermeture de la connexion

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 92 / 99


Première requête MySQL : récupération des noms
d’étudiants
<?php
# Établir la connexion, sélectionner la base
$connexion=mysql_connect("localhost","","");
mysql_select_db("base_du_cours");

# Construire la requ^
ete
$requete="SELECT etu_nom FROM etudiant ".
"ORDER BY etu_nom LIMIT 5 ;" ;

# Demander l’exécution de la requ^


ete
$resultat=mysql_query($requete);

# Combien y-a-t-il de lignes ?


$nbre_lignes=mysql_num_rows($resultat);

# Boucle principale
for($i=1;$i<=$nbre_lignes;$i++) {
# Récupérer la ligne puis l’afficher
$ligne=mysql_fetch_object($resultat);
print("$ligne->etu_nom<br/>\n"); }

# Fermeture de la connexion
my_close($connexion);
?>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 93 / 99


Explication du code PHP (hors connexion et déconnexion)

→ mysql_select_db("base_du_cours");
sélection de la base de données

→ $requete="SELECT etu_nom FROM etudiant ORDER BY etu_nom LIMIT 5 ;";


construction de la requête à soumettre au SGBD

→ $resultat=mysql_query($requete);
$resultat va recevoir le résultat de la requête SQL envoyée au SGBD

→ $nbre_lignes=mysql_num_rows($resultat);
$nbre_lignes va recevoir le nombre de lignes dans $resultat (au max. 5)

→ for($i=1;$i<=$nbre_lignes;$i++) {
boucle de traitement

→ $ligne=mysql_fetch_array($resultat);
intérieur de la boucle : récupération de la prochaine ligne de resultat

→ print("$ligne->etu_nom<br/>\n"); }
intérieur de la boucle : affichage du champs etu_nom de ligne puis passage à la ligne

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 94 / 99


Deuxième requête MySQL : récupération des noms
d’étudiants avec mise en forme
<?php
$connexion=mysql_connect("localhost","","");
mysql_select_db("base_du_cours");

$requete="SELECT etu_nom FROM etudiant ".


"ORDER BY etu_nom LIMIT 5;" ;

$resultat=mysql_query($requete);

$nbre_lignes=mysql_num_rows($resultat);

$couleur="#ffffff";

for($i=1;$i<=$nbre_lignes;$i++) {

if ( $couleur == "#ffffff" )
$couleur="#dddddd";
else
$couleur="#ffffff";

$ligne=mysql_fetch_object($resultat);
print("<tr bgcolor=\"$couleur\">");
print("<td> $ligne->etu_nom </td></tr>\n"); }

mysql_close($connexion);
?>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 95 / 99


Plan
9 Formulaires
Principe
Forme générale
Méthodes
Les formulaires
10 PHP
Introduction
Exemples
Actions
11 Connexions au SGBD
Liste des bases
Requête simple
Requête améliorée
12 Interrogation de notre base
Formulaire
action
T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 96 / 99
Formulaire pour l’interrogation de notre base

<html>
<head>
<title>
Interrogation de la base de donn&eacute;es
</title>
</head>

<body>
<h1>Interrogation de la base de donn&eacute;es</h1>
<form action="connexion5.php" method="get">
Entrer le code fili&egrave;re :
<input type="text" name="code_filiere"/>
<br/>
<input type="submit" value="Entrer"/>
</form>
</body>
</html>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 97 / 99


Action pour l’interrogation de notre base

<?php
$fil_code =$_GET[’code_filiere’];

print("<h1 align=center> &Eacute;tudiants inscrits


dans la fili&egrave;re");
print(" $fil_code </h1><hr width=’50%’>");

# Etablir la connexion
$connexion=mysql_connect("localhost","","");

# Sélection de la base adéquate


mysql_select_db("base_du_cours");

$requete="SELECT etu_nom,etu_prenom ".


"FROM etudiant,filiere ".
"WHERE etu_fil_id=fil_id ".
"AND fil_code=\"$fil_code\" ".
"ORDER BY etu_nom ;" ;
$resultat = mysql_query($requete) ;

# Combien y-a-t-il de lignes ?


$nbre_lignes = mysql_num_rows($resultat);

print("<center><table border=1>");
print("<tr><td>Nom</td><td>Pr&eacute;nom</td></tr>");
$couleur="#ffffff";

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 98 / 99


Action pour l’interrogation de notre base

for($i=1;$i<=$nbre_lignes;$i++) {

if ( $couleur == "#ffffff" )
$couleur="#dddddd";
else
$couleur="#ffffff";

# Récupérer ligne après ligne


$ligne = mysql_fetch_object($resultat);

print("<tr bgcolor=\"$couleur\">");
printf("<td> %s </td>\n <td> %s </td>\n</tr>\n",
$ligne->etu_nom,$ligne->etu_prenom);

# Construction du tableau centré


print(" </table></center>\n");

# Fermeture de la connexion à la base de données


mysql_close($connexion);
?>

T. Lecroq (Université de Rouen) Conception et Création de BD Année 2008–2009 99 / 99