TP 4 Master CTN A création du schéma de la base de données. phpMyAdmin est un outil écrit en php pour manipuler le système de gestion de base de données (SGBD) Mysql, il est accessible via EasyPhp à une des adresses suivantes : http://127.0.0.1:8887/modules/ ou http://127.0.0.1:8887/home/mysql/ ou http://127.0.0.1:8887/phpmyadmin/ Une base de données regroupe un ensemble de tables de données (équivalent au classeur Excel) Une table de données regroupe et structure un type d'information (équivalent à une feuille Excel) - Cas pratique, une liste d'élève du Master CTN qui dispose de plusieurs adresses email : Première table listant les élèves: (nom de la table eleve): avec les champs id, nom, prenom, promotion : id 1 2 3 nom Dupond Duval Smith prenom Alfonse Joseph John promotion 2008 2008 2009 Nota : id est le champ clé de la table, il permet d’identifier de manière unique chaque enregistrement (VF : chaque ligne) Seconde table listant leurs adresses emails: (nom de la table email) avec les champs id, mail, id_eleve id 1 2 3 mail [email protected] [email protected] [email protected] id_eleve 1 1 3 Nota : id_eleve et le champ clé étrangère car il est en liaison avec le champ id de la table eleve Nota 2 : Dans notre exemple les champs (les colonnes) id de la table élève et de la table email sont prévues pour être automatiquement incrémenté, identifiant chaque ligne de manière unique. Dans l’outil phpmyadmin : • • Créer une nouvelle base de données appelé base_contact • Onglet "Bases de données" > Créer une base de données Dans la partie gauche de l'interface de phpMyAdmin, choisir cette base de données • Créer une nouvelle table appelée eleve (sans accent) avec 4 colonnes • id est un IDentifiant de type INT indiquant que l'on va stocker des nombres entiers, il faut par contre utiliser la barre de défilement horizontal pour trouver l'information A_I (auto incrémentation) pour que ce champ soit automatiquement incrémenté. Ce champ est appelé une clé car il est unique pour chaque enregistrement (ligne) de la table. • nom et prenom sont des champs pouvant recevoir tout type de texte (nombre, symbole, lettres, etc.) sur une seule ligne en quantité VARiable de 0 à 50 CARactère (en anglais Character) VARCHAR • promotion va être indiqué en tant que CHAR (caractère) de taille fixe 4, il faudra forcément avoir 4 symboles 2004, 2005, 2006, 2007. Impossible d'avoir 98,99,00,01,02 • Appuyer sur le bouton "Sauvegarder" • Insérer des données dans cette table via le bouton "Insérer" en s'inspirant du cas pratique indiqué au dessus : • Faite une dizaine d’enregistrement dans la table eleve: • Créer une nouvelle table appelée email (sans accent) avec 3 colonnes • id est un IDentifiant de type INT indiquant que l'on va stocker des nombres entiers, il faut par contre utiliser la barre de défilement horizontal pour trouver l'information A_I (auto incrémentation) pour que ce champ soit automatiquement incrémenté. Ce champ est appelé une clé car il est unique pour chaque enregistrement (ligne) de la table. • mail est un champs pouvant recevoir tout type de texte (nombre, symbole, lettres, etc.) sur une seule ligne en quantité VARiable de 0 à 100 CARactère (en anglais Character) VARCHAR • id_eleve est de type INT mais pas A_I car il fait référence à la clé de la table eleve. id_eleve est une clé étrangère liant la table eleve à la table email. • Insérer des données dans cette table via le bouton "Insérer" en s'inspirant du cas pratique indiqué au dessus • Il faudrait disposer au final d'un élève avec plusieurs adresses email, un élève avec une seule adresse email et un élève sans aucune adresse email. B Interrogation en SQL. Ouvrer l’onglet SQL en choisissant la base de données base_contact : • Essayez la requête suivante et expliquez son effet: • SELECT prenom,nom FROM eleve ; • • Essayez la requête suivante et expliquez son effet : SELECT * FROM eleve ; • • Essayez la requête suivante et expliquez son effet: SELECT id, nom FROM eleve limit 3,2; • • Essayez la requête suivante et expliquez son effet: SELECT id, nom FROM eleve limit 1,2; • • Essayez la requête suivante et expliquez son effet: SELECT * FROM eleve WHERE Nom = 'Dupond' ; • • Essayez la requête suivante et expliquez son effet: SELECT * FROM eleve WHERE Promotion = '2008' ; • • Essayez la requête suivante et expliquez son effet: SELECT * FROM eleve WHERE Promotion = '2008' AND Nom ='Dupond' ; • • COUNT permet de compter le nombre de lignes incluses dans une table, essayer l’exemple : select count(*) FROM eleve; • Afficher le nombre d’élèves dont le nom commence par D : • select count(*) FROM eleve WHERE nom LIKE 'D%'; • • Afficher (que) les élèves qui ont des emails SELECT nom,prenom,mail FROM eleve, email WHERE eleve.id=email.id_eleve; • • Insérer un nouvel élève INSERT INTO eleve VALUES(NULL, 'Gineau', 'Nicolas', '2010'); • • Supprimer un élève DELETE FROM eleve WHERE nom='Gineau'; • • Modifier (mettre à jour) le nom d'un élève UPDATE eleve SET nom='Dupont' WHERE nom= 'Dupond' • • Afficher le nombre d'emails par élève SELECT id_eleve, mail, count(mail) FROM email GROUP BY id_eleve • • Faire et expliquer SELECT * FROM eleve, email WHERE eleve.id = email.id_eleve • • Faire et expliquer SELECT * FROM eleve LEFT JOIN email ON eleve.id = email.id_eleve • Faire une requête SQL qui affiche le nom de l'élève et une de ses adresses emails sans aucune autre information technique • Faire une requête SQL qui affiche le nom de l'élève et le nombre de ses adresses emails sans aucune autre information technique C Création d’un utilisateur de la base de données Pour accéder à une base de données, il faut disposer d’un compte utilisateur qui dispose de droit sur cette base de données. La création d’un nouvel utilisateur se fait via l’onglet Privilèges ; parfois renommé Utilisateur dans les dernières versions de phpmyadmin. Utiliser le bouton « Ajouter un utilisateur » Dans la nouvelle page, il faut indiquer un nom d’utilisateur par exemple user_contact, le client est localhost, le mot de passe peut être fabriqué avec le bouton « générer » Cochez la case « Donner les privilèges passepartout (utilisateur\_%) » mais habituellement, l’option « Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base » est utilisée pour fabriquer un utilisateur et une base de données, l’utilisateur ayant tout les droits sur cette base de donnée. La création de l’utilisateur se fait avec le bouton « Exécuter » qui se trouve tout en base de la page. D Utilisation d’une page PHP qui interroge la base de données La création d’une nouvelle page PHP permet d’interroger la base de données précédemment créé via l’utilisateur de la base de données « user_contact » <html> <body> <?php $username="user_contact"; $password="VqQEK98bBSGCQ5b2"; $database="base_contact"; mysql_connect( "localhost" ,$username,$password); @mysql_select_db($database) or die( "Unable to select database"); $query = "select nom,prenom from eleve"; $result = mysql_query($query); while ($row = mysql_fetch_array( $result , MYSQL_ASSOC)) { ?> <p> <?php echo( $row["nom"] ); ?> </p> <?php } mysql_close(); ?> </body> </html> 4 fonctions sont utilisées pour accede à mysql - mysql_connect ouvre une connexion avec le logiciel de base de donnés (le SGBD) - mysql_select_db permet de choisir une base de données parmi plusieurs - mysql_query permet de poser une question en SQL à la base de données - mysql_close permet de fermer la connexion avec le logiciel de base de données Pourquoi le prénom est le seul affiché ? Comment corriger cette page pour afficher le prénom et la promotion de chaque élève ? Sachant que la requête SQL suivante permet de créer un nouvel enregistrement (une nouvelle ligne) dans la table de la base de données, comment faire pour créer un nouvel élève depuis un formulaire: : $result = mysql_query("insert into eleve( nom, prenom, promotion) values ('Doe' , 'John' , '2014' ) ");