Conception et Création de Bases de Données



Documents pareils
Olivier Mondet

Bases de données relationnelles

CREATION WEB DYNAMIQUE

Pratique et administration des systèmes

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

PHP 5. La base de données MySql. A. Belaïd 1

Création et Gestion des tables

SQL Historique

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Pour les débutants. langage de définition des données

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Le langage SQL (première partie) c Olivier Caron

Les BASES de DONNEES dans WampServer

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Module BD et sites WEB

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

1 Introduction et installation

Cours: Administration d'une Base de Données

I. MySQL : Serveur et SGBD

1/ Présentation de SQL Server :

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Information utiles. webpage : Google+ : digiusto/

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Présentation du module Base de données spatio-temporelles

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

PHP 4 PARTIE : BASE DE DONNEES

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Les bases de données

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Dossier I Découverte de Base d Open Office

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Le Langage De Description De Données(LDD)

PHP et les Bases de données - Généralités

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Bases de Données relationnelles et leurs systèmes de Gestion

TD HTML AVEC CORRECTION

CREATION d UN SITE WEB (INTRODUCTION)

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Création de formulaires interactifs

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Bases de Données et Internet

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Introduction à MySQL (ou MySQL en 3 heures montre en main)

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Les bases de données Page 1 / 8

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Bases de données élémentaires Maude Manouvrier

Introduction au Système de Gestion de Base de Données et aux Base de Données

Créer le schéma relationnel d une base de données ACCESS

Notes de cours : bases de données distribuées et repliquées

Mysql avec EasyPhp. 1 er mars 2006

Stockage du fichier dans une table mysql:

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

Historisation des données

Langage SQL : créer et interroger une base

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

1. Base de données SQLite

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

Architectures web/bases de données

HMTL. Exemple de fichier HTML. Structure d un document HTML. Exemple de fichier HTML. Balises HTML. IFT1147 Programmation Serveur Web avec PHP

Encryptions, compression et partitionnement des données

Programmation Internet Cours 4

Programmation Web. Madalina Croitoru IUT Montpellier

les techniques d'extraction, les formulaires et intégration dans un site WEB

Compte Rendu d intégration d application

Bernard Lecomte. Débuter avec HTML

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Formation HTML / CSS. ar dionoea

SQL MAP. Etude d un logiciel SQL Injection

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Objectifs du TP : Initiation à Access

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

TP JAVASCRIPT OMI4 TP5 SRC

Installation d'un serveur FTP géré par une base de données MySQL

1 Position du problème

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Initiation à html et à la création d'un site web

PostgreSQL. Formations. Calendrier... 14

Le Langage SQL version Oracle

SUPPORT DE COURS / PHP PARTIE 3

Mise en œuvre des serveurs d application

MODE OPERATOIRE OPENOFFICE BASE

Cours Bases de données

Optimisations des SGBDR. Étude de cas : MySQL

Introduction aux Bases de Données 2004/2005

Tutorial sur SQL Server 2000

PostgreSQL. Formations. SQL avancé Calendrier... 18

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Transcription:

Conception et Création de Bases de Données SVA8511A (Licence Biologie 3 e 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 concepts génériques des bases de données ; bases du langage structuré de requêtes SQL ; Travaux dirigés (apprentissage du langage SQL) descriptif approfondi des fonctions SQL ; exercices de conception de bases de données ; normalisation des relations et construction des tables ; construction des requêtes SQL. Travaux pratiques (pratique du langage SQL) mise en pratique des TD sous MySQL ; requêtes et vérifications sous phpmyadmin ; 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 : de taille importante ; organisé (on dit également structuré) ; 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 : étudiant ; enseignant ; cours. et des associations entre ces entités, par exemple : suivre : un étudiant suit un cours ; donner : un enseignant donne un cours ; noter : un enseignant note un étudiant. etudiant suit note donne enseignant légende : entité 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 : le stockage des informations ; la gestion des entités et des mécanismes souples pour représenter les associations (dans le modèle relationnel) ; l affichage de tout ou partie de la base de données. Quelques exemples de SGBD : Access, DBase, Ingres, Informix, msql, MySQL, Oracle, O 2, 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 O 2 (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 : quelques entités (étudiants, enseignants, cours) ; 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 requête requête réponse réponse internet 1. émission 2. réception 5. réception 4. émission réponse requête 3. traitement client serveur client : Le client peut interroger le serveur en utilisant : un langage de requêtes structuré (compatible avec la norme ANSI SQL) 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 : attend les sollications des clients, éventuellement nombreux, et provenant de divers systèmes d exploitation ; effectue les recherches correspondantes dans la base ; 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 ) ; nom prenom qualite filiere etudiant VARCHAR (30) VARCHAR (30) ENUM ( Melle, Mme, M. ) 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 : etu_id etu_prenom etu_nom etu_qualite etudiant INT NOT NULL AUTO_INCREMENT VARCHAR(3O) VARCHAR(3O) ENUM ( Melle, Mme, M. ) n 0 inscrit en fil_id fil_code fil_intitule fil_parcours fil_annee filiere INT NOT NULL AUTO_INCREMENT CHAR(6) VARCHAR(4O) ENUM ( l, m, d ) 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) : etu_id etu_fil_id etu_prenom etu_nom etu_qualite etudiant n 0 inscrit en INT NOT NULL AUTO_INCREMENT fil_id INT NOT NULL AUTO_INCREMENT INT NOT NULL fil_code CHAR(6) VARCHAR(3O) fait référence à fil_intitule VARCHAR(4O) VARCHAR(3O) ENUM ( Melle, Mme, M. ) fil_parcours ENUM ( licence, master, doctorat ) INT(1) fil_annee filiere 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 : etu_id etu_fil_id etu_prenom etu_nom etu_qualite etudiant INT NOT NULL AUTO_INCREMENT INT NOT NULL VARCHAR (3O) VARCHAR (3O) ENUM ( Melle, Mme, M. ) n suit n cours cou_id INT NOT NULL AUTO_INCREMENT cou_intitule cou_page_www VARCHAR (4O) VARCHAR (4O) 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 etu_id INT NOT NULL AUTO_INCREMENT etu_fil_id INT NOT NULL etu_prenom VARCHAR (3O) etu_nom VARCHAR (3O) etu_qualite ENUM ( Melle, Mme, M. ) 1 n etu_id cou_id etu_cou INT NOT NULL INT NOT NULL n 0 cours cou_id INT NOT NULL AUTO_INCREMENT cou_intitule cou_page_www VARCHAR (4O) VARCHAR (4O) 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 web de résultat Réseau Demande de la page web HTML Programme PHP, Python, Perl Page web de saisie Page web de résultat Récupération des paramètres Construction de la requête SQL Récupération du résultat de la requête SQL Construction de la page web de résultat Envoi de la requête SQL Réseau Envoi du résultat de la requête SQL Récupération de la requête SQL Exécution de la requête SQL Base de Données Résultat de la requête SQL serveur web serveur SGBD 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 L A TEX 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 ; eta 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 é é è è ê ê É É È È Ê Ê.................. ç ç Ç Ç ü ü 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) Envoi de la page web de résultat Navigateur web Réseau HTML Page web de saisie Demande de la page web Programme PHP, Python, Perl Récupération des paramètres La page web est associée à un fichier-action, écrit dans un langage de programmation, qui va traiter les données entrées dans le formulaire web : la page formulaire et le fichieraction 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 formulaire ; <input type="submit">construit le bouton de transfert des informations ; </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é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ée radio<br/> <form action="action_input_radio.php" method="get"> <table border=0> <tr> <td valign="top"> Choisissez une filiè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é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é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électionner votre couleur préféré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 : analyser les données transmises depuis un formulaire ; effectuer une requête SQL vers un serveur distant ; 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è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é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ée radio</title> </head> <body> <?php $filiere = $_GET[ filiere ] ; print("vous avez sélectionné la filiè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ée checkbox</title> </head> <body> Liste des cours auxquels vous vous êtes inscrit : <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 ] $couleur="#ffffff"; for ($i=0;$i<count($cours);$i++) if ( $couleur == "#ffffff" ) $couleur="#dddddd"; else $couleur="#ffffff"; echo "<tr bgcolor=\"$couleur\">" ; echo "<td>$cours[$i]</td></tr>\n"; récupére la valeur cours transmise en mode post la couleur est le blanc boucle parcourant une à une les valeurs de 0 à nombre(cours) - 1 si la couleur est le blanc, elle est changée en gris sinon (elle est grise), elle est changée en blanc 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électionné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érées</title> </head> <body> Liste des bases géré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ées </title> </head> <body> <h1>interrogation de la base de données</h1> <form action="connexion5.php" method="get"> Entrer le code filiè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> Étudiants inscrits dans la filiè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é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