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