# 1) Ecrire le code qui permettra de se connecter à la base de données
$dsn = "mysql:host=localhost; dbname=ofppt";
$user = "root";
$password = ""; // "root";
try {
$conn = new PDO($dsn, $user, $password);
// echo "Done!";
} catch (PDOException $e) {
echo $e->getMessage();
}
# 2) Ecrire une fonction listerStagiaires() qui permettra de lister tous les stagiaires
function listerStagiaires()
{
global $conn;
$sql = "SELECT * FROM stagiaire";
$result = $conn->prepare($sql);
$result->execute();
$list_Stagiaire = [];
foreach ($result->fetchAll() as $e) {
$list_Stagiaire[] = "CIN : " . $e["cin"] . " Nom : " . $e["nom"] . " Prenom : " . $e["prenom"];
}
return $list_Stagiaire;
}
# 3) Ecrire une fonction nombreStagiaires($id_groupe)
qui prends en argument l’id d’un groupe et retourne le nombre des stagiaires affectés
à ce groupe
function nombreStagiaires($id_groupe)
{
global $conn;
$sql = "SELECT COUNT(*) FROM stagiaire WHERE id_groupe = $id_groupe";
$result = $conn->prepare($sql);
$result->execute();
return $result->fetch()[0];
}
# 4) Ecrire une fonction groupeRempli($id_groupe)
qui prends en argument l’id d’un groupe et retourne
true si le nombre des stagiaires du groupe est supérieur ou égale à la valeur de la
colonne max_nombre_stagiaires et false sinon.
function groupRempli($id_groupe)
{
global $conn;
$sql = "SELECT CASE
WHEN (" . nombreStagiaires($id_groupe) . ") >= (SELECT max_nombre_stagiaires
FROM groupe WHERE id_groupe = $id_groupe)
THEN 'True'
ELSE 'false'
END AS `GroupRempli`";
$result = $conn->prepare($sql);
$result->execute();
return $result->fetch()[0];
}
Dans la page [Link] on a un formulaire avec les paramètres
suivants :
a. method=post
b. action=[Link]
c. Quatre input de type text, qui ont les valeurs cin, nom, prenom,
email dans l’attribut name
d. Un select qui a groupe dans l’attribut name et permets de choisir
l’id du groupe
<html lang="uk">
<head>
<title></title>
</head>
<body>
<form method="post" action="[Link]">
<select name="id_group">
<option>none</option>
<?PHP
include "id_group.php";
?>
</select>
<br>
<label>CIN :
<input type="text" name="cin">
</label>
<br>
<label>
NOM :
<input type="text" name="nom">
</label>
<br>
<label>
Prenom :
<input type="text" name="prenom">
</label>
<br>
<label>
Email :
<input type="email" name="email">
</label>
<br>
<input type="submit" name="sub">
</form>
</body>
</html>
5) Ecrire le code de la page [Link] qui permettra de :
a. Tester si le groupe est remplie
b. Si oui on affiche le message « le stagiaire ne peut pas être affecté
à ce groupe »
c. Si non on insère la ligne dans la table stagiaire (4pts)
if (isset($_POST["sub"])) {
$id_groupe = $_POST["id_group"];
$result = groupRempli(intval($id_groupe));
echo $result;
if ($result === true) {
echo "<script>";
echo "alert('le stagiaire ne peut pas être affecté à ce groupe')";
echo "</script>";
} else {
$cin = $_POST['cin'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
$sql = "INSERT INTO stagiaire (id_groupe, cin, nom, prenom, email) VALUES
($id_groupe, '$cin', '$nom', '$prenom', '$email')";
$conn->exec($sql);
}
}
6) Ecrire une fonction modulesEnCours($id_filiere) qui permettra de lister les
modules appartenant à la filière en argument et que leurs
nombre_heures_effectuees est inférieur strictement aux nombres_heures_total
(4pts)
function modulesEnCours($id_filiere)
{
global $conn;
$sql = "SELECT * FROM module WHERE id_filiere = $id_filiere
and nombre_heures_effectuees < nombre_heures_total";
$result = $conn->prepare($sql);
$result->execute();
$data = array();
foreach ($result->fetchAll() as $e) {
$data["id_module"] = $e["id_module"];
$data["id_filiere"] = $e["id_filiere"];
$data["code_model"] = $e["code_model"];
$data["number_heures_total"] = $e["nombre_heures_total"];
$data["number_heures_effectuees"] = $e["nombre_heures_effectuees"];
}
return $data;
}
print_r(modulesEnCours(2));