Le cas pratique
Dans phpMyAdmin créer la BD "personnel".
- Créer la table "professeur" regroupant les informations suivantes: nom, prénom,
date de naissance et code postal de résidence
- Créer la table "diplome" regroupant les intitulés des diplômes
On précise qu'un professeur peut avoir plusieurs diplômes et au moins 1, un diplôme peut concerner 0 ou plusieurs professeurs.
- Réaliser les MCD, MLD, MPD
- Créer les tables "professeur" et "diplome".
- Etablir les formulaires permettant d'enrgistrer des professeurs et des diplômes.
Les MCD, MLD et MPD
La relation entre les 2 entités du MCD est de type (1-1)(1-n), dans ce cas, pour le MLD et le MPD, la relation disparaît et la clé du côté
(1-n) est dupliquée du côté (1-1).
Le MCD de l'application
Le MLD de l'application
Pour passer du MCD au MCD l'association persiste, elle est matérialisée par une table dont la clé est la concaténation des clefs mises en relation.
professeur: id_pro, nom_pro, preno_pro, daten_pro
diplome: id_dip, nom_dip
possede: id_pro, id_dip
Le MPD de l'application
Voici l'aperçu de la structure des 3 tables.
Structure de la table professeur
id_pro |
nom_pro |
preno_pro |
daten_pro |
TINY,unsigned, primary,AI |
VARCHAR(60) |
VARCHAR(30) |
DATE |
Structure de la table diplome
id_dip |
nom_dip |
MEDIUMINT,unsigned,primary,AI |
VARCHAR(100) |
Structure de la table possede
id_pro |
id_dip |
TINY,primary |
MEDIUMINT, primary |
Création et exécution de la requête sql
Dans quel ordre allons-nous procéder?
2 fichiers sont nécessaires, un pour la table diplome et un pour les tables professeur et possede.
On va d'abord remplir la table diplome,
ensuite on remplira les tables professeur et possede.
Dans le formulaire permettant de remplir les tables professeur et possede on placera une liste déroulante permettant de choisir les diplômes des professeurs,
cette liste sera remplie dynamiquement à partir de la table diplome.
Remplir la table diplome
Nous allons éviter le test de première ouverture pour ne pas encombrer le code.
- on récupère le tableau $_POST
- connexion à MySQL et à la base de données personnel
- on établit la requête d'insertion avec la commande INSERT, cette requête
est une simple chaîne de caractères affectée à une variable
- on exécute la requête avec exec(), le résultat est affecté à une variable, celle-ci sera affectée avec true ou false.
Exemple
<h2>Enregistrer un diplôme</h2>
<form action="indip.php" method="post">
Intitulé : <input type="text" name="nom"><br>
<input type="submit" value="Enregistrer">
</form>
<?php
//Récupération du formulaire
$nom=$_POST['nom'];
//Connexion à MySQL et à la BD
$base="1-n-1-n";
include("connexion.php");
//On établt la requête
$req="insert into diplome(id_dip,nom_dip)values(NULL,'$nom')";
//On applique la requête
$reqex=$con->exec($req);
//On ferme la connexion en affectant NULL à l'identifiant de connexion
$con=NULL;
?>
Remplir les tables "professeur" et "possede"
Nous allons éviter le test de première ouverture pour ne pas encombrer le code.
- on utilise la table diplome pour remplir dynamiquement une liste déroulante permettant de choisir le ou les diplômes
du professeur que l'on encode
- on récupère le tableau $_POST
- connexion à MySQL et à la base de données personnel
- on établit la requête d'insertion du professeur avec la commande INSERT
- on exécute la requête avec exec(), le résultat est affecté à une variable, celle-ci sera affectée avec true ou false.
Pour remplir la table
possede il faut récupérer la clé du professeur enregistré et les clés de ses diplômes.
- on récupère la clé du professeur avec la méthode lastInsertId(), cette méthode renvoie la dernière clé générée à partir de l'identifiant de connexion
- on fait une boucle for sur le tableau contenant les diplômes du dernier professeur inséré
- à l'intérieur de la boucle on génère une requête insert vers la table >possede et on applique la requête avec exec()
Exemple
<h2>Enregistrer un professeur et une ligne dans la table possede</h2>
<form action="inprof.php" method="post">
Nom : <input type="text" name="nom"><br>
Prénom : <input type="text" name="preno"><br>
Date de naissance : <input type="date" name="daten"><br>
<?php
$base="1-n-1-n";
include("connexion.php");
$req="select * from diplome";
$reqex=$con->query($req);
?>
<select name="diplo[]" multiple>
<?php
while($ligne=$reqex->fetch(PDO::FETCH_ASSOC)) {
echo("<option value=$ligne[id_dip]>$ligne[nom_dip]</option>");
}
?>
</select>
<input type="submit" value="Enregistrer">
</form>
<?php
$nom=$_POST['nom'];
$preno=$_POST['preno'];
$daten=$_POST['daten'];
$diplo=$_POST['diplo'];
$req="insert into professeur(id_pro,nom_pro,preno_pro,daten_pro)values(NULL,'$nom','$preno','$daten')";
$reqex=$con->exec($req);
$derni=$con->lastInsertId();
for($cpt=0;$cpt<count($diplo);$cpt++) {
//on établit la requête d'insertion dans la table possede
$req="insert into possede (id_pro,id_dip) values('$derni','$diplo[$cpt]')";
$reqex=$con->exec($req);
}
$con=NULL;
?>