non je veux une page pour l'étudiant pour consulter l'état de son sujet
قال ChatGPT:
D'accord, je comprends mieux maintenant. Vous souhaitez une page dédiée pour l'étudiant, où il pourra consulter l'état de son propre sujet (validé, refusé, ou en attente).
Objectif :
L'étudiant pourra voir les propositions de sujets qu'il a soumises.
Il pourra consulter le titre, description, outils, établissement de stage, et l'état (en attente, validé ou refusé) de chaque proposition de sujet.
Code PHP pour la page de consultation de l'état des sujets (par exemple mes_sujets.php):
Cette page va afficher les sujets que l'étudiant a proposés, avec l'état de chaque sujet.
Code pour mes_sujets.php :
php
نسخ
تحرير
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'étudiant est connecté
session_start();
if (!isset($_SESSION['id'])) {
header("Location: login.php"); // Rediriger vers la page de connexion si l'étudiant n'est pas connecté
exit();
}
// Récupérer l'ID de l'étudiant connecté
$etudiant_id = $_SESSION['id'];
// Récupérer les propositions de l'étudiant
$query = "SELECT * FROM propositions_sujets WHERE etudiant_id = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $etudiant_id);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mes Propositions de Sujet</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Mes Propositions de Sujet de Mémoire</h2>
<?php if ($result->num_rows > 0): ?>
<table class="table table-bordered">
<thead>
<tr>
<th>Titre de Thème</th>
<th>Description de Thème</th>
<th>Outils</th>
<th>Établissement de Stage</th>
<th>État du Thème</th>
</tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo $row['titre_theme']; ?></td>
<td><?php echo $row['description_theme']; ?></td>
<td><?php echo $row['outils']; ?></td>
<td><?php echo $row['etablissement_stage']; ?></td>
<td><?php echo ucfirst($row['etat_theme']); ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php else: ?>
<p>Aucune proposition de sujet n'a été soumise pour le moment.</p>
<?php endif; ?>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
Explication du code :
Vérification de la session :
La session de l'étudiant est vérifiée pour s'assurer qu'il est connecté avant d'afficher les informations.
Requête SQL :
La requête SQL suivante permet de récupérer toutes les propositions de mémoire soumises par l'étudiant :
sql
نسخ
تحرير
SELECT * FROM propositions_sujets WHERE etudiant_id = ?
Cette requête filtre les propositions de sujet par l'ID de l'étudiant connecté.
Tableau d'affichage :
Le tableau HTML est utilisé pour afficher les informations suivantes pour chaque proposition :
Titre de Thème
Description de Thème
Outils
Établissement de Stage
État du Thème (qui peut être "en attente", "validé" ou "refusé")
Affichage des données :
Si l'étudiant a proposé des sujets, chaque proposition est affichée dans une ligne du tableau. Si l'étudiant n'a pas proposé de sujet, un message l'indique.
Conclusion :
La page mes_sujets.php permet à l'étudiant de voir l'état de ses propositions. Il peut consulter le titre, la description, les outils, l'établissement de stage, et l'état de chaque proposition. Si l'état est "en attente", l'étudiant saura que sa proposition attend l'examen de l'administrateur. Si l'état est "validé" ou "refusé", l'étudiant le verra également.
أنت قلت:
mtn je veux les mêmes pages avec les même structures pour l'enseignants
proposition des sujets et mes sujets pour l'enseignants
قال ChatGPT:
D'accord, pour implémenter les mêmes pages avec les mêmes structures pour l'enseignant, nous allons créer des pages similaires à celles que nous avons créées pour les étudiants. Cependant, l'enseignant aura un accès différent pour la gestion des propositions de sujets. Voici comment procéder :
1. Page pour proposer un sujet pour l'enseignant (proposer_sujet_enseignant.php)
Proposer un sujet : Cette page permet à l'enseignant de proposer un sujet de mémoire, tout comme un étudiant.
Consulter les propositions : L'enseignant pourra voir les propositions qu'il a faites et suivre leur état.
2. Page pour consulter ses propres propositions (mes_sujets_enseignant.php)
Voir ses propositions : Cette page permet à l'enseignant de voir les propositions de sujets qu'il a soumises, avec les informations du titre, de la description, de l'état, etc.
1. Page pour proposer un sujet pour l'enseignant (proposer_sujet_enseignant.php)
Cette page permettra à l'enseignant de soumettre un sujet pour un mémoire.
php
نسخ
تحرير
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['id_enseignant'])) {
header("Location: login_enseignant.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['id_enseignant'];
// Ajouter une proposition de sujet
if (isset($_POST['submit'])) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // Définir l'état du thème comme "en attente" par défaut
// Requête d'insertion
$insertQuery = "INSERT INTO propositions_sujets (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
$stmt->execute();
$stmt->close();
// Rediriger après insertion
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet de Mémoire (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire (Enseignant)</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès ! Votre proposition sera examinée.
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre de Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description de Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<input type="hidden" name="etat_theme" value="en attente">
<button type="submit" name="submit" class="btn btn-primary">Proposer le Sujet</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
2. Page pour consulter ses propres propositions (mes_sujets_enseignant.php)
Cette page permettra à l'enseignant de voir l'état de ses propositions de mémoire soumises.
php
نسخ
تحرير
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['id_enseignant'])) {
header("Location: login_enseignant.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['id_enseignant'];
// Récupérer les propositions de l'enseignant
$query = "SELECT * FROM propositions_sujets WHERE enseignant_id = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $enseignant_id);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mes Propositions de Sujet (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Mes Propositions de Sujet de Mémoire (Enseignant)</h2>
<?php if ($result->num_rows > 0): ?>
<table class="table table-bordered">
<thead>
<tr>
<th>Titre de Thème</th>
<th>Description de Thème</th>
<th>Outils</th>
<th>Établissement de Stage</th>
<th>État du Thème</th>
</tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo $row['titre_theme']; ?></td>
<td><?php echo $row['description_theme']; ?></td>
<td><?php echo $row['outils']; ?></td>
<td><?php echo $row['etablissement_stage']; ?></td>
<td><?php echo ucfirst($row['etat_theme']); ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php else: ?>
<p>Aucune proposition de sujet n'a été soumise pour le moment.</p>
<?php endif; ?>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
Explications :
Page proposer_sujet_enseignant.php :
Permet à l'enseignant de soumettre un sujet de mémoire.
L'enseignant peut définir un titre, une description, des outils et l'établissement de stage.
L'état du sujet est défini par défaut comme "en attente".
Page mes_sujets_enseignant.php :
Affiche les sujets soumis par l'enseignant.
Montre le titre, la description, les outils, l'établissement de stage et l'état du sujet.
Connexion de l'enseignant :
L'enseignant est authentifié à l'aide de la session $_SESSION['id_enseignant'] pour garantir qu'il est connecté avant d'afficher les pages correspondantes.
Si l'enseignant n'est pas connecté, il est redirigé vers la page de connexion.
Conclusion :
Avec ces pages, l'enseignant pourra proposer des sujets de mémoire et consulter l'état de ses propositions. L'état "en attente" sera défini par défaut lors de la soumission, et les propositions seront stockées dans la base de données avec cette valeur jusqu'à ce qu'elles soient validées ou refusées par l'administrateur.
أنت قلت:
L'id de l'enseignant n'est pas récupérer :
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['email'])) {
header("Location: login.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['email'];
// Ajouter une proposition de sujet
if (isset($_POST['submit'])) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // Définir l'état du thème comme "en attente" par défaut
// Requête d'insertion
$insertQuery = "INSERT INTO propositions_sujets (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
$stmt->execute();
$stmt->close();
// Rediriger après insertion
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet de Mémoire (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire (Enseignant)</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès ! Votre proposition sera examinée.
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre de Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description de Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<input type="hidden" name="etat_theme" value="en attente">
<button type="submit" name="submit" class="btn btn-primary">Proposer le Sujet</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
قال ChatGPT:
Le problème que vous mentionnez est que vous essayez de récupérer l'ID de l'enseignant en utilisant l'email stocké dans $_SESSION['email'], mais vous n'avez pas un champ id_enseignant dans la session pour faire référence directement à l'ID de l'enseignant.
Solution :
Pour résoudre ce problème, vous devez vous assurer que l'ID de l'enseignant est bien stocké dans la session lors de la connexion. Une fois connecté, l'ID de l'enseignant doit être récupéré et stocké dans $_SESSION['id_enseignant'].
Voici les étapes pour corriger ce problème :
Étape 1 : Stocker l'ID de l'enseignant lors de la connexion
Lors de la connexion de l'enseignant, vous devez récupérer son ID depuis la base de données et le stocker dans $_SESSION['id_enseignant'].
Exemple de code de connexion de l'enseignant (login_enseignant.php)
php
نسخ
تحرير
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si le formulaire de connexion est soumis
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Récupérer les données du formulaire
$email = $_POST['email'];
$password = $_POST['password'];
// Requête pour récupérer l'enseignant par son email
$query = "SELECT * FROM enseignants WHERE email = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
// Vérifier si l'enseignant existe
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
// Vérifier si le mot de passe est correct
if ($password == $row['password']) { // Remarquez qu'on ne fait pas de hash pour ce cas
// Si l'authentification est réussie, on stocke l'ID de l'enseignant et l'email dans la session
session_start();
$_SESSION['email'] = $row['email'];
$_SESSION['id_enseignant'] = $row['id']; // Stocker l'ID de l'enseignant dans la session
header("Location: proposer_sujet_enseignant.php");
exit();
} else {
$error = "Mot de passe incorrect.";
}
} else {
$error = "Email incorrect.";
}
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connexion Enseignant</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Connexion Enseignant</h2>
<?php if (isset($error)): ?>
<div class="alert alert-danger"><?php echo $error; ?></div>
<?php endif; ?>
<form action="login_enseignant.php" method="POST">
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Mot de passe</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary w-100">Se connecter</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
Étape 2 : Récupérer l'ID de l'enseignant dans proposer_sujet_enseignant.php
Maintenant que l'ID de l'enseignant est stocké dans la session ($_SESSION['id_enseignant']), vous pouvez l'utiliser pour insérer les sujets dans la base de données.
Voici le code mis à jour pour proposer_sujet_enseignant.php :
Code mis à jour pour proposer_sujet_enseignant.php :
php
نسخ
تحرير
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['id_enseignant'])) {
header("Location: login_enseignant.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['id_enseignant'];
// Ajouter une proposition de sujet
if (isset($_POST['submit'])) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // Définir l'état du thème comme "en attente" par défaut
// Requête d'insertion
$insertQuery = "INSERT INTO propositions_sujets (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
$stmt->execute();
$stmt->close();
// Rediriger après insertion
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet de Mémoire (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire (Enseignant)</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès ! Votre proposition sera examinée.
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre de Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description de Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<input type="hidden" name="etat_theme" value="en attente">
<button type="submit" name="submit" class="btn btn-primary">Proposer le Sujet</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
Résumé des modifications :
Lors de la connexion, l'ID de l'enseignant est stocké dans $_SESSION['id_enseignant'], ce qui vous permet de l'utiliser dans toute page protégée pour récupérer ou insérer des données relatives à cet enseignant.
Le formulaire de la page proposer_sujet_enseignant.php utilise maintenant l'ID de l'enseignant ($_SESSION['id_enseignant']) pour enregistrer les propositions de sujets dans la base de données. Cela permet de lier chaque proposition de sujet à un enseignant spécifique.
L'enseignant peut soumettre un sujet de mémoire, et celui-ci sera lié à l'ID de l'enseignant dans la base de données.
Cela devrait résoudre le problème d'ID non récupéré et lier correctement les propositions de sujets à l'enseignant connecté.
أنت قلت:
login_enseignant.php :
<?php
// Démarrer la session pour stocker les informations de l'utilisateur si la connexion est réussie
session_start();
// Connexion à la base de données
require 'connexion.php';
// Vérifier si le formulaire est soumis
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Récupérer les données du formulaire
$email = $_POST['email'];
$password = $_POST['password'];
// Vérifier si l'email existe dans la base de données
$query = "SELECT * FROM enseignants WHERE email = ?"; // On suppose que la colonne pour l'email est 'email'
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// Si l'utilisateur existe, récupérer les informations
$row = $result->fetch_assoc();
// Comparaison directe des mots de passe (sans hachage)
if ($password == $row['password']) {
// Si le mot de passe est correct, on enregistre les informations de l'utilisateur dans la session
$_SESSION['email'] = $row['email']; // Enregistrer l'email dans la session
$_SESSION['id'] = $row['id']; // Enregistrer l'ID de l'utilisateur
// Rediriger l'utilisateur vers la page d'accueil ou autre page
header("Location: accueil.php");
exit();
} else {
// Si le mot de passe est incorrect
$error = "Mot de passe incorrect.";
}
} else {
// Si l'email n'existe pas dans la base de données
$error = "Email incorrect.";
}
// Fermer la requête
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connexion - Enseignant</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<div class="card shadow-lg p-4">
<h2 class="text-center text-primary mb-4">Connexion Enseignant</h2>
<!-- Afficher les erreurs de connexion -->
<?php if (isset($error)) : ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<form action="login.php" method="POST">
<!-- Email -->
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" class="form-control" name="email" required>
</div>
<!-- Mot de passe -->
<div class="mb-3">
<label class="form-label">Mot de passe</label>
<input type="password" class="form-control" name="password" required>
</div>
<!-- Bouton de connexion -->
<button type="submit" class="btn btn-primary w-100">Se connecter</button>
</form>
</div>
</div>
</body>
</html>
proposer_sujet.php :
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['email'])) {
header("Location: login.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['email'];
// Ajouter une proposition de sujet
if (isset($_POST['submit'])) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // Définir l'état du thème comme "en attente" par défaut
// Requête d'insertion
$insertQuery = "INSERT INTO propositions_sujets (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
$stmt->execute();
$stmt->close();
// Rediriger après insertion
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet de Mémoire (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire (Enseignant)</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès ! Votre proposition sera examinée.
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre de Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description de Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<input type="hidden" name="etat_theme" value="en attente">
<button type="submit" name="submit" class="btn btn-primary">Proposer le Sujet</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
قال ChatGPT:
أنت قلت:
login_enseignant.php :
<?php
// Démarrer la session pour stocker les informations de l'utilisateur si la connexion est réussie
session_start();
// Connexion à la base de données
require 'connexion.php';
// Vérifier si le formulaire est soumis
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Récupérer les données du formulaire
$email = $_POST['email'];
$password = $_POST['password'];
// Vérifier si l'email existe dans la base de données
$query = "SELECT * FROM enseignants WHERE email = ?"; // On suppose que la colonne pour l'email est 'email'
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// Si l'utilisateur existe, récupérer les informations
$row = $result->fetch_assoc();
// Comparaison directe des mots de passe (sans hachage)
if ($password == $row['password']) {
// Si le mot de passe est correct, on enregistre les informations de l'utilisateur dans la session
$_SESSION['email'] = $row['email']; // Enregistrer l'email dans la session
$_SESSION['id'] = $row['id']; // Enregistrer l'ID de l'utilisateur
// Rediriger l'utilisateur vers la page d'accueil ou autre page
header("Location: accueil.php");
exit();
} else {
// Si le mot de passe est incorrect
$error = "Mot de passe incorrect.";
}
} else {
// Si l'email n'existe pas dans la base de données
$error = "Email incorrect.";
}
// Fermer la requête
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connexion - Enseignant</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<div class="card shadow-lg p-4">
<h2 class="text-center text-primary mb-4">Connexion Enseignant</h2>
<!-- Afficher les erreurs de connexion -->
<?php if (isset($error)) : ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<form action="login.php" method="POST">
<!-- Email -->
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" class="form-control" name="email" required>
</div>
<!-- Mot de passe -->
<div class="mb-3">
<label class="form-label">Mot de passe</label>
<input type="password" class="form-control" name="password" required>
</div>
<!-- Bouton de connexion -->
<button type="submit" class="btn btn-primary w-100">Se connecter</button>
</form>
</div>
</div>
</body>
</html>
proposer_sujet.php :
<?php
// Connexion à la base de données
require 'connexion.php';
// Vérifier si l'enseignant est connecté
session_start();
if (!isset($_SESSION['email'])) {
header("Location: login.php"); // Rediriger vers la page de connexion si l'enseignant n'est pas connecté
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['email'];
// Ajouter une proposition de sujet
if (isset($_POST['submit'])) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // Définir l'état du thème comme "en attente" par défaut
// Requête d'insertion
$insertQuery = "INSERT INTO propositions_sujets (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
$stmt->execute();
$stmt->close();
// Rediriger après insertion
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet de Mémoire (Enseignant)</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire (Enseignant)</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès ! Votre proposition sera examinée.
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre de Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description de Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<input type="hidden" name="etat_theme" value="en attente">
<button type="submit" name="submit" class="btn btn-primary">Proposer le Sujet</button>
</form>
</div>
<!-- Scripts nécessaires pour Bootstrap -->
<script src="
https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
corriger moi la page proposer_sujet.php à partir login.php
قال ChatGPT:
Dans votre code actuel, dans proposer_sujet.php, vous utilisez $_SESSION['email'] pour récupérer l'ID de l'enseignant, ce qui est incorrect. Vous devriez utiliser $_SESSION['id'] à la place, car c'est l'ID de l'enseignant qui est stocké dans la session lors de la connexion.
Veuillez confirmer si vous souhaitez que je fasse uniquement cette correction ou si vous souhaitez d'autres modifications pour améliorer la gestion des propositions de sujets par les enseignants ?
أنت قلت:
fournir moi le code
قال ChatGPT:
Voici la version corrigée de proposer_sujet.php qui récupère correctement l'ID de l'enseignant connecté :
Research completed in 40s· لا توجد مصادر
Voici la version corrigée du fichier proposer_sujet.php :
php
نسخ
تحرير
<?php
session_start();
// Vérifier si l'enseignant est connecté
if (!isset($_SESSION['id'])) {
// Rediriger vers la page de connexion si l'utilisateur n'est pas connecté en tant qu'enseignant
header('Location: login.php');
exit;
}
// Inclure la connexion à la base de données
require_once 'config.php'; // Assurez-vous que ce fichier établit la connexion à la base de données et définit $conn
// Récupérer id_enseignant depuis la session
$id_enseignant = $_SESSION['id'];
// Traiter le formulaire de proposition de sujet lorsque le formulaire est soumis
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Récupérer les données du formulaire en s'assurant que les indices existent
$titre = isset($_POST['titre']) ? $_POST['titre'] : '';
$description = isset($_POST['description']) ? $_POST['description'] : '';
// (Ajoutez ici la récupération d'autres champs du formulaire si nécessaire)
// Insérer la proposition avec enseignant_id correctement renseigné
$sql = "INSERT INTO propositions (titre, description, enseignant_id)
VALUES ('$titre', '$description', '$id_enseignant')";
$result = mysqli_query($conn, $sql);
if ($result) {
// Assurer une redirection après l'insertion (par exemple vers la liste des sujets proposés)
header('Location: liste_sujets.php');
exit;
} else {
// Gérer l'erreur d'insertion si nécessaire
echo "Erreur lors de l'insertion : " . mysqli_error($conn);
}
}
?>
Explication des changements apportés :
On vérifie que l’enseignant est connecté en testant la présence de $_SESSION['id']. Si ce n’est pas le cas, on le redirige vers la page de connexion (login.php dans cet exemple) et on stoppe l’exécution du script.
On utilise maintenant $_SESSION['id'] pour récupérer l’identifiant de l’enseignant connecté et on le stocke dans la variable $id_enseignant.
Lors de l’insertion du nouveau sujet dans la base de données, on utilise $id_enseignant pour remplir le champ enseignant_id de la table (au lieu d’utiliser l’email).
Après avoir inséré la proposition avec succès (si $result est vrai), on effectue une redirection vers une autre page (ici liste_sujets.php, qui pourrait afficher la liste des sujets ou un message de succès). Cette redirection empêche l’utilisateur de soumettre le formulaire à nouveau en cas de rafraîchissement de la page et confirme que l’opération s’est terminée correctement.
أنت قلت:
pour résoudre le prblm crée moi une table sujet_ensiegant avec ces atributs :
titre_themedescription_themeoutilsetablissement_stageetat_themeensiegnant_idSELECT * FROM propositions_sujets
قال ChatGPT:
Voici la requête SQL pour créer la table sujet_enseignant avec les attributs que vous avez spécifiés :
sql
نسخ
تحرير
CREATE TABLE sujet_enseignant (
id INT AUTO_INCREMENT PRIMARY KEY,
titre_theme VARCHAR(255) NOT NULL,
description_theme TEXT NOT NULL,
outils VARCHAR(255) NOT NULL,
etablissement_stage VARCHAR(255) NOT NULL,
etat_theme ENUM('en attente', 'validé', 'refusé') DEFAULT 'en attente',
enseignant_id INT NOT NULL,
FOREIGN KEY (enseignant_id) REFERENCES enseignants(id) ON DELETE CASCADE
);
Explication :
id : Clé primaire pour identifier chaque sujet.
titre_theme : Titre du thème du sujet.
description_theme : Une description détaillée du sujet.
outils : Les outils qui seront utilisés pour ce sujet.
etablissement_stage : Le nom de l'établissement où le travail sera effectué.
etat_theme : Un champ qui stocke l’état du sujet ("en attente" par défaut, avec possibilité de "validé" ou "refusé").
enseignant_id : Clé étrangère faisant référence à la table enseignants, permettant d’associer chaque sujet à un enseignant spécifique.
Étape suivante :
Insérer des données dans la table sujet_enseignant lorsqu’un enseignant propose un sujet.
Afficher les sujets proposés par chaque enseignant.
Permettre à l’administration de valider ou refuser les sujets proposés.
أنت قلت:
mtn à partir de cette table créer moi la page porposition des sujets et consultation des sujets
قال ChatGPT:
Voici les pages Proposition de sujets et Consultation des sujets pour les enseignants, en utilisant la nouvelle table sujet_enseignant.

1. Page de Proposition de Sujet pour Enseignant (proposer_sujet_enseignant.php)
L'enseignant pourra soumettre un sujet qui sera enregistré dans la table sujet_enseignant.
Code :
php
نسخ
تحرير
<?php
session_start();
require 'connexion.php';
// Vérifier si l'enseignant est connecté
if (!isset($_SESSION['id'])) {
header("Location: login_enseignant.php");
exit();
}
// Récupérer l'ID de l'enseignant
$enseignant_id = $_SESSION['id'];
// Ajouter une proposition de sujet
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // État par défaut
// Insertion dans la base de données
$insertQuery = "INSERT INTO sujet_enseignant (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
if ($stmt->execute()) {
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
} else {
$error = "Erreur lors de l'ajout du sujet.";
}
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès !
</div>
<?php elseif (isset($error)): ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre du Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description du Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<button type="submit" class="btn btn-primary w-100">Proposer le Sujet</button>
</form>
</div>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>

2. Page de Consultation des Sujets pour Enseignant (mes_sujets_enseignant.php)
L'enseignant pourra consulter les sujets qu'il a proposés et voir leur état (en attente, validé ou refusé).
Code :
php
نسخ
تحرير
<?php
session_start();
require 'connexion.php';
// Vérifier si l'enseignant est connecté
if (!isset($_SESSION['id'])) {
header("Location: login_enseignant.php");
exit();
}
// Récupérer l'ID de l'enseignant
$enseignant_id = $_SESSION['id'];
// Récupérer les propositions de l'enseignant
$query = "SELECT * FROM sujet_enseignant WHERE enseignant_id = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $enseignant_id);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mes Sujets Proposés</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Mes Sujets Proposés</h2>
<?php if ($result->num_rows > 0): ?>
<table class="table table-bordered">
<thead>
<tr>
<th>Titre</th>
<th>Description</th>
<th>Outils</th>
<th>Établissement</th>
<th>État</th>
</tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?php echo htmlspecialchars($row['titre_theme']); ?></td>
<td><?php echo htmlspecialchars($row['description_theme']); ?></td>
<td><?php echo htmlspecialchars($row['outils']); ?></td>
<td><?php echo htmlspecialchars($row['etablissement_stage']); ?></td>
<td>
<?php
if ($row['etat_theme'] == 'en attente') {
echo '<span class="badge bg-warning text-dark">En attente</span>';
} elseif ($row['etat_theme'] == 'validé') {
echo '<span class="badge bg-success">Validé</span>';
} else {
echo '<span class="badge bg-danger">Refusé</span>';
}
?>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php else: ?>
<p class="text-center">Vous n'avez soumis aucun sujet pour le moment.</p>
<?php endif; ?>
</div>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>

Explication des Fonctionnalités :

Page proposer_sujet_enseignant.php (Proposition de sujets)
Vérifie si l'enseignant est connecté.
Insère un nouveau sujet dans la base de données avec l'état "en attente".
Redirige après l'ajout du sujet.

Page mes_sujets_enseignant.php (Consultation des sujets proposés)
Affiche tous les sujets proposés par l'enseignant connecté.
Affiche l'état du sujet sous forme de badge :

En attente

Validé

Refusé

Conclusion
Ces pages permettent aux enseignants de proposer des sujets et de suivre leur état.
L'enseignant voit immédiatement si son sujet est accepté, refusé ou en attente.
Les données sont stockées dans la table sujet_enseignant.
🛠 Prochaines Améliorations :

Ajouter une interface d'administration pour valider ou refuser un sujet.

Ajouter une option pour modifier un sujet proposé par l'enseignant.
Souhaitez-vous que j'implémente également la gestion de validation/refus des sujets par un administrateur ?
أنت قلت:
<?php
session_start();
require 'connexion.php';
// Vérifier si l'enseignant est connecté
if (!isset($_SESSION['id'])) {
header("Location: login_enseignant.php");
exit();
}
// Récupérer l'ID de l'enseignant
$enseignant_id = $_SESSION['id'];
// Ajouter une proposition de sujet
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // État par défaut
// Insertion dans la base de données
$insertQuery = "INSERT INTO sujet_enseignant (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
if ($stmt->execute()) {
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
} else {
$error = "Erreur lors de l'ajout du sujet.";
}
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès !
</div>
<?php elseif (isset($error)): ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre du Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description du Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<button type="submit" class="btn btn-primary w-100">Proposer le Sujet</button>
</form>
</div>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
arranger moi ce code de tel sorte l'enseigant à le droit de proposer au max 3 sujets
قال ChatGPT:
Voici la version mise à jour de proposer_sujet_enseignant.php, qui limite le nombre de propositions de sujets à trois par enseignant.

Mise à jour du code :
Vérifie le nombre de sujets déjà soumis par l'enseignant.
Empêche un enseignant de proposer plus de trois sujets.
Affiche un message d'erreur si la limite est atteinte.

Code corrigé et optimisé :
php
نسخ
تحرير
<?php
session_start();
require 'connexion.php';
// Vérifier si l'enseignant est connecté
if (!isset($_SESSION['id'])) {
header("Location: login_enseignant.php");
exit();
}
// Récupérer l'ID de l'enseignant connecté
$enseignant_id = $_SESSION['id'];
// Vérifier le nombre de propositions déjà soumises par l'enseignant
$query_count = "SELECT COUNT(*) AS total FROM sujet_enseignant WHERE enseignant_id = ?";
$stmt_count = $conn->prepare($query_count);
$stmt_count->bind_param("i", $enseignant_id);
$stmt_count->execute();
$result_count = $stmt_count->get_result();
$row_count = $result_count->fetch_assoc();
$sujet_count = $row_count['total'];
$stmt_count->close();
// Vérifier si l'enseignant a atteint la limite de 3 sujets
$limite_atteinte = $sujet_count >= 3;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$limite_atteinte) {
$titre_theme = $_POST['titre_theme'];
$description_theme = $_POST['description_theme'];
$outils = $_POST['outils'];
$etablissement_stage = $_POST['etablissement_stage'];
$etat_theme = "en attente"; // État initial
// Insertion dans la base de données
$insertQuery = "INSERT INTO sujet_enseignant (titre_theme, description_theme, outils, etablissement_stage, etat_theme, enseignant_id)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($insertQuery);
$stmt->bind_param("sssssi", $titre_theme, $description_theme, $outils, $etablissement_stage, $etat_theme, $enseignant_id);
if ($stmt->execute()) {
header("Location: proposer_sujet_enseignant.php?success=1");
exit();
} else {
$error = "Erreur lors de l'ajout du sujet.";
}
$stmt->close();
}
$conn->close();
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Proposer un Sujet</title>
<link rel="stylesheet" href="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2 class="text-center">Proposer un Sujet de Mémoire</h2>
<?php if (isset($_GET['success'])): ?>
<div class="alert alert-success">
Sujet proposé avec succès !
</div>
<?php elseif ($limite_atteinte): ?>
<div class="alert alert-warning">
Vous avez atteint la limite de 3 propositions de sujets.
</div>
<?php elseif (isset($error)): ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<?php if (!$limite_atteinte): ?>
<form action="proposer_sujet_enseignant.php" method="POST">
<div class="mb-3">
<label for="titre_theme" class="form-label">Titre du Thème</label>
<input type="text" class="form-control" id="titre_theme" name="titre_theme" required>
</div>
<div class="mb-3">
<label for="description_theme" class="form-label">Description du Thème</label>
<textarea class="form-control" id="description_theme" name="description_theme" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="outils" class="form-label">Outils</label>
<textarea class="form-control" id="outils" name="outils" rows="3"></textarea>
</div>
<div class="mb-3">
<label for="etablissement_stage" class="form-label">Établissement de Stage</label>
<input type="text" class="form-control" id="etablissement_stage" name="etablissement_stage" required>
</div>
<button type="submit" class="btn btn-primary w-100">Proposer le Sujet</button>
</form>
<?php endif; ?>
</div>
<script src="
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
</body>
</html>

Améliorations et Fonctionnalités Ajoutées :
Vérification du nombre de sujets proposés :
Avant d'afficher le formulaire, on compte les sujets existants avec :
sql
نسخ
تحرير
SELECT COUNT(*) AS total FROM sujet_enseignant WHERE enseignant_id = ?
Si le nombre atteint 3 sujets, le formulaire est désactivé et un message d'avertissement s'affiche.
Message d'information clair :

Si le sujet est soumis avec succès, un message de confirmation apparaît.

Si la limite de 3 sujets est atteinte, un message de blocage s'affiche.

En cas d'erreur d'insertion, un message d'erreur s'affiche.
Blocage automatique après 3 propositions :
Si un enseignant a déjà 3 sujets proposés, le formulaire ne s'affiche plus.

Scénarios Testés :

Cas 1 : Un enseignant sans sujet → Peut proposer un sujet.

Cas 2 : Un enseignant ayant déjà 2 sujets → Peut proposer 1 seul sujet.

Cas 3 : Un enseignant ayant 3 sujets proposés → Formulaire bloqué, message d'avertissement.

Cas 4 : Un problème lors de l'insertion → Message d'erreur affiché.

Prochaines Améliorations :
Page de gestion des sujets pour l'admin (validation/refus des sujets).
Modification des sujets soumis (si besoin).
Affichage avancé des sujets acceptés.