Alimentation et interrogation de la base de données depuis PHP

Transcription

Alimentation et interrogation de la base de données depuis PHP
Alimentation et interrogation de la
base de données depuis PHP
Jean-Philippe PERNIN
Université Stendhal
Département Informatique Pédagogique
Bureau I109
e-mail : [email protected]
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Déroulement des séances restantes
• Séance 5 : 6 novembre 2008
– Partie 1 : conception de base de données
– Partie 2 : manipulation de MySQL
• Création des tables
• Découverte des requetes
• Projet : Définition des tables et des relations
• Séance 6: 13 novembre 2008
• Création des tables et Expression de requetes en PHP
• Projet : Cahier des charges
• Séance 7: 20 novembre 2008
• Developpement du projet
• Séance 8: 27 novembre 2008
• Developpement du projet
• Séance 9: 4 décembre 2008 (2 heures)
– 30 mn : petit QCM
– Présentation des projets (20mn par projet).
1
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Rappel : creation de la base
• Trois étapes pour créer les bases :
– Etape 1 : Définition du modèle relationnel
– Etape 2 : Traduction en tables
– Etape 3 : Codage de création des tables en langage
SQL
2
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Etape 1 : définition du modèle
film
id_film : entier
titre : texte
date_sortie : date
pays : texte (dans une liste)
genre : texte (dans une liste)
duree : un entier en minutes
annee_production : entier
1
ecritPar
ecrit
n
metEnScene
tourneDans
n
acteur
id_acteur : entier
nom : texte
prenom : texte
date_naissance : date
m
estDistribuePar
distribue
n
1
estIllustrePar
illustre
1
1
Exercice : Créer votre propre modèle ER
realisateur
id_realisateur : entier
nom : texte
prenom : texte
date_naissance : date
distributeur
id_distributeur : entier
nom : texte
Affiche
id_affiche : entier
Titre : affiche
nomFichier : texte
3
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
4
Etape 2 : système de tables constituant la base de données
flim
id_film
titre
Ref_
date_sorti
annee_
Ref_
pays genre duree
Realisateu
e
production
distributeur
r
Realisateur
Ref_
affiche
id_
Realisateur
nom
prenom
Acteur
film_acteur
Id_film_acteur
ref_flim
date_
naissance
ref_acteur
id_
acteur
nom
prenom
date_
naissance
distributeur
Id_distrib
uteur
nom
affiche
id_affiche
titre
nomfichier
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
5
Etape 3 : création de la base à l'aide d'un fichier de
commande SQL (à exécuter dans EsayPHP MyAdmin)
CREATE TABLE acteur (
id_acteur int(11) NOT NULL auto_increment,
nom varchar(64) NOT NULL,
prenom varchar(64) NOT NULL,
date_naissance date NOT NULL,
PRIMARY KEY (id_acteur)
) ;
CREATE TABLE affiche (
id_affiche int(11) NOT NULL auto_increment,
titre varchar(200) NOT NULL,
nom_fichier varchar(256) NOT NULL,
PRIMARY KEY (id_affiche)
) ;
DROP TABLE IF EXISTS acteur ;
CREATE TABLE acteur (
id_acteur int(11) NOT NULL auto_increment,
nom varchar(64) NOT NULL,
CREATE TABLE distributeur (
id_distributeur int(11) NOT NULL auto_increment,
nom varchar(200) NOT NULL,
PRIMARY KEY (id_distributeur)
) ;
prenom varchar(64) NOT NULL,
CREATE TABLE film (
id_film int(11) NOT NULL auto_increment,
titre varchar(200) NOT NULL,
date_sortie date NOT NULL,
pays varchar(64) NOT NULL,
genre varchar(64) NOT NULL,
duree time NOT NULL,
annee_production int(11) NOT NULL,
ref_realisateur int(11) NOT NULL,
ref_distributeur int(11) NOT NULL,
ref_affiche int(11) NOT NULL,
PRIMARY KEY (id_film),
KEY ref_realisateur (ref_realisateur),
KEY ref_distributeur (ref_distributeur),
KEY ref_affiche (ref_affiche)
) ;
PRIMARY KEY
CREATE TABLE film_acteur (
id_film_acteur int(11) NOT NULL auto_increment,
ref_film int(11) default NULL,
date_naissance date NOT NULL,
) ;
(id_acteur)
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
6
Etape 3 : Créer la base de données en SQL avec phpMyAdmin
•
•
Créer une nouvelle base de données vide
Définir la structure et les enregistrements des tables avec la commande Importer :
Alimenter la base de données
Jean-Philippe PERNIN
Université Stendhal
Département Informatique Pédagogique
Bureau I109
e-mail : [email protected]
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Trois possibilités pour alimenter la base
• Dans Easy PHP :
– Par exécution d'un fichier de requêtes SQL
– Par importation d'un fichier CSV
• Depuis une page web
– En incluant des requetes SQL dans du code PHP
8
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Méthode 1 :
Exemple de fichier SQL permettant d'alimenter la base
INSERT INTO acteur (id_acteur, nom, prenom,
date_naissance) VALUES
(1, 'Frot', 'Catherine', '1957-05-01'),
(2, 'Dussollier', 'André', '1946-02-17'),
(3, 'Cassel', 'Vincent', '1966-11-23'),
(4, 'De France', 'Cécile', '1975-07-17'),
(5, 'Merad', 'Kad', '1964-03-27'),
(6, 'Boon', 'Dany', '1966-06-26'),
(7, 'Pitt', 'Brad', '1963-12-18'),
(8, 'Blanchett', 'Cate', '1969-05-14'),
(9, 'Johansson', 'Scarlett', '1984-11-22'),
(10, 'Cruz', 'Penelope', '1974-04-28'),
(11, 'Mortimer', 'Emily', '1971-12-01'),
(12, 'Allen', 'Woody', '1935-12-01');
INSERT INTO distributeur (id_distributeur,
(1, 'Mars Distribution'),
(2, 'Pathé Distribution'),
(3, 'StudioCanal'),
(4, 'TFM Distribution'),
(5, 'UGC'),
(6, 'Warner Bros. France');
INSERT INTO acteur
(id_acteur, nom, prenom, date_naissance)
VALUES
(1, 'Frot', 'Catherine', '1957-05-01'),
(2, 'Dussollier', 'André', '1946-02-17'),
(3, 'Cassel', 'Vincent', '1966-11-23'),
(4, 'De France', 'Cécile', '1975-07-17'),
(5, 'Merad', 'Kad', '1964-03-27'),
(6, 'Boon', 'Dany', '1966-06-26'),
(7, 'Pitt', 'Brad', '1963-12-18'),
(8,VALUES
'Blanchett', 'Cate', '1969-05-14'),
nom)
(9, 'Johansson', 'Scarlett', '1984-11-22'),
(10, 'Cruz', 'Penelope', '1974-04-28'),
(11, 'Mortimer', 'Emily', '1971-12-01'),
(12, 'Allen', 'Woody', '1935-12-01');
INSERT INTO film (id_film, titre, date_sortie, pays,
genre, duree, annee_production, ref_realisateur,
ref_distributeur, ref_affiche) VALUES
(5, 'Vicky Cristina Barcelona', '2008-10-08', 'EtatsUnis', 'Comédie', '01:37:00', 2008, 5, 6, 5),
(4, 'Babel', '2006-11-15', 'Mexique', 'Drame',
'02:15:00', 2005, 4, 1, 4),
(3, 'Bienvenue chez les Ch''tis', '2008-02-27', 'France',
'Comédie', '01:46:00', 2008, 3, 2, 3),
(2, 'Mesrine : L''Instinct de mort', '2008-10-22',
9
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
10
Méthode 2 : par fichier CSV
Qu'est ce qu'un fichier CSV ?
•
http://fr.wikipedia.org/wiki/Comma-separated_values
•
Comma-separated values (CSV) est un format informatique ouvert représentant des
données tabulaires sous forme de « valeurs séparées par des virgules ».
Un fichier CSV est un fichier texte (par opposition aux formats dit « binaires »).
Chaque ligne correspond à une rangée du tableau et les cellules d'une même rangée
sont séparées par une virgule.
Une ligne est une suite ordonnée de caractères terminée par un caractère de fin de
ligne (line break – CRLF), la dernière ligne pouvant être exempt de ce dernier.
•
•
Exemple :
id_film;titre;date_sortie;pays;genre;duree;annee_production;ref_realisateur;ref_distributeur;ref_affiche
1; "Le Crime est notre affaire"; 2008-10-15; France; Comédie; 01:49:00; 2008; ; ;
2; "Mesrine : L'Instinct de mort"; 2008-10-22; France; Policier; 01:53:00; 2008; ; ;
REMARQUE 1 : le format de codage des caractères doit être compatible avec SQL (UTF8)
REMARQUE 2 : les chaines de caractères doivent être clariement délimitées (par exemple par guillemets))
REMARQUE 3 : les caractères "dangereux" (,;) doivent être échappés (précédés de \)
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Le principe
• Phase 1 : Edition du texte avec un logiciel simple
plusieurs possibilités :
- notepad, notepad++,
- Édition pas très aisée
– OpenOffice calc
• Edition plus aisée (attention au format de sortie pour Excel)
– Excel
• Idem Calc mais possibles problèmes de formats (UTF8)
• Phase 2
– Sauvegarde du fichier sous format CSV (UTF8)
• Phase 3
– Importation de toutes les données dans phpMyAdmin d'une table
complète
11
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Exemple d'importation
Fichier film.csv
"id_acteur";"nom";"Prenom";"date_naissance"
1;"Frot";"Catherine";1957-05-01
2;"Dussollier";"André";1946-02-17
3;"Cassel";"Vincent";1966-11-23
4;"De France";"Cécile";1975-07-17
5;"Merad";"Kad";1964-03-27
6;"Boon";"Dany";1966-06-26
7;"Pitt";"Brad";1963-12-18
8;"Blanchett";"Cate";1969-05-14
9;"Johansson";"Scarlett";1984-11-22
10;"Cruz";"Penelope";1974-04-28
11;"Mortimer";"Emily";1971-12-01
12;"Allen";"Woody";1935-12-01
Exercice : Importez vos propres données dans les tables que vous avez créées
12
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Méthode 3 : exécution d'un code SQL dans une page PHP
// SE CONNECTER A UN SERVEUR PHP
mysql_connect("localhost", "root", ""); // Connexion à MySQL
// CHOISIR UNE BASE SUR LE SERVEUR
mysql_select_db("cinema"); //
// EXPRIMER UNE REQUETE EN SQL
$sql = 'SELECT DISTINCT acteur.prenom, acteur.nom
FROM film, acteur, film_acteur, realisateur
WHERE ((film_acteur.ref_film=film.id_film) AND
(film_acteur.ref_acteur=acteur.id_acteur))'
. ' AND (film.ref_realisateur=realisateur.id_realisateur)'
. ' AND (film.genre="comedie") '
. ' AND (realisateur.prenom="woody") '
. ' AND (realisateur.nom="allen") '
. ' ORDER BY acteur.nom'
. ' ';
// ENVOYER LA REQUETE ET RECUPERER LA REPONSE
$reponse = mysql_query($sql);
// LES REPONSES SONT STOCKEES DANS UN TABLEAU OU CHAQUE LIGNE EST UN
ENREGISTREMENT
while ($enregistrement = mysql_fetch_array($reponse, MYSQL_ASSOC) ) {
print("<br>".$enregistrement['prenom']." ".$enregistrement['nom']);
}
13
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
14
Requete SQL avec formulaire (champ variable)
<html>
<body>
<!-- DEBUT DU FORMULAIRE -->
<form action="traiterRequeteActeur.php" method="post">
Quel acteur a tourné pour
<input name="nomActeur" type="text" maxlength = "64" />
<br>
<input name="valider" value="Chercher" type="submit" >
</form>
</body>
<?php
</html>
$nomActeur= $_REQUEST["nomActeur"];
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("cinema"); //
$sql = 'SELECT DISTINCT acteur.prenom, acteur.nom
FROM film, acteur, film_acteur, realisateur
WHERE ((film_acteur.ref_film=film.id_film) AND
(film_acteur.ref_acteur=acteur.id_acteur))'
. ' AND (film.ref_realisateur=realisateur.id_realisateur)'
. ' AND (film.genre="comedie") '
. ' AND (realisateur.nom="'.$nomActeur.'") '
. ' ORDER BY acteur.nom'
. ' ';
$reponse = mysql_query($sql);
while ($enregistrement = mysql_fetch_array($reponse, MYSQL_ASSOC) ) {
print("<br>".$enregistrement['prenom']."
".$enregistrement['nom']);
}
?>
Copyright novembre 08 Jean-Philippe Pernin DIP Université Stendhal Grenoble 3
Le processus en résumé
1.
2.
3.
4.
Concevoir la base de données
Créer la base de données vide (par requete SQL)
Alimenter la base (par CSV ou par requete SQL)
Pour chaque requête à faire depuis une page PHP
–
Dans PHP My Admin
1. Mettre au point la requête (onglet SQL )
2. Créer automatiquement le code PHP (bouton Créer source PHP ]
–
Avec Notepad++
1. Créer les formulaires de saisie
2. Créer un fichier PHP pour chacun des formulaires
3. Adapter le code PHP créé automatiquement en insérant les variables du
formulaire
5. Améliorer la mise en page HTML avec des CSS
15