td06 - exercices

This commit is contained in:
jmd 2025-02-18 08:42:18 +01:00
commit f31fb975ac
6 changed files with 618 additions and 0 deletions

68
afficheDepartements.php Normal file
View File

@ -0,0 +1,68 @@
<?php
/**
* PARAMETRES DE CONNEXION A LA BASE DE DONNEES
*/
$ip = 'localhost';
$user = 'phpapp';
$pass = 'myphp';
$database = 'universite';
// Définition de la source des données pour PDO
$dsn = "mysql:host=$ip;dbname=$database;charset=utf8mb4";
// Création de l'objet $dbh, de type PDO, qui est la ressource d'accès à la base
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
die("Erreur de connexion : ".$e->getMessage());
}
?>
<h1>Les différents départements : </h1>
<ul>
<?php
$query= /** ICI, écrire la requête SQL permettant d'obtenir les différents départements d'enseignement, renseignés dans la table domain */
// Exécution d'une requête SQL
$stmtDomains = $dbh->query($query);
// Les résultats de la requête sont parcourus un par un, sous forme d'un tableau associatif $row
while (($row = $stmtDomains->fetch())) {
?>
<!-- A chaque département, un lien hypertexte permets d'envoyer à la page afficheMatieres.php le domaine d'enseignement
avec la méthode "GET" -->
<li><?=$row["dDomaine"]?> : <a href='afficheMatieres.php?domain=<?=$row["dDomaine"]?>'>Voir les enseignements</a></li>
<?php
}
?>
</ul>
<br>
<br>
<a href="index.php">Retour à l'accueil</a>
<?php
// Fermeture de la connexion
$stmtDomains = null;
$pdoStmt = null;
$dbh = null;
// Petite aide au développement
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<h3>SUIVI DES VARIABLES POUR DEVELOPPEMENT : </h3>";
echo "<h4>GLOBALS : </h4>";
echo '<pre>';
print_r($GLOBALS);

103
afficheEtudiants.php Normal file
View File

@ -0,0 +1,103 @@
<?php
/**
* PARAMETRES DE CONNEXION A LA BASE DE DONNEES
*/
$ip = 'localhost';
$user = 'phpapp';
$pass = 'myphp';
$database = 'universite';
// Définition de la source des données pour PDO
$dsn = "mysql:host=$ip;dbname=$database;charset=utf8mb4";
// Création de l'objet $dbh, de type PDO, qui est la ressource d'accès à la base
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
die("Erreur de connexion : ".$e->getMessage());
}
/**
* Le formulaire ci-dessous propose deux choix : les étudiants actuels, ou les anciens élèves.
* Le but est de lier ce choix à la colonne "eDiplome" de la table "etudiant"
* Si la valeur renseignée est O -> l'étudiant est diplômé et est un ancien élève
* Si la valeur renseignée est N -> l'étudiant est en cours d'études
*
* Il renvoie sur LA PAGE COURANTE
*/
?>
<form action="afficheEtudiants.php" method="GET">
<legend>Quels étudiants afficher ?</legend>
<select name="diplome" id="diplome">
<option value="N">Etudiants actuels</option>
<option value="O">Anciens élèves</option>
</select>
<input type="submit" value="Valider" />
</form>
<table>
<thead>
<td><b>Nom</b></td>
<td><b>Prénom</b></td>
<td><b>Email</b></td>
</thead>
<?php
// Il est vérifié que le diplome a bien été fourni à la page.
if($_GET['diplome'] != null) {
/**
* Ici, votre code PHP pour extraire de la base de données les informations suivantes :
* Pour chaque étudiant, Nom, Prénom et Email
* En se basant sur le fait que les étudiants soient déjà diplomés (eDiplome='O') ou non (eDiplome='N')
*/
/**
* Ici, votre code PHP pour parcourir un à un les résultats (boucle while...)
*/
?>
<!-- ICI, du code HTML correspondant à une ligne du tableau <tr> et aux différentes cases à afficher <td> -->
<?php
/**
* Ici, pensez à refermer votre boucle...
*/
?>
</table>
<br>
<br>
<a href="index.php">Retour à l'accueil</a>
<?php
}
// Fermeture de la connexion
$pdoStmt = null;
$dbh = null;
// Petite aide au développement
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<h3>SUIVI DES VARIABLES POUR DEVELOPPEMENT : </h3>";
echo "<h4>GLOBALS : </h4>";
echo '<pre>';
print_r($GLOBALS);

96
afficheFormations.php Normal file
View File

@ -0,0 +1,96 @@
<?php
/**
* PARAMETRES DE CONNEXION A LA BASE DE DONNEES
*/
$ip = 'localhost';
$user = 'phpapp';
$pass = 'myphp';
$database = 'universite';
// Définition de la source des données pour PDO
$dsn = "mysql:host=$ip;dbname=$database;charset=utf8mb4";
// Création de l'objet $dbh, de type PDO, qui est la ressource d'accès à la base
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
die("Erreur de connexion : ".$e->getMessage());
}
?>
<h1>Formations proposées : </h1>
<?php
// Exécution d'une requête SQL
$stmtFormations = $dbh->query('SELECT fSigle, fNom FROM formation');
// Les résultats de la requête sont parcourus un par un, sous forme d'un tableau associatif $row
while (($row = $stmtFormations->fetch())) {
?>
<!-- On accède à chaque champ obtenu par son identifiant dans la abse-->
<h2>Contenu de la formation : <?=$row['fNom']?></h2>
<table>
<thead>
<td><b>Matière</b></td>
<td><b>Volume horaire</b></td>
<td><b>Coefficient</b></td>
<td><b>Description de l'enseignement</b></td>
</thead>
<?php
// Ecriture de la requête SQL
$query = 'SELECT cVolHoraire, cCoeff, mNom, mDescription
FROM contenu INNER JOIN matiere ON cMatiere = mSigle
WHERE cFormation = "'.$row['fSigle'].'"';
// Exécution de la requête
$stmtContenus = $dbh->query($query);
// Les résultats sont parcourus
while($rowContenu = $stmtContenus->fetch()){
?>
<!-- Les résultats sont affichés dans un tableau -->
<tr>
<td><?=$rowContenu['mNom'] ?></td>
<td><?=$rowContenu['cVolHoraire']." H" ?></td>
<td><?=$rowContenu['cCoeff'] ?></td>
<td><?=$rowContenu['mDescription'] ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
<br>
<br>
<a href="index.php">Retour à l'accueil</a>
<?php
// Fermeture de la connexion
$stmtFormations = null;
$pdoStmt = null;
$dbh = null;
// Petite aide au développement
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<h3>SUIVI DES VARIABLES POUR DEVELOPPEMENT : </h3>";
echo "<h4>GLOBALS : </h4>";
echo '<pre>';
print_r($GLOBALS);

90
afficheMatieres.php Normal file
View File

@ -0,0 +1,90 @@
<?php
/**
* PARAMETRES DE CONNEXION A LA BASE DE DONNEES
*/
$ip = 'localhost';
$user = 'phpapp';
$pass = 'myphp';
$database = 'universite';
// Définition de la source des données pour PDO
$dsn = "mysql:host=$ip;dbname=$database;charset=utf8mb4";
// Création de l'objet $dbh, de type PDO, qui est la ressource d'accès à la base
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
die("Erreur de connexion : ".$e->getMessage());
}
// Il est vérifié que le domaine a bien été fourni à la page.
if($_GET['domain'] != null) {
?>
<table>
<thead>
<td><b>Intitulé</b></td>
<td><b>Description</b></td>
</thead>
<?php
/**
* ICI, écrire une requête SQL permettant d'obtenir les informations suivantes de la table matiere :
* mNom, mDescription
* Cette requête ne doit retourner que les entrées correspondant au domaine obtenu dans $_GET
*/
/**
* EXECUTER ensuite la requête et stocker le résultat dans $stmtMatieres
*/
// Les résultats de la requête sont parcourus un par un, sous forme d'un tableau associatif $row
while ($row = $stmtMatieres->fetch()) {
?>
<tr>
<td><!-- Afficher ICI le nom de la matière --></td>
<td><!-- Afficher ICI sa description --></td>
</tr>
<?php
}
?>
</table>
<?php
}
else{
header('Location : index.php');
}
?>
<br>
<br>
<a href="index.php">Retour à l'accueil</a>
<?php
// Fermeture de la connexion
$stmtDomains = null;
$pdoStmt = null;
$dbh = null;
// Petite aide au développement
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<h3>SUIVI DES VARIABLES POUR DEVELOPPEMENT : </h3>";
echo "<h4>GLOBALS : </h4>";
echo '<pre>';
print_r($GLOBALS);

21
index.php Normal file
View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index TD04</title>
</head>
<body>
<h1>TD06 : Base de données universitaire</h1>
<br>
<a href="afficheEtudiants.php">Tableau des étudiants inscrits</a>
<br>
<br>
<a href="afficheFormations.php">Formations disponibles</a>
<br>
<br>
<a href="afficheDepartements.php">Les différents départements</a>
</body>
</html>

240
universite.sql Normal file
View File

@ -0,0 +1,240 @@
-- phpMyAdmin SQL Dump
-- version 5.2.1deb1
-- https://www.phpmyadmin.net/
--
-- Hôte : localhost:3306
-- Généré le : mar. 18 fév. 2025 à 07:35
-- Version du serveur : 10.11.6-MariaDB-0+deb12u1
-- Version de PHP : 8.2.26
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `universite`
--
CREATE DATABASE IF NOT EXISTS `universite` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `universite`;
-- --------------------------------------------------------
--
-- Structure de la table `contenu`
--
CREATE TABLE `contenu` (
`cFormation` varchar(5) NOT NULL,
`cMatiere` varchar(6) NOT NULL,
`cVolHoraire` int(11) NOT NULL,
`cCoeff` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Déchargement des données de la table `contenu`
--
INSERT INTO `contenu` (`cFormation`, `cMatiere`, `cVolHoraire`, `cCoeff`) VALUES
('COINT', 'ANGAVA', 10, 6),
('LITET', 'ANGAVA', 6, 4),
('CODOM', 'ANGSTD', 8, 4),
('DROPA', 'ANGSTD', 4, 2),
('DROSO', 'ANGSTD', 4, 2),
('LITFR', 'ANGSTD', 4, 3),
('CODOM', 'CONCOM', 12, 8),
('COINT', 'CONINT', 12, 8),
('DROPA', 'DROBAJ', 10, 8),
('DROSO', 'DROBAJ', 8, 6),
('DROSO', 'DROCDT', 10, 8),
('LITET', 'LITANA', 10, 8),
('LITFR', 'LITANA', 10, 8),
('COINT', 'LITOAN', 4, 2),
('LITET', 'LITOAN', 8, 6),
('CODOM', 'LITOFR', 4, 2),
('DROPA', 'LITOFR', 6, 3),
('LITFR', 'LITOFR', 8, 6);
-- --------------------------------------------------------
--
-- Structure de la table `domaine`
--
CREATE TABLE `domaine` (
`dDomaine` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Déchargement des données de la table `domaine`
--
INSERT INTO `domaine` (`dDomaine`) VALUES
('Commerce'),
('Economie'),
('Juridique'),
('Langues'),
('Littérature');
-- --------------------------------------------------------
--
-- Structure de la table `etudiant`
--
CREATE TABLE `etudiant` (
`eId` int(11) NOT NULL,
`eNom` varchar(20) NOT NULL,
`ePrenom` varchar(20) NOT NULL,
`eEmail` varchar(40) NOT NULL,
`eTelephone` varchar(10) DEFAULT NULL,
`eDateNaissance` datetime NOT NULL,
`eDiplome` varchar(1) NOT NULL,
`eFormation` varchar(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Déchargement des données de la table `etudiant`
--
INSERT INTO `etudiant` (`eId`, `eNom`, `ePrenom`, `eEmail`, `eTelephone`, `eDateNaissance`, `eDiplome`, `eFormation`) VALUES
(2, 'Vakarian', 'Garus', 'g.vak@gmail.com', NULL, '2005-03-21 15:48:50', 'N', 'CODOM'),
(3, 'Urdnot', 'Wrex', 'w.urdnot@protonmail.fr', NULL, '2024-03-26 15:48:50', 'N', 'DROPA'),
(4, 'Shepard', 'John', 'j.s@normandy.com', NULL, '2024-03-07 13:49:13', 'O', 'DROSO');
-- --------------------------------------------------------
--
-- Structure de la table `formation`
--
CREATE TABLE `formation` (
`fSigle` varchar(5) NOT NULL,
`fNom` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Déchargement des données de la table `formation`
--
INSERT INTO `formation` (`fSigle`, `fNom`) VALUES
('CODOM', 'Commerce Domestique'),
('COINT', 'Commerce International'),
('DROPA', 'Droit des particuliers'),
('DROSO', 'Droit des Sociétés'),
('LITET', 'Littérature étrangère'),
('LITFR', 'Litérature française');
-- --------------------------------------------------------
--
-- Structure de la table `matiere`
--
CREATE TABLE `matiere` (
`mSigle` varchar(6) NOT NULL,
`mNom` varchar(40) NOT NULL,
`mDescription` text NOT NULL,
`mDomaine` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Déchargement des données de la table `matiere`
--
INSERT INTO `matiere` (`mSigle`, `mNom`, `mDescription`, `mDomaine`) VALUES
('ANGAVA', 'Anglais avancé', 'Cours d\'anglais poussé destiné aux échanges internationaux professionnels.', 'Langues'),
('ANGSTD', 'Anglais standard', 'Cours d\'anglais visant la compréhension par l\'étudiant des documents et médias non spécialisés.', 'Langues'),
('CONCOM', 'Contrats commerciaux', 'Etude de la structure, la légitimité et les obligations dans les contrats commerciaux européens.', 'Commerce'),
('CONINT', 'Contrats internationaux', 'Etude de la structure, la légitimité et les obligations dans les contrats commerciaux internationaux.', 'Commerce'),
('DROBAJ', 'Bases de droit et jurisprudence', 'Bases du droit, principes légaux généraux et étude introductive à la jurisprudence', 'Juridique'),
('DROCDT', 'Bases du code du travail', 'Étude du code du travail, des droits et devoirs des salariés et employeurs', 'Juridique'),
('LITANA', 'Analyse littéraire', 'Méthodes et principes d\'analyse littéraire, appuyé sur de grands classiques de littérature française ou étrangère', 'Littérature'),
('LITOAN', 'Oeuvres majeures anglaises', 'Etude approfondie d\'oeuvres majeures de la littérature anglophone.', 'Littérature'),
('LITOFR', 'Oeuvres majeures françaises', 'Etude approfondie d\'oeuvres majeures de la littérature française.', 'Littérature');
--
-- Index pour les tables déchargées
--
--
-- Index pour la table `contenu`
--
ALTER TABLE `contenu`
ADD PRIMARY KEY (`cMatiere`,`cFormation`),
ADD KEY `contenu_ibfk_1` (`cFormation`);
--
-- Index pour la table `domaine`
--
ALTER TABLE `domaine`
ADD PRIMARY KEY (`dDomaine`);
--
-- Index pour la table `etudiant`
--
ALTER TABLE `etudiant`
ADD PRIMARY KEY (`eId`),
ADD KEY `eFormation` (`eFormation`);
--
-- Index pour la table `formation`
--
ALTER TABLE `formation`
ADD PRIMARY KEY (`fSigle`);
--
-- Index pour la table `matiere`
--
ALTER TABLE `matiere`
ADD PRIMARY KEY (`mSigle`),
ADD KEY `matiere_ibfk_1` (`mDomaine`);
--
-- AUTO_INCREMENT pour les tables déchargées
--
--
-- AUTO_INCREMENT pour la table `etudiant`
--
ALTER TABLE `etudiant`
MODIFY `eId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- Contraintes pour les tables déchargées
--
--
-- Contraintes pour la table `contenu`
--
ALTER TABLE `contenu`
ADD CONSTRAINT `contenu_ibfk_1` FOREIGN KEY (`cFormation`) REFERENCES `formation` (`fSigle`) ON DELETE NO ACTION ON UPDATE CASCADE,
ADD CONSTRAINT `contenu_ibfk_2` FOREIGN KEY (`cMatiere`) REFERENCES `matiere` (`mSigle`) ON DELETE NO ACTION ON UPDATE CASCADE;
--
-- Contraintes pour la table `etudiant`
--
ALTER TABLE `etudiant`
ADD CONSTRAINT `formation_ibfk_1` FOREIGN KEY (`eFormation`) REFERENCES `formation` (`fSigle`) ON DELETE NO ACTION ON UPDATE CASCADE;
--
-- Contraintes pour la table `matiere`
--
ALTER TABLE `matiere`
ADD CONSTRAINT `matiere_ibfk_1` FOREIGN KEY (`mDomaine`) REFERENCES `domaine` (`dDomaine`) ON DELETE NO ACTION ON UPDATE CASCADE;
GRANT USAGE ON *.* TO `phpapp`@`%` IDENTIFIED BY PASSWORD '*30788B2E10D1BBB32E081836418D75A0BCD38460';
GRANT ALL PRIVILEGES ON `universite`.* TO `phpapp`@`%`;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;