Excellent 👌 !
Allons-y pas à pas pour créer une mini-application complète en PHP et MySQL avec 2 tables
reliées :
👉 Tables :
filiere (ex : Informatique, Électricité…)
apprenant (chaque apprenant appartient à une filière)
---
🏫 Mini-application : Gestion des Apprenants et Filières
---
1. Création de la base de données et des tables
Dans phpMyAdmin ou via MySQL :
CREATE DATABASE ecole;
USE ecole;
-- Table des filières
CREATE TABLE filiere (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL
);
-- Table des apprenants
CREATE TABLE apprenant (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
age INT NOT NULL,
filiere_id INT,
FOREIGN KEY (filiere_id) REFERENCES filiere(id)
);
---
2. Connexion à la base (fichier [Link])
<?php
$serveur = "localhost";
$utilisateur = "root";
$motdepasse = "";
$base = "ecole";
$conn = mysqli_connect($serveur, $utilisateur, $motdepasse, $base);
if (!$conn) {
die("Échec connexion : " . mysqli_connect_error());
?>
---
3. Formulaire pour ajouter une filière (ajout_filiere.php)
<!DOCTYPE html>
<html>
<head>
<title>Ajouter Filière</title>
</head>
<body>
<h2>Nouvelle Filière</h2>
<form method="post" action="">
Nom de la filière : <input type="text" name="nom">
<input type="submit" value="Enregistrer">
</form>
<?php
include("[Link]");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nom = $_POST['nom'];
$sql = "INSERT INTO filiere (nom) VALUES ('$nom')";
if (mysqli_query($conn, $sql)) {
echo "Filière ajoutée avec succès !";
} else {
echo "Erreur : " . mysqli_error($conn);
?>
</body>
</html>
---
4. Formulaire pour ajouter un apprenant (ajout_apprenant.php)
<!DOCTYPE html>
<html>
<head>
<title>Ajouter Apprenant</title>
</head>
<body>
<h2>Nouvel Apprenant</h2>
<form method="post" action="">
Nom : <input type="text" name="nom"><br>
Âge : <input type="number" name="age"><br>
Filière :
<select name="filiere_id">
<?php
include("[Link]");
$res = mysqli_query($conn, "SELECT * FROM filiere");
while ($row = mysqli_fetch_assoc($res)) {
echo "<option value='".$row['id']."'>".$row['nom']."</option>";
?>
</select><br>
<input type="submit" value="Enregistrer">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nom = $_POST['nom'];
$age = $_POST['age'];
$filiere_id = $_POST['filiere_id'];
$sql = "INSERT INTO apprenant (nom, age, filiere_id)
VALUES ('$nom', $age, $filiere_id)";
if (mysqli_query($conn, $sql)) {
echo "Apprenant ajouté avec succès !";
} else {
echo "Erreur : " . mysqli_error($conn);
?>
</body>
</html>
---
5. Liste des apprenants avec leur filière (liste_apprenants.php)
<!DOCTYPE html>
<html>
<head>
<title>Liste des Apprenants</title>
</head>
<body>
<h2>Liste des Apprenants</h2>
<?php
include("[Link]");
$sql = "SELECT [Link], [Link], [Link], [Link] AS filiere
FROM apprenant
JOIN filiere ON apprenant.filiere_id = [Link]";
$res = mysqli_query($conn, $sql);
echo "<table border='1'>
<tr><th>ID</th><th>Nom</th><th>Âge</th><th>Filière</th></tr>";
while ($row = mysqli_fetch_assoc($res)) {
echo "<tr>
<td>".$row['id']."</td>
<td>".$row['nom']."</td>
<td>".$row['age']."</td>
<td>".$row['filiere']."</td>
</tr>";
echo "</table>";
?>
</body>
</html>
---
✅ Résultat attendu
1. Tu ajoutes des filières (Informatique, Électricité, etc.).
2. Tu ajoutes des apprenants en choisissant une filière.
3. Tu consultes la liste des apprenants avec leur filière.
---
👉 Veux-tu que je continue ce mini-projet en ajoutant aussi :
La modification et suppression d’un apprenant ?
Ou bien une page d’accueil avec menu qui relie toutes ces pages ?
Parfait Moussa 👌 On va améliorer notre mini-projet PHP & MySQL en ajoutant :
1. Un menu principal (page d’accueil) pour naviguer facilement.
2. La modification et la suppression des apprenants.
---
🏫 Suite du Mini-Projet PHP & MySQL
---
1. Page d’accueil avec menu ([Link])
<!DOCTYPE html>
<html>
<head>
<title>Gestion des Apprenants</title>
</head>
<body>
<h1>Bienvenue dans l'application</h1>
<ul>
<li><a href="ajout_filiere.php">Ajouter une Filière</a></li>
<li><a href="ajout_apprenant.php">Ajouter un Apprenant</a></li>
<li><a href="liste_apprenants.php">Voir la liste des Apprenants</a></li>
</ul>
</body>
</html>
---
2. Liste des apprenants avec actions (liste_apprenants.php)
On ajoute modifier et supprimer à côté de chaque apprenant.
<!DOCTYPE html>
<html>
<head>
<title>Liste des Apprenants</title>
</head>
<body>
<h2>Liste des Apprenants</h2>
<a href="[Link]">⬅ Retour au menu</a><br><br>
<?php
include("[Link]");
$sql = "SELECT [Link], [Link], [Link], [Link] AS filiere
FROM apprenant
JOIN filiere ON apprenant.filiere_id = [Link]";
$res = mysqli_query($conn, $sql);
echo "<table border='1' cellpadding='5'>
<tr><th>ID</th><th>Nom</th><th>Âge</th><th>Filière</th><th>Actions</th></tr>";
while ($row = mysqli_fetch_assoc($res)) {
echo "<tr>
<td>".$row['id']."</td>
<td>".$row['nom']."</td>
<td>".$row['age']."</td>
<td>".$row['filiere']."</td>
<td>
<a href='modifier_apprenant.php?id=".$row['id']."'>Modifier</a> |
<a href='supprimer_apprenant.php?id=".$row['id']."'
onclick=\"return confirm('Voulez-vous vraiment supprimer ?');\">Supprimer</a>
</td>
</tr>";
echo "</table>";
?>
</body>
</html>
---
3. Modifier un apprenant (modifier_apprenant.php)
<?php
include("[Link]");
$id = $_GET['id'];
// Récupérer les infos actuelles
$sql = "SELECT * FROM apprenant WHERE id=$id";
$res = mysqli_query($conn, $sql);
$apprenant = mysqli_fetch_assoc($res);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nom = $_POST['nom'];
$age = $_POST['age'];
$filiere_id = $_POST['filiere_id'];
$sql = "UPDATE apprenant SET nom='$nom', age=$age, filiere_id=$filiere_id WHERE id=$id";
if (mysqli_query($conn, $sql)) {
echo "Apprenant modifié avec succès ! <a href='liste_apprenants.php'>Retour</a>";
exit;
} else {
echo "Erreur : " . mysqli_error($conn);
?>
<!DOCTYPE html>
<html>
<head>
<title>Modifier Apprenant</title>
</head>
<body>
<h2>Modifier Apprenant</h2>
<form method="post">
Nom : <input type="text" name="nom" value="<?php echo $apprenant['nom']; ?>"><br>
Âge : <input type="number" name="age" value="<?php echo $apprenant['age']; ?>"><br>
Filière :
<select name="filiere_id">
<?php
$resF = mysqli_query($conn, "SELECT * FROM filiere");
while ($row = mysqli_fetch_assoc($resF)) {
$selected = ($row['id'] == $apprenant['filiere_id']) ? "selected" : "";
echo "<option value='".$row['id']."' $selected>".$row['nom']."</option>";
}
?>
</select><br>
<input type="submit" value="Modifier">
</form>
</body>
</html>
---
4. Supprimer un apprenant (supprimer_apprenant.php)
<?php
include("[Link]");
$id = $_GET['id'];
$sql = "DELETE FROM apprenant WHERE id=$id";
if (mysqli_query($conn, $sql)) {
echo "Apprenant supprimé avec succès ! <a href='liste_apprenants.php'>Retour</a>";
} else {
echo "Erreur : " . mysqli_error($conn);
?>
---
✅ Résultat attendu
Depuis [Link], tu navigues facilement.
Tu peux :
1. Ajouter une filière.
2. Ajouter un apprenant (en choisissant sa filière).
3. Voir la liste des apprenants.
4. Modifier ou Supprimer un apprenant.
---
👉 Veux-tu que je continue encore en ajoutant un formulaire de recherche (chercher un apprenant par
nom) et un filtrage par filière ?
Super 👌 Moussa ! Continuons donc le mini-projet PHP & MySQL en ajoutant :
1. 🔎 Recherche d’un apprenant par son nom
2. 📂 Filtrage des apprenants par filière
---
🏫 Amélioration du mini-projet : Recherche et Filtrage
---
1. Recherche d’un apprenant par nom (recherche_apprenant.php)
<!DOCTYPE html>
<html>
<head>
<title>Recherche Apprenant</title>
</head>
<body>
<h2>Rechercher un Apprenant</h2>
<a href="[Link]">⬅ Retour au menu</a><br><br>
<form method="get" action="">
Nom : <input type="text" name="nom" placeholder="Entrer un nom">
<input type="submit" value="Rechercher">
</form>
<br>
<?php
include("[Link]");
if (isset($_GET['nom'])) {
$nom = $_GET['nom'];
$sql = "SELECT [Link], [Link], [Link], [Link] AS filiere
FROM apprenant
JOIN filiere ON apprenant.filiere_id = [Link]
WHERE [Link] LIKE '%$nom%'";
$res = mysqli_query($conn, $sql);
if (mysqli_num_rows($res) > 0) {
echo "<table border='1' cellpadding='5'>
<tr><th>ID</th><th>Nom</th><th>Âge</th><th>Filière</th></tr>";
while ($row = mysqli_fetch_assoc($res)) {
echo "<tr>
<td>".$row['id']."</td>
<td>".$row['nom']."</td>
<td>".$row['age']."</td>
<td>".$row['filiere']."</td>
</tr>";
echo "</table>";
} else {
echo "Aucun apprenant trouvé.";
?>
</body>
</html>
---
2. Filtrer les apprenants par filière (filtrer_apprenants.php)
<!DOCTYPE html>
<html>
<head>
<title>Filtrer par Filière</title>
</head>
<body>
<h2>Filtrer les Apprenants par Filière</h2>
<a href="[Link]">⬅ Retour au menu</a><br><br>
<form method="get" action="">
Choisir une filière :
<select name="filiere_id">
<option value="">-- Toutes --</option>
<?php
include("[Link]");
$resF = mysqli_query($conn, "SELECT * FROM filiere");
while ($row = mysqli_fetch_assoc($resF)) {
$selected = (isset($_GET['filiere_id']) && $_GET['filiere_id'] == $row['id']) ? "selected" : "";
echo "<option value='".$row['id']."' $selected>".$row['nom']."</option>";
?>
</select>
<input type="submit" value="Filtrer">
</form>
<br>
<?php
if (isset($_GET['filiere_id']) && $_GET['filiere_id'] != "") {
$filiere_id = $_GET['filiere_id'];
$sql = "SELECT [Link], [Link], [Link], [Link] AS filiere
FROM apprenant
JOIN filiere ON apprenant.filiere_id = [Link]
WHERE apprenant.filiere_id = $filiere_id";
} else {
$sql = "SELECT [Link], [Link], [Link], [Link] AS filiere
FROM apprenant
JOIN filiere ON apprenant.filiere_id = [Link]";
$res = mysqli_query($conn, $sql);
if (mysqli_num_rows($res) > 0) {
echo "<table border='1' cellpadding='5'>
<tr><th>ID</th><th>Nom</th><th>Âge</th><th>Filière</th></tr>";
while ($row = mysqli_fetch_assoc($res)) {
echo "<tr>
<td>".$row['id']."</td>
<td>".$row['nom']."</td>
<td>".$row['age']."</td>
<td>".$row['filiere']."</td>
</tr>";
}
echo "</table>";
} else {
echo "Aucun apprenant trouvé.";
?>
</body>
</html>
---
3. Mise à jour du menu ([Link])
On ajoute des liens vers recherche et filtrage :
<ul>
<li><a href="ajout_filiere.php">Ajouter une Filière</a></li>
<li><a href="ajout_apprenant.php">Ajouter un Apprenant</a></li>
<li><a href="liste_apprenants.php">Voir la liste des Apprenants</a></li>
<li><a href="recherche_apprenant.php">Rechercher un Apprenant</a></li>
<li><a href="filtrer_apprenants.php">Filtrer par Filière</a></li>
</ul>
---
✅ Résultat final
🎓 Ajouter des filières et apprenants
📋 Lister les apprenants avec leur filière
✏️Modifier ou ❌ Supprimer un apprenant
🔎 Rechercher un apprenant par nom
📂 Filtrer les apprenants par filière
---
👉 Veux-tu que je continue et transforme ce mini-projet en une application plus professionnelle avec un
design (CSS Bootstrap) pour rendre les formulaires et tableaux plus beaux ?