Programmation Web – Exercices pratiques (4) 1/3 Université Lumière Lyon 2 – Uni
Programmation Web – Exercices pratiques (4) 1/3 Université Lumière Lyon 2 – Université Nationale d’Économie de Kharkov Master 1 IDSM – Année 2013-2014 Programmation Web – Exercices pratiques (4) : PHP & MySQL Jérôme Darmont (http://eric.univ-lyon2.fr/~jdarmont/), 16/07/13 Base de données Soit la base de données « notes des étudiants » dont le modèle conceptuel est donné ci-dessous sous la forme d’un diagramme de classes UML. La traduction du modèle conceptuel UML en modèle logique relationnel est donnée ci-dessous. ETUDIANT (numetu, nom, prenom, datenaiss, rue, cp, ville) MATIERE (codemat, libelle, coef) EPREUVE (numepreuve, datepreuve, lieu, codemat#) NOTATION (numetu#, numepreuve#, note) Connexion à la base de données 1. Créer un script nommé connect.inc.php contenant uniquement l’affectation de valeurs aux variables listées ci-dessous. $host = "localhost"; $login = "root"; $password = ""; $dbname = "your_db"; 2. Créer le squelette d’une page web classique (en-tête, corps, etc.). La sauvegarder sous le nom ex4bd.php. 3. Inclure le fichier connect.inc.php dans ex4bd.php, puis créer un nouvel objet PDO (PHP Data Object) permettant de vous connecter à MySQL en utilisant les informations saisies dans connect.inc.php. Tester. Remarque ? Programmation Web – Exercices pratiques (4) 2/3 4. Ajouter au script ex4bd.php des instructions de gestion d’erreur (try, catch). En cas de connexion réussie, afficher un message du type « Connexion réussie. ». En cas d’erreur, afficher l’erreur standard renvoyée par la méthode getMessage(). Tester de nouveau en introduisant des erreurs dans le nom du serveur, de la base de données et dans le couple (login, mot de passe) dans le fichier connect.inc.php, puis rétablissez la connexion correctement. Création et population de table en programmation PHP 1. Toujours dans le fichier ex4bd.php, affecter à une variable la requête SQL permettant de créer la structure de la table MATIERE, sachant que la taille du code de matière est exactement 3 et que celle du libellé est au maximum de 20. Ne pas oublier de définir la clé primaire ! 2. Exécuter la requête de mise à jour ci-dessus. Tester, puis recharger votre page. Le traitement des erreurs fonctionne-t-il dans ce cas ? 3. La fonction exec renvoie FALSE en cas d’erreur. Ajouter un test permettant de détecter les erreurs de création de table. Afficher un message différent en cas de réussite ou d’échec. NB : Les booléens se testent avec l’opérateur ===. 4. Affecter à une variable la requête SQL permettant d’insérer dans la table MATIERE les données ci-dessous, puis exécuter cette requête de mise à jour. La fonction exec renvoyant le nombre de n-uplets traités, afficher un message du type « n n-uplet(s) inséré(s). ». Tester. +-------+------------+----+ |CODEMAT|LIBELLE |COEF| +-------+------------+----+ |STA |Statistique | 0.4| |INF |Informatique| 0.4| |ECO |Econométrie | 0.2| +-------+------------+----+ Création et population de table avec phpMyAdmin 1. phpMyAdmin est une interface Web écrite en PHP qui permet de gérer des bases de données MySQL. Dans la partie gauche de l’écran, cliquer sur le nom de votre base de données. Vous devez alors pouvoir consulter la structure et le contenu de la table MATIERE créée précédemment. 2. Dans le cadre « Créer une nouvelle table sur la base… », indiquer le nom de la table EPREUVE, qui comporte 4 colonnes (attributs). Cliquer sur le bouton « Exécuter » en bas à droite. 3. Spécifier les attributs de la table EPREUVE comme dans la figure ci-contre, puis cliquer sur le bouton « Sauvegarder » en bas à droite (l’utilisation de l’ascenseur vertical sera probablement nécessaire pour l’atteindre). 4. Vérifier que la table EPREUVE apparaît bien dans la liste de vos tables, puis y insérer les n- uplets listés ci-contre. NB : La saisie peut se faire deux n-uplets par deux en ne cliquant qu’une seule fois sur le bouton « Exécuter » du bas. Vérifier que l’insertion s’est correctement déroulée en activant l’onglet « Afficher ». 5. Télécharger le fichier http://eric.univ-lyon2.fr/~jdarmont/docs/web/import.sql, puis utiliser l’onglet « Importer » pour insérer les tables et les données qu’il contient dans votre base. Programmation Web – Exercices pratiques (4) 3/3 … … EPREUVE +----------+----------+----------+-------+ |NUMEPREUVE|DATEPREUVE|LIEU |CODEMAT| +----------+----------+----------+-------+ | 11031|2003-12-15|Salle 191L|STA | | 11032|2004-04-01|Amphi G |STA | | 21031|2003-10-30|Salle 191L|INF | | 21032|2004-06-01|Salle 192L|INF | | 31030|2004-06-02|Salle 05R |ECO | +----------+----------+----------+-------+ Interrogation de la base de données Résultats attendus : http://eric.univ-lyon2.fr/~jdarmont/docs/web/td6req.php?num=110 1. Créer un nouveau script PHP de nom ex4req.php. Inclure le fichier connect.inc.php dans ex4req.php, puis reproduire les instructions de connexion et de gestion d’erreur de la première question du TD. 2. Afficher dans un tableau HTML la liste des matières, avec tous leurs attributs descriptifs. Pour cela, placer la requête dans une variable et utiliser la méthode query() et un accès « foreach » à tous les résultats. 3. Afficher dans un tableau HTML la liste des notes en précisant pour chacune le nom et le prénom de l'étudiant qui l'a obtenue et le libellé de la matière concernée. 4. Afficher dans un tableau HTML la moyenne des notes (sans pondération) de chaque étudiant (indiquer le numéro, le nom et le prénom de l’étudiant). 5. Affecter à une variable quelconque un numéro d’étudiant. Répéter la question précédente, mais uniquement pour cet étudiant. 6. Afin de rendre la dernière partie du script ex4req.php dynamique (question 5), permettre la saisie du numéro d’étudiant dont on veut la moyenne dans l’URI de la page. Programmation Web – Exercices pratiques (4) 4/3 Correction <?php // connect.inc.php $host = "localhost"; $login = "darmont"; $password = "XXX"; $dbname = $login; ?> <!DOCTYPE html> <!-- ex4bd.php --> <html> <head> <meta charset="utf-8" /> <meta name="Author" content="Jérôme Darmont" /> <meta name="Keywords" content="Programmation,Web,PHP,MySQL" /> <meta name="Description" content="PHP & MySQL" /> <title>PHP & MySQL : Création de base de données</title> </head> <body> <?php include("connect.inc.php"); try { // Connexion $c = new PDO("mysql:host=$host;dbname=$dbname", $login, $password); echo "<p>Connexion réussie.</p>\n"; // Création d'une table $q = "CREATE TABLE MATIERE(codemat CHAR(3) PRIMARY KEY, libelle VARCHAR(20), coef FLOAT)"; if ($c->exec($q) === FALSE) echo "<p>Erreur pendant la création de la table.</p>\n"; else echo "<p>Table créée.</p>\n"; // Population d'une table $q = "INSERT INTO MATIERE VALUES ('STA', 'Statistique', 0.4), ('INF', 'Informatique', 0.4), ('ECO', 'Econométrie', 0.2)"; echo "<p>" . $c->exec($q) . " n-uplet(s) inséré(s).</p>\n"; } catch(PDOException $erreur) { echo "<p>Erreur : " . $erreur->getMessage() . "</p>\n"; } ?> </body> </html> <!DOCTYPE html> <!-- ex4req.php --> <html> <head> <meta charset="utf-8" /> <meta name="Author" content="Jérôme Darmont" /> <meta name="Keywords" content="Programmation,Web,PHP,MySQL" /> <meta name="Description" content="PHP & MySQL" /> <title>PHP & MySQL : Interrogation de base de données</title> Programmation Web – Exercices pratiques (4) 5/3 <style type="text/css"> table, th, td { border: 1px solid black; } table { border-collapse: collapse; } caption { font-style: italic; } </style> </head> <body> <?php include("connect.inc.php"); try { // Connexion $c = new PDO("mysql:host=$host;dbname=$dbname", $login, $password); // Liste des matières $q = "SELECT * FROM MATIERE"; $res = $c->query($q); echo "<table>\n <caption>Liste des matières</caption>\n"; echo "<tr> <th>codemat</th> <th>libelle</th> <th>coef</th> </tr>\n"; foreach ($res as $l) echo "<tr> <td>" . $l["codemat"] . "</td> <td>" . $l["libelle"] . "</td> <td>" . $l["coef"] . "</td> </tr>\n"; echo "</table>\n\n"; // Liste des notes $q = "SELECT nom, prenom, note, libelle FROM ETUDIANT, NOTATION, EPREUVE, MATIERE WHERE ETUDIANT.numetu = NOTATION.numetu AND NOTATION.numepreuve = EPREUVE.numepreuve AND EPREUVE.codemat = MATIERE.codemat"; $res = $c->query($q); echo "<table>\n <caption>Liste des notes</caption>\n"; echo "<tr> <th>nom</th> <th>prenom</th> <th>note</th> <th>libelle</th> </tr>\n"; foreach ($res as $l) echo "<tr> <td>" . $l["nom"] . "</td> <td>" . $l["prenom"] . "</td> <td>" . $l["note"] . "</td> <td>" . $l["libelle"] . "</td> </tr>\n"; echo "</table>\n\n"; // Moyenne par étudiant $q = "SELECT e.numetu, nom, prenom, AVG(note) moyenne FROM ETUDIANT e, NOTATION n WHERE e.numetu = n.numetu GROUP BY nom, prenom"; $res = $c->query($q); echo "<table>\n <caption>Moyenne par étudiant</caption>\n"; echo "<tr> <th>numetu</th> <th>nom</th> <th>prenom</th> <th>moyenne</th> </tr>\n"; foreach ($res as $l) echo "<tr> <td>" . $l["numetu"] . "</td> <td>" . $l["nom"] . "</td> <td>" . $l["prenom"] . "</td> <td>" . $l["moyenne"] . "</td> </tr>\n"; echo "</table>\n\n"; // Moyenne d'un étudiant //$num = 110; // question 5 $num = $_GET["num"]; // question 6 Programmation Web – Exercices pratiques (4) 6/3 $q = "SELECT e.numetu, nom, prenom, AVG(note) moyenne FROM ETUDIANT e, NOTATION n WHERE e.numetu = n.numetu AND e.numetu = $num GROUP BY nom, prenom"; $res = $c->query($q); echo "<table>\n <caption>Moyenne d'un étudiant</caption>\n"; echo "<tr> <th>numetu</th> <th>nom</th> <th>prenom</th> <th>moyenne</th> </tr>\n"; foreach ($res as $l) echo "<tr> <td>" . $l["numetu"] . "</td> <td>" . $l["nom"] . "</td> <td>" . $l["prenom"] . "</td> <td>" . $l["moyenne"] . "</td> </tr>\n"; echo "</table>\n\n"; } catch(PDOException $erreur) { echo "<p>Erreur : " . $erreur->getMessage() . "</p>\n"; } ?> </body> </html> uploads/S4/ m1idsm-progweb-ex4-302 1 .pdf
Documents similaires










-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 10, 2021
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.0787MB