TP 1 Master ARM

publicité
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'
) ");
Téléchargement