commentaires plus pertinent + supression anciens fichiers et anciens commentaires

This commit is contained in:
Noah 2026-06-10 23:14:46 +02:00
parent 5393f44339
commit ec24a2f129
23 changed files with 401 additions and 376 deletions

View file

@ -1,11 +1,11 @@
<?php <?php
/**
* Aiguille vers le bon contrôleur selon la méthode HTTP
*/
function login_ctrl() function login_ctrl()
{ {
$ask_route = null; $ask_route = isset($_GET['ask']) ? htmlentities($_GET['ask']) : null;
if (isset($_GET['ask'])) {
$ask_route = htmlentities($_GET['ask']);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($_SERVER['REQUEST_METHOD'] == 'POST') {
verify_login_ctrl($ask_route); verify_login_ctrl($ask_route);
} else { } else {
@ -13,17 +13,24 @@ function login_ctrl()
} }
} }
/**
* Affichage du formulaire de connexion
*/
function login_form_ctrl(?string $route) function login_form_ctrl(?string $route)
{ {
require('views/login_views.php'); require('views/login_views.php');
login_form_view($route); login_form_view($route);
} }
/**
* Vérification du login/mot de passe
*/
function verify_login_ctrl(?string $route) function verify_login_ctrl(?string $route)
{ {
require('models/connection.php'); require('models/connection.php');
require('models/user_crud.php'); require('models/user_crud.php');
// On récupère les données du formulaire
$login = isset($_POST['login']) ? htmlentities($_POST['login']) : ''; $login = isset($_POST['login']) ? htmlentities($_POST['login']) : '';
$passwd = isset($_POST['password']) ? $_POST['password'] : ''; $passwd = isset($_POST['password']) ? $_POST['password'] : '';
@ -36,13 +43,13 @@ function verify_login_ctrl(?string $route)
$_SESSION['login'] = $user['login']; $_SESSION['login'] = $user['login'];
$_SESSION['role'] = $user['type']; $_SESSION['role'] = $user['type'];
// Si une route était demandée avant auth, on y redirige // Si une route était demandée avant connexion, on y retourne
if ($route) { if ($route) {
header('Location: index.php?route=' . $route); header('Location: index.php?route=' . $route);
exit; exit;
} }
// Sinon, redirection selon le rôle // Sinon on redirige selon le rôle
switch ($user['type']) { switch ($user['type']) {
case 'administration': case 'administration':
header('Location: index.php?route=modif_utilisateurs_form'); header('Location: index.php?route=modif_utilisateurs_form');
@ -55,14 +62,18 @@ function verify_login_ctrl(?string $route)
break; break;
} }
exit; exit;
} else { }
// Échec de l'authentification
$_SESSION['notification'] = 'Erreur d\'authentification : login ou mot de passe incorrect.'; $_SESSION['notification'] = 'Erreur d\'authentification : login ou mot de passe incorrect.';
$ask = $route ? '&ask=' . $route : ''; $ask = $route ? '&ask=' . $route : '';
header('Location: index.php?route=auth' . $ask); header('Location: index.php?route=auth' . $ask);
exit; exit;
} }
}
/**
* Déconnexion
*/
function logout_ctrl() function logout_ctrl()
{ {
session_unset(); session_unset();

View file

@ -1,40 +1,28 @@
<?php <?php
// True if user is logged (auth is right) // Vérifie si l'utilisateur est connecté
function is_logged() { function is_logged()
$status = false; {
if (isset($_SESSION['login'])) { return isset($_SESSION['login']);
$status = true;
}
return $status;
} }
// True if user has the role $role // Vérifie si l'utilisateur a un rôle précis
function has_role(string $role) { function has_role(string $role)
$status = false; {
return isset($_SESSION['role']) && $_SESSION['role'] == $role;
if (isset($_SESSION['role'])) {
if ($_SESSION['role'] == $role) {
$status = true;
}
}
return $status;
} }
// Vérifie si l'utilisateur a au moins un des rôles donnés
// True if user has at least one of the given roles
function has_any_role(array $roles): bool function has_any_role(array $roles): bool
{ {
if (!isset($_SESSION['role'])) { return isset($_SESSION['role']) && in_array($_SESSION['role'], $roles, true);
return false;
}
return in_array($_SESSION['role'], $roles, true);
} }
function verify_grants(string $route, string $role='') { // Contrôle d'accès : redirige vers auth si les droits sont insuffisants
function verify_grants(string $route, string $role = '')
{
if (!has_role($role) && !($role == '' && is_logged())) { if (!has_role($role) && !($role == '' && is_logged())) {
header('Location: index.php?route=auth&ask=' . $route); header('Location: index.php?route=auth&ask=' . $route);
exit; exit;
} }
// Nothing is done so process goes on
} }

View file

@ -1,11 +1,17 @@
<?php <?php
function contact_ctrl() { /**
* Aiguille vers le bon contrôleur selon la méthode HTTP
*/
function contact_ctrl()
{
// Réservé gestionnaire et administration
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
if (!has_any_role(['gestionnaire', 'administration'])) { if (!has_any_role(['gestionnaire', 'administration'])) {
header('Location: index.php?route=auth&ask=ajout_personnes'); header('Location: index.php?route=auth&ask=ajout_personnes');
exit; exit;
} }
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($_SERVER['REQUEST_METHOD'] == 'POST') {
contact_write_ctrl(); contact_write_ctrl();
} else { } else {
@ -13,21 +19,28 @@ function contact_ctrl() {
} }
} }
function contact_form_ctrl() { /**
* Affichage du formulaire
*/
function contact_form_ctrl()
{
require('views/contact_views.php'); require('views/contact_views.php');
} }
function contact_write_ctrl() { /**
* Enregistrement d'un nouveau sauveteur
*/
function contact_write_ctrl()
{
// Données du formulaire
$nom = $_POST['nom']; $nom = $_POST['nom'];
$prenom = $_POST['prenom']; $prenom = $_POST['prenom'];
$dep = $_POST['dep']; $dep = $_POST['dep'];
$spe = $_POST['spe']; $spe = $_POST['spe'];
$tel = $_POST['tel']; $tel = $_POST['tel'];
$date = $_POST['ladate'];
$heure = $_POST['lheure'];
// Combine date + heure en DateTime // Assemblage date + heure
$date_heure = $date . ' ' . $heure . ':00'; $date_heure = $_POST['ladate'] . ' ' . $_POST['lheure'] . ':00';
if (empty($nom) || empty($prenom) || empty($tel)) { if (empty($nom) || empty($prenom) || empty($tel)) {
$_SESSION['notification'] = 'Veuillez remplir tous les champs obligatoires.'; $_SESSION['notification'] = 'Veuillez remplir tous les champs obligatoires.';
@ -35,6 +48,7 @@ function contact_write_ctrl() {
return; return;
} }
// On écrit dans la base
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/contact_crud.php'); require('models/contact_crud.php');

View file

@ -1,41 +1,39 @@
<?php <?php
/**
* Affichage du planning
*/
function planning_afficher_ctrl() function planning_afficher_ctrl()
{ {
// Tout utilisateur connecté peut voir le planning
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
verify_grants('planning'); verify_grants('planning');
require('models/connection.php'); require('models/connection.php');
require('models/lecture_page_model.php'); require('models/lecture_page_model.php');
$pdo = connection(); $pdo = connection();
// Date du planning $date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
if (isset($_GET['date'])) {
$date = $_GET['date'];
} else {
$date = date('Y-m-d');
}
// Données depuis la base // On récupère les sauveteurs et leurs missions du jour
$sauveteurs = get_sauveteurs($pdo); $sauveteurs = get_sauveteurs($pdo);
$missions = get_missions_planning($pdo, $date); $missions = get_missions_planning($pdo, $date);
// Créneaux horaires : 0h à 24h toutes les 30 minutes // Créneaux de 30 minutes sur 24h
$creneaux = []; $creneaux = [];
for ($minutes = 0; $minutes < 1440; $minutes = $minutes + 30) { for ($minutes = 0; $minutes < 1440; $minutes += 30) {
$heures = intdiv($minutes, 60); $heures = intdiv($minutes, 60);
$mins = $minutes % 60; $mins = $minutes % 60;
$creneaux[] = sprintf('%02d:%02d', $heures, $mins); $creneaux[] = sprintf('%02d:%02d', $heures, $mins);
} }
// Regrouper les missions par sauveteur // On regroupe les missions par sauveteur
$missions_par_sauveteur = []; $missions_par_sauveteur = [];
foreach ($missions as $mission) { foreach ($missions as $mission) {
$id_sauv = $mission['ID_Sauveteur']; $missions_par_sauveteur[$mission['ID_Sauveteur']][] = $mission;
$missions_par_sauveteur[$id_sauv][] = $mission;
} }
// Affichage
require('views/lecture_page.php'); require('views/lecture_page.php');
planning_view($sauveteurs, $creneaux, $missions_par_sauveteur, $date); planning_view($sauveteurs, $creneaux, $missions_par_sauveteur, $date);
} }

View file

@ -1,31 +1,40 @@
<?php <?php
function modif_utilisateurs_form_ctrl() { /**
* Affichage du formulaire de modification de compte
*/
function modif_utilisateurs_form_ctrl()
{
// Réservé administration
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
verify_grants('modif_utilisateurs_form', 'administration'); verify_grants('modif_utilisateurs_form', 'administration');
// On charge la liste des comptes
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/modif_compte_model.php'); require('models/modif_compte_model.php');
$comptes = get_all_comptes($c); $comptes = get_all_comptes($c);
$compte_select = isset($_GET['id']) ? get_compte_by_id($c, (int) $_GET['id']) : null;
$compte_select = null;
if (isset($_GET['id'])) {
$compte_select = get_compte_by_id($c, (int) $_GET['id']);
}
require('views/modif_compte_view.php'); require('views/modif_compte_view.php');
modif_compte_view($comptes, $compte_select); modif_compte_view($comptes, $compte_select);
} }
function modif_utilisateurs_write_ctrl() { /**
* Enregistrement des modifications d'un compte
*/
function modif_utilisateurs_write_ctrl()
{
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
verify_grants('modif_utilisateurs', 'administration'); verify_grants('modif_utilisateurs', 'administration');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: index.php?route=modif_utilisateurs_form'); header('Location: index.php?route=modif_utilisateurs_form');
exit; exit;
} }
// Données du formulaire
$id = (int) $_POST['id']; $id = (int) $_POST['id'];
$nom = htmlentities($_POST['nom']); $nom = htmlentities($_POST['nom']);
$prenom = htmlentities($_POST['prenom']); $prenom = htmlentities($_POST['prenom']);
@ -35,6 +44,7 @@ function modif_utilisateurs_write_ctrl() {
$login = htmlentities($_POST['login']); $login = htmlentities($_POST['login']);
$passwd = $_POST['passwd'] ?? ''; $passwd = $_POST['passwd'] ?? '';
// On met à jour dans la base
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/modif_compte_model.php'); require('models/modif_compte_model.php');

View file

@ -1,13 +1,18 @@
<?php <?php
/**
* Affiche le formulaire d'assignation de mission
*/
function operations_form_ctrl() function operations_form_ctrl()
{ {
// Réservé gestionnaire et administration
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
if (!has_any_role(['gestionnaire', 'administration'])) { if (!has_any_role(['gestionnaire', 'administration'])) {
header('Location: index.php?route=auth&ask=operations'); header('Location: index.php?route=auth&ask=operations');
exit; exit;
} }
// On charge les sauveteurs et les statuts pour les listes déroulantes
require('models/connection.php'); require('models/connection.php');
require('models/lecture_page_model.php'); require('models/lecture_page_model.php');
$pdo = connection(); $pdo = connection();
@ -17,6 +22,9 @@ function operations_form_ctrl()
require('views/operations_view.php'); require('views/operations_view.php');
} }
/**
* Enregistre une nouvelle mission dans la base
*/
function add_operation_write_ctrl() function add_operation_write_ctrl()
{ {
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
@ -29,43 +37,32 @@ function add_operation_write_ctrl()
exit; exit;
} }
// Données du formulaire
$id_sauveteur = (int) $_POST['id_sauveteur']; $id_sauveteur = (int) $_POST['id_sauveteur'];
$id_statut = (int) $_POST['id_statut']; $id_statut = (int) $_POST['id_statut'];
$lieu = $_POST['lieu']; $lieu = $_POST['lieu'];
$date_debut = str_replace('T', ' ', $_POST['date_debut']) . ':00'; $date_debut = str_replace('T', ' ', $_POST['date_debut']) . ':00';
$en_prepa = isset($_POST['en_prepa']) ? 1 : 0; $en_prepa = isset($_POST['en_prepa']) ? 1 : 0;
$indeterminee = isset($_POST['duree_indeterminee']);
// Durée indéterminée → date très lointaine // Durée indéterminée ou fin normale
if ($indeterminee || empty($_POST['date_fin'])) { if (isset($_POST['duree_indeterminee']) || empty($_POST['date_fin'])) {
$date_fin = '2099-12-31 23:59:00'; $date_fin = '2099-12-31 23:59:00';
} else { } else {
$date_fin = str_replace('T', ' ', $_POST['date_fin']) . ':00'; $date_fin = str_replace('T', ' ', $_POST['date_fin']) . ':00';
} }
// Utilisateur connecté
$id_utilisateur = isset($_SESSION['id']) ? (int) $_SESSION['id'] : 1; $id_utilisateur = isset($_SESSION['id']) ? (int) $_SESSION['id'] : 1;
// On écrit dans la base
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/operation_crud.php'); require('models/operation_crud.php');
$resultat = create_operation_crud( $resultat = create_operation_crud($c, $date_debut, $date_fin, $lieu, $en_prepa, $id_sauveteur, $id_statut, $id_utilisateur);
$c,
$date_debut,
$date_fin,
$lieu,
$en_prepa,
$id_sauveteur,
$id_statut,
$id_utilisateur
);
if ($resultat) { $_SESSION['notification'] = $resultat
$_SESSION['notification'] = 'Mission enregistrée avec succès.'; ? 'Mission enregistrée avec succès.'
} else { : 'Erreur lors de l\'enregistrement de la mission.';
$_SESSION['notification'] = 'Erreur lors de l\'enregistrement de la mission.';
}
header('Location: index.php?route=operations'); header('Location: index.php?route=operations');
exit; exit;

View file

@ -1,39 +1,45 @@
<?php <?php
function add_utilisateurs_form_ctrl() { /**
* Affichage du formulaire de création de compte
*/
function add_utilisateurs_form_ctrl()
{
// Réservé administration
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
verify_grants('add_utilisateurs_form', 'administration'); verify_grants('add_utilisateurs_form', 'administration');
require('views/creation_compte_view.php'); require('views/creation_compte_view.php');
} }
function add_utilisateurs_write_ctrl() { /**
* Enregistrement d'un nouveau compte utilisateur
*/
function add_utilisateurs_write_ctrl()
{
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
verify_grants('add_utilisateurs', 'administration'); verify_grants('add_utilisateurs', 'administration');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: index.php?route=add_utilisateurs_form'); header('Location: index.php?route=add_utilisateurs_form');
exit; exit;
} }
$nom = $_POST['nom']; // Contrôle des caractères du login
$prenom = $_POST['prenom']; if (!preg_match('/^[a-zA-Z0-9_-]+$/', $_POST['login'])) {
$role = $_POST['role'];
$nomdep = $_POST['nomdep'];
$num_tel = $_POST['num_tel'];
$login = $_POST['login'];
$mdp = $_POST['mdp'];
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $login)) {
$_SESSION['notification'] = 'Erreur : le login contient des caractères non autorisés.'; $_SESSION['notification'] = 'Erreur : le login contient des caractères non autorisés.';
require('views/creation_compte_view.php'); require('views/creation_compte_view.php');
return; return;
} }
$mdp_hache = password_hash($mdp, PASSWORD_DEFAULT); // Hashage du mot de passe
$mdp_hache = password_hash($_POST['mdp'], PASSWORD_DEFAULT);
// On écrit dans la base
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/utilisateur_crud.php'); require('models/utilisateur_crud.php');
create_utilisateur_crud($c, $nom, $prenom, $role, $nomdep, $num_tel, $login, $mdp_hache);
create_utilisateur_crud($c, $_POST['nom'], $_POST['prenom'], $_POST['role'], $_POST['nomdep'], $_POST['num_tel'], $_POST['login'], $mdp_hache);
$_SESSION['notification'] = 'Utilisateur créé avec succès.'; $_SESSION['notification'] = 'Utilisateur créé avec succès.';
header('Location: index.php'); header('Location: index.php');

View file

@ -7,8 +7,10 @@ body {
margin: 0; margin: 0;
} }
/* HEADER */ header {
header { background: #fff; border-bottom: 1px solid #d9d2c0; } background: #fff;
border-bottom: 1px solid #d9d2c0;
}
.header-top { .header-top {
max-width: 1000px; max-width: 1000px;
@ -25,10 +27,14 @@ header { background: #fff; border-bottom: 1px solid #d9d2c0; }
font-size: 1.2rem; font-size: 1.2rem;
} }
.header-top img { height: 45px; } .header-top img {
height: 45px;
}
/* NAVIGATION */ nav {
nav { background: #f8f6f0; border-bottom: 2px solid #c49a3c; } background: #f8f6f0;
border-bottom: 2px solid #c49a3c;
}
nav ul { nav ul {
max-width: 1000px; max-width: 1000px;
@ -45,10 +51,14 @@ nav a {
text-decoration: none; text-decoration: none;
} }
nav a:hover { color: #c49a3c; } nav a:hover {
nav a.nav-right { margin-left: auto; } color: #c49a3c;
}
nav a.nav-right {
margin-left: auto;
}
/* BARRE SESSION */
.session-bar { .session-bar {
max-width: 1000px; max-width: 1000px;
margin: 0 auto; margin: 0 auto;
@ -58,7 +68,6 @@ nav a.nav-right { margin-left: auto; }
color: #8b7a5c; color: #8b7a5c;
} }
/* NOTIFICATION */
#notification { #notification {
max-width: 1000px; max-width: 1000px;
margin: 10px auto 0 auto; margin: 10px auto 0 auto;
@ -68,7 +77,6 @@ nav a.nav-right { margin-left: auto; }
border-left: 4px solid #6a9f6a; border-left: 4px solid #6a9f6a;
} }
/* CONTENU */
article { article {
max-width: 1100px; max-width: 1100px;
margin: 20px auto; margin: 20px auto;
@ -78,9 +86,11 @@ article {
border: 1px solid #e0dbce; border: 1px solid #e0dbce;
} }
article h2 { color: #3b4a2e; margin-top: 0; } article h2 {
color: #3b4a2e;
margin-top: 0;
}
/* SOUS-NAVIGATION */
.sub-nav { .sub-nav {
margin-bottom: 15px; margin-bottom: 15px;
padding-bottom: 10px; padding-bottom: 10px;
@ -94,14 +104,29 @@ article h2 { color: #3b4a2e; margin-top: 0; }
text-decoration: none; text-decoration: none;
} }
.sub-nav a:hover { text-decoration: underline; } .sub-nav a:hover {
text-decoration: underline;
}
/* TABLEAUX */ table {
table { width: 100%; border-collapse: collapse; margin: 10px 0; } width: 100%;
table th { background: #f8f6f0; color: #3b4a2e; padding: 10px; text-align: left; border-bottom: 2px solid #c49a3c; } border-collapse: collapse;
table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; } margin: 10px 0;
}
table th {
background: #f8f6f0;
color: #3b4a2e;
padding: 10px;
text-align: left;
border-bottom: 2px solid #c49a3c;
}
table td {
padding: 8px 10px;
border-bottom: 1px solid #e8e2d2;
}
/* PLANNING */
.planning-nav { .planning-nav {
margin-bottom: 15px; margin-bottom: 15px;
display: flex; display: flex;
@ -114,21 +139,24 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
text-decoration: none; text-decoration: none;
} }
.planning-nav a:hover { text-decoration: underline; } .planning-nav a:hover {
text-decoration: underline;
}
.planning-tableau { .planning-tableau {
overflow-x: auto; overflow-x: auto;
margin-bottom: 20px; margin-bottom: 20px;
} }
.planning-tableau table { margin: 0; } .planning-tableau table {
margin: 0;
}
.planning-tableau th { .planning-tableau th {
font-size: 0.7rem; font-size: 0.7rem;
padding: 5px 3px; padding: 5px 3px;
text-align: center; text-align: center;
min-width: 35px; min-width: 35px;
writing-mode: horizontal-tb;
} }
.planning-tableau td { .planning-tableau td {
@ -149,11 +177,10 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
border-right: 2px solid #c49a3c; border-right: 2px solid #c49a3c;
} }
.sauveteur-nom small { color: #8b7a5c; font-size: 0.7rem; } .sauveteur-nom small {
color: #8b7a5c;
.cell-actif { opacity: 0.85; } font-size: 0.7rem;
}
.cell-prepa { opacity: 0.4; }
.planning-legende { .planning-legende {
margin-top: 15px; margin-top: 15px;
@ -161,9 +188,16 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
border-top: 1px solid #e8e2d2; border-top: 1px solid #e8e2d2;
} }
.planning-legende h3 { font-size: 0.9rem; margin-bottom: 8px; } .planning-legende h3 {
font-size: 0.9rem;
margin-bottom: 8px;
}
.legende-item { display: inline-block; margin-right: 15px; font-size: 0.8rem; } .legende-item {
display: inline-block;
margin-right: 15px;
font-size: 0.8rem;
}
.legende-couleur { .legende-couleur {
display: inline-block; display: inline-block;
@ -174,28 +208,33 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
vertical-align: middle; vertical-align: middle;
} }
/* Couleurs des statuts (classes CSS) */ form label {
.vert { background-color: #2ecc71; } display: inline-block;
.violet { background-color: #9b59b6; } min-width: 140px;
.marron { background-color: #8B4513; } }
.jaune { background-color: #f1c40f; }
.orange { background-color: #f39c12; }
.bleu { background-color: #3498db; }
.rouge { background-color: #e74c3c; }
/* FORMULAIRES */
form label { display: inline-block; min-width: 140px; }
form input[type="text"], form input[type="text"],
form input[type="password"], form input[type="password"],
form input[type="date"], form input[type="date"],
form select { padding: 5px 10px; border: 1px solid #d0cbb8; border-radius: 4px; } form select {
form input[type="submit"] { padding: 5px 10px;
background: #c49a3c; color: #fff; border: none; border: 1px solid #d0cbb8;
padding: 8px 25px; border-radius: 4px; cursor: pointer; border-radius: 4px;
}
form input[type="submit"] {
background: #c49a3c;
color: #fff;
border: none;
padding: 8px 25px;
border-radius: 4px;
cursor: pointer;
}
form input[type="submit"]:hover {
background: #b38a2e;
} }
form input[type="submit"]:hover { background: #b38a2e; }
/* FOOTER */
footer { footer {
background: #f8f6f0; background: #f8f6f0;
border-top: 2px solid #c49a3c; border-top: 2px solid #c49a3c;
@ -205,9 +244,17 @@ footer {
font-size: 0.8rem; font-size: 0.8rem;
} }
/* RESPONSIVE */
@media (max-width: 700px) { @media (max-width: 700px) {
nav ul { flex-wrap: wrap; justify-content: center; } nav ul {
nav a { padding: 8px 15px; font-size: 0.9rem; } flex-wrap: wrap;
article { margin: 10px 5px; padding: 15px; } justify-content: center;
}
nav a {
padding: 8px 15px;
font-size: 0.9rem;
}
article {
margin: 10px 5px;
padding: 15px;
}
} }

View file

@ -1,17 +1,11 @@
<?php <?php
/**
* The front controller
* Vincent Verdon - 20240604
*/
//Loads some functions for session managment and starts the session
require('controllers/auth_utilities.php'); require('controllers/auth_utilities.php');
session_start(); session_start();
//var_dump($_SESSION);
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
ini_set('display_errors', 1);
//The requested route
$route = null; $route = null;
if (isset($_GET['route'])) { if (isset($_GET['route'])) {
$route = 'invalid'; $route = 'invalid';
@ -20,25 +14,14 @@
} }
} }
//We switch to the good controller
switch ($route) { switch ($route) {
case null: case null:
require('controllers/auth_ctrl2.php');
login_ctrl();
break;
case '': case '':
require('controllers/auth_ctrl2.php'); require('controllers/auth_ctrl2.php');
login_ctrl(); login_ctrl();
break; break;
case 'planning':
require('controllers/lecture_page_ctrl.php');
planning_afficher_ctrl();
break;
case 'auth': case 'auth':
require('controllers/auth_ctrl2.php'); require('controllers/auth_ctrl2.php');
login_ctrl(); login_ctrl();
@ -49,6 +32,11 @@
logout_ctrl(); logout_ctrl();
break; break;
case 'planning':
require('controllers/lecture_page_ctrl.php');
planning_afficher_ctrl();
break;
case 'add_utilisateurs_form': case 'add_utilisateurs_form':
require('controllers/utilisateur_ctrl.php'); require('controllers/utilisateur_ctrl.php');
add_utilisateurs_form_ctrl(); add_utilisateurs_form_ctrl();
@ -84,9 +72,7 @@
add_operation_write_ctrl(); add_operation_write_ctrl();
break; break;
default: default:
require('views/404_view.php'); require('views/404_view.php');
break; break;
} }

View file

@ -1,14 +1,11 @@
<?php <?php
/** /**
* Create a PDO connection * Crée une connexion PDO
* @return PDO * @return PDO
*/ */
function connection() { function connection(): PDO
//Loads config from file config.php {
require_once('config/config.php'); require_once('config/config.php');
return new PDO('mysql:host=' . HOST . ';dbname=' . DB, USER, PASSWORD);
//Db connection
$connex = new PDO('mysql:host=' . HOST . ';dbname=' . DB,USER , PASSWORD);
return $connex;
} }

View file

@ -1,9 +1,12 @@
<?php <?php
function create_sauveteur(PDO $c, string $nom, string $prenom, string $dep, string $spe, string $date_heure, string $tel): void { /**
* Ajoute un sauveteur dans la base
*/
function create_sauveteur(PDO $c, string $nom, string $prenom, string $dep, string $spe, string $date_heure, string $tel): void
{
$req = "INSERT INTO Sauveteur (nom, prenom, departement, specialite, DateHeureEngagement, NumTel) $req = "INSERT INTO Sauveteur (nom, prenom, departement, specialite, DateHeureEngagement, NumTel)
VALUES (:nom, :prenom, :dep, :spe, :date_heure, :tel)"; VALUES (:nom, :prenom, :dep, :spe, :date_heure, :tel)";
$prep = $c->prepare($req); $prep = $c->prepare($req);
$prep->bindValue(':nom', $nom); $prep->bindValue(':nom', $nom);
$prep->bindValue(':prenom', $prenom); $prep->bindValue(':prenom', $prenom);

View file

@ -1,19 +1,26 @@
<?php <?php
/**
* Liste des statuts (utilisé pour les select)
*/
function get_statuts(PDO $pdo): array function get_statuts(PDO $pdo): array
{ {
$sql = "SELECT ID, TypeStatut FROM Statut ORDER BY TypeStatut"; $sql = "SELECT ID, TypeStatut FROM Statut ORDER BY TypeStatut";
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
} }
/**
* Liste des sauveteurs
*/
function get_sauveteurs(PDO $pdo): array function get_sauveteurs(PDO $pdo): array
{ {
$sql = "SELECT ID, nom, prenom, specialite $sql = "SELECT ID, nom, prenom, specialite FROM Sauveteur ORDER BY nom, prenom";
FROM Sauveteur
ORDER BY nom, prenom";
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
} }
/**
* Missions d'une journée avec leur statut
*/
function get_missions_planning(PDO $pdo, string $date): array function get_missions_planning(PDO $pdo, string $date): array
{ {
$sql = "SELECT m.ID_Sauveteur, m.DateHeureDebut, m.DateHeureFin, m.EnPrepa, s.TypeStatut $sql = "SELECT m.ID_Sauveteur, m.DateHeureDebut, m.DateHeureFin, m.EnPrepa, s.TypeStatut

View file

@ -1,7 +1,10 @@
<?php <?php
// Récupère tous les comptes utilisateurs /**
function get_all_comptes(PDO $c): array { * Récupère tous les comptes utilisateurs
*/
function get_all_comptes(PDO $c): array
{
$req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur ORDER BY nom, prenom"; $req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur ORDER BY nom, prenom";
$res = $c->query($req); $res = $c->query($req);
$comptes = $res->fetchAll(PDO::FETCH_ASSOC); $comptes = $res->fetchAll(PDO::FETCH_ASSOC);
@ -9,8 +12,11 @@ function get_all_comptes(PDO $c): array {
return $comptes; return $comptes;
} }
// Récupère un compte par son ID /**
function get_compte_by_id(PDO $c, int $id): ?array { * Récupère un compte par son ID
*/
function get_compte_by_id(PDO $c, int $id): ?array
{
$req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur WHERE ID = :id"; $req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur WHERE ID = :id";
$prep = $c->prepare($req); $prep = $c->prepare($req);
$prep->bindValue(':id', $id, PDO::PARAM_INT); $prep->bindValue(':id', $id, PDO::PARAM_INT);
@ -20,8 +26,11 @@ function get_compte_by_id(PDO $c, int $id): ?array {
return $compte ?: null; return $compte ?: null;
} }
// Met à jour un compte utilisateur /**
function update_compte(PDO $c, int $id, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $passwd): void { * Met à jour un compte (mot de passe optionnel)
*/
function update_compte(PDO $c, int $id, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $passwd): void
{
$req = "UPDATE Utilisateur SET nom = :nom, prenom = :prenom, type = :role, nomdep = :dep, num_tel = :tel, login = :login WHERE ID = :id"; $req = "UPDATE Utilisateur SET nom = :nom, prenom = :prenom, type = :role, nomdep = :dep, num_tel = :tel, login = :login WHERE ID = :id";
$prep = $c->prepare($req); $prep = $c->prepare($req);
$prep->bindValue(':nom', $nom); $prep->bindValue(':nom', $nom);

View file

@ -1,13 +1,13 @@
<?php <?php
function create_operation_crud(PDO $connex, string $date_debut, string $date_fin, string $lieu, int $en_prepa, int $id_sauveteur, int $id_statut, int $id_utilisateur): bool { /**
* Insère une nouvelle mission
// On insère les données dans la table Mission avec le champ Lieu ajouté */
function create_operation_crud(PDO $connex, string $date_debut, string $date_fin, string $lieu, int $en_prepa, int $id_sauveteur, int $id_statut, int $id_utilisateur): bool
{
$req = "INSERT INTO Mission (DateHeureDebut, DateHeureFin, EnPrepa, ID_Sauveteur, ID_statut, ID_Utilisateur, Lieu) $req = "INSERT INTO Mission (DateHeureDebut, DateHeureFin, EnPrepa, ID_Sauveteur, ID_statut, ID_Utilisateur, Lieu)
VALUES (:date_debut, :date_fin, :en_prepa, :id_sauveteur, :id_statut, :id_utilisateur, :lieu)"; VALUES (:date_debut, :date_fin, :en_prepa, :id_sauveteur, :id_statut, :id_utilisateur, :lieu)";
$prep = $connex->prepare($req); $prep = $connex->prepare($req);
$prep->bindValue(':date_debut', $date_debut); $prep->bindValue(':date_debut', $date_debut);
$prep->bindValue(':date_fin', $date_fin); $prep->bindValue(':date_fin', $date_fin);
$prep->bindValue(':lieu', $lieu); $prep->bindValue(':lieu', $lieu);
@ -15,10 +15,7 @@ function create_operation_crud(PDO $connex, string $date_debut, string $date_fin
$prep->bindValue(':id_sauveteur', $id_sauveteur, PDO::PARAM_INT); $prep->bindValue(':id_sauveteur', $id_sauveteur, PDO::PARAM_INT);
$prep->bindValue(':id_statut', $id_statut, PDO::PARAM_INT); $prep->bindValue(':id_statut', $id_statut, PDO::PARAM_INT);
$prep->bindValue(':id_utilisateur', $id_utilisateur, PDO::PARAM_INT); $prep->bindValue(':id_utilisateur', $id_utilisateur, PDO::PARAM_INT);
$resultat = $prep->execute(); $resultat = $prep->execute();
$prep->closeCursor(); $prep->closeCursor();
return $resultat; return $resultat;
} }
?>

View file

@ -1,11 +1,12 @@
<?php <?php
/**
* Récupère les infos d'authentification d'un utilisateur
function recuperation_auth(PDO $connex, string $login):?array { */
function recuperation_auth(PDO $connex, string $login): ?array
{
require_once('config/config.php'); require_once('config/config.php');
$req = "SELECT ID, login, passwd, type FROM Utilisateur WHERE login = :login"; $req = "SELECT ID, login, passwd, type FROM Utilisateur WHERE login = :login";
$prep = $connex->prepare($req); $prep = $connex->prepare($req);
$prep->bindValue(':login', $login); $prep->bindValue(':login', $login);
$prep->execute(); $prep->execute();
@ -13,4 +14,3 @@ function recuperation_auth(PDO $connex, string $login):?array {
$prep->closeCursor(); $prep->closeCursor();
return $auth ?: null; return $auth ?: null;
} }

View file

@ -1,8 +1,12 @@
<?php <?php
// Crée un nouvel utilisateur (tous les champs dans Utilisateur) /**
function create_utilisateur_crud(PDO $c, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $mdp_hache): void { * Crée un nouveau compte utilisateur
$req = "INSERT INTO Utilisateur (login, passwd, type, nom, prenom, nomdep, num_tel) VALUES (:login, :passwd, :type, :nom, :prenom, :nomdep, :num_tel)"; */
function create_utilisateur_crud(PDO $c, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $mdp_hache): void
{
$req = "INSERT INTO Utilisateur (login, passwd, type, nom, prenom, nomdep, num_tel)
VALUES (:login, :passwd, :type, :nom, :prenom, :nomdep, :num_tel)";
$prep = $c->prepare($req); $prep = $c->prepare($req);
$prep->bindValue(':login', $login); $prep->bindValue(':login', $login);
$prep->bindValue(':passwd', $mdp_hache); $prep->bindValue(':passwd', $mdp_hache);

View file

@ -1,8 +1,5 @@
<?php <?php
header('Status: 404 Not Found', true, 404); header('Status: 404 Not Found', true, 404);
require('views/header.php'); require('views/header.php');
echo '<h2>Page introuvable</h2>';
echo '<h2>Page introuvable !</h2>';
require('views/footer.php'); require('views/footer.php');

View file

@ -5,18 +5,13 @@
<a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a> <a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a>
</nav> </nav>
<h2>Ajout d'un nouveau compte</h2> <h2>Créer un compte</h2>
<form action="index.php?route=add_utilisateurs" method="post"> <form action="index.php?route=add_utilisateurs" method="post">
<p><label>Nom :</label> <input type="text" name="nom" required></p>
<p><label>Prénom :</label> <input type="text" name="prenom" required></p>
<p> <p>
Nom : <input type="text" name="nom" required> <label for="role">Rôle :</label>
</p>
<p>
Prénom : <input type="text" name="prenom" required>
</p>
<p>
<label for="role">Choix du rôle :</label>
<select name="role" id="role" required> <select name="role" id="role" required>
<option value="">-- Sélectionnez un profil --</option> <option value="">-- Sélectionnez un profil --</option>
<option value="gestionnaire">Gestionnaire</option> <option value="gestionnaire">Gestionnaire</option>
@ -24,28 +19,11 @@
<option value="administration">Administration</option> <option value="administration">Administration</option>
</select> </select>
</p> </p>
<p><label>Département :</label> <input type="text" name="nomdep" required></p>
<p> <p><label>Téléphone :</label> <input type="text" name="num_tel" required></p>
NOM DEP : <input type="text" name="nomdep" required> <p><label for="login">Login :</label> <input type="text" id="login" name="login" required></p>
</p> <p><label for="mdp">Mot de passe :</label> <input type="password" id="mdp" name="mdp" required></p>
<p><input type="submit" value="Enregistrer"></p>
<p>
n°tel : <input type="text" name="num_tel" required>
</p>
<p>
<label for="login">Login :</label>
<input type="text" id="login" name="login" required>
</p>
<p>
<label for="mdp">Mot de passe :</label>
<input type="password" id="mdp" name="mdp" required>
</p>
<p>
<input type="submit" value="Enregistrer">
</p>
</form> </form>
<?php require('views/footer.php'); ?> <?php require('views/footer.php'); ?>

View file

@ -1,7 +1,6 @@
<?php <?php
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
// --- NAVIGATION selon le rôle ---
$nav = ''; $nav = '';
if (is_logged()) { if (is_logged()) {
@ -18,14 +17,12 @@ if (is_logged()) {
$nav .= '<li><a href="index.php?route=logout" class="nav-right">Déconnexion</a></li>'; $nav .= '<li><a href="index.php?route=logout" class="nav-right">Déconnexion</a></li>';
} }
// --- BARRE DE SESSION ---
if (is_logged()) { if (is_logged()) {
$session = 'Connecté : ' . htmlentities($_SESSION['login']) . ' (' . htmlentities($_SESSION['role']) . ')'; $session = 'Connecté : ' . htmlentities($_SESSION['login']) . ' (' . htmlentities($_SESSION['role']) . ')';
} else { } else {
$session = 'Non connecté'; $session = 'Non connecté';
} }
// --- NOTIFICATION ---
$notif = ''; $notif = '';
if (!empty($_SESSION['notification'])) { if (!empty($_SESSION['notification'])) {
$notif = '<div id="notification">' . htmlentities($_SESSION['notification']) . '</div>'; $notif = '<div id="notification">' . htmlentities($_SESSION['notification']) . '</div>';

View file

@ -1,11 +1,14 @@
<?php <?php
/**
* Affichage du planning avec le tableau des créneaux
*/
function planning_view(array $sauveteurs, array $creneaux, array $missions_par_sauveteur, string $date) function planning_view(array $sauveteurs, array $creneaux, array $missions_par_sauveteur, string $date)
{ {
$date_formatee = date('d/m/Y', strtotime($date)); $date_formatee = date('d/m/Y', strtotime($date));
require('views/header.php'); require('views/header.php');
// Correspondance TypeStatut (base) → couleur HTML // Couleurs associées à chaque statut
$couleurs = [ $couleurs = [
'Sauveteur disponible' => '#2ecc71', 'Sauveteur disponible' => '#2ecc71',
'Sauveteur en approche de la cavite' => '#9b59b6', 'Sauveteur en approche de la cavite' => '#9b59b6',
@ -40,7 +43,6 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
<?php foreach ($creneaux as $creneau): ?> <?php foreach ($creneaux as $creneau): ?>
<?php <?php
// Chercher si ce sauveteur a une mission sur ce créneau
$statut = null; $statut = null;
$en_prepa = false; $en_prepa = false;
@ -48,6 +50,7 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
$fin_creneau = clone $debut_creneau; $fin_creneau = clone $debut_creneau;
$fin_creneau->modify('+30 minutes'); $fin_creneau->modify('+30 minutes');
// On cherche si une mission couvre ce créneau
$liste_missions = $missions_par_sauveteur[$sauveteur['ID']] ?? []; $liste_missions = $missions_par_sauveteur[$sauveteur['ID']] ?? [];
foreach ($liste_missions as $mission) { foreach ($liste_missions as $mission) {
$debut_mission = new DateTime($mission['DateHeureDebut']); $debut_mission = new DateTime($mission['DateHeureDebut']);
@ -60,7 +63,6 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
} }
} }
// Affichage de la cellule
if ($statut === null) { if ($statut === null) {
$style = ''; $style = '';
$titre = ''; $titre = '';
@ -88,9 +90,8 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
<div class="planning-legende"> <div class="planning-legende">
<h3>Légende</h3> <h3>Légende</h3>
<span class="legende-item"> <span class="legende-item">
<span class="legende-couleur" style="background:#2ecc71;"></span> Sauveteur disponible <span class="legende-couleur" style="background:#2ecc71;"></span> Disponible
</span> </span>
<span class="legende-item"> <span class="legende-item">
<span class="legende-couleur" style="background:#9b59b6;"></span> En approche de la cavité <span class="legende-couleur" style="background:#9b59b6;"></span> En approche de la cavité
@ -108,7 +109,7 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
<span class="legende-couleur" style="background:#3498db;"></span> En repos <span class="legende-couleur" style="background:#3498db;"></span> En repos
</span> </span>
<span class="legende-item"> <span class="legende-item">
<span class="legende-couleur" style="background:#e74c3c;"></span> En brancardage civière <span class="legende-couleur" style="background:#e74c3c;"></span> Brancardage civière
</span> </span>
<span class="legende-item"> <span class="legende-item">
<span class="legende-couleur" style="background:#ccc; opacity:0.4;"></span> <span class="legende-couleur" style="background:#ccc; opacity:0.4;"></span>

View file

@ -1,15 +1,17 @@
<?php <?php
function login_form_view(?string $route) { /**
* Formulaire de connexion
*/
function login_form_view(?string $route)
{
require('views/header.php'); require('views/header.php');
echo '<h2>Connexion</h2>';
echo '<h2>Page d\'authentification</h2>'; echo '<p>Merci de vous authentifier pour accéder à l\'application.</p>';
echo '<p>Merci de vous authentifier pour accéder à cette fonctionnalité.</p>';
echo '<form action="index.php?route=auth&ask=' . $route . '" method="post">'; echo '<form action="index.php?route=auth&ask=' . $route . '" method="post">';
echo '<p><label>Login :</label> <input type="text" name="login"></p>'; echo '<p><label>Login :</label> <input type="text" name="login"></p>';
echo '<p><label>Mot de passe :</label> <input type="password" name="password"></p>'; echo '<p><label>Mot de passe :</label> <input type="password" name="password"></p>';
echo '<p><input type="submit" value="Valider"></p>'; echo '<p><input type="submit" value="Se connecter"></p>';
echo '</form>'; echo '</form>';
require('views/footer.php'); require('views/footer.php');
} }

View file

@ -1,6 +1,10 @@
<?php <?php
function modif_compte_view(array $comptes, ?array $compte_select) { /**
* Page de modification d'un compte existant
*/
function modif_compte_view(array $comptes, ?array $compte_select)
{
require('views/header.php'); require('views/header.php');
?> ?>
@ -9,12 +13,10 @@ function modif_compte_view(array $comptes, ?array $compte_select) {
<a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a> <a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a>
</nav> </nav>
<h2>Modifier un compte existant</h2> <h2>Modifier un compte</h2>
<table> <table>
<tr> <tr>
<!-- COLONNE GAUCHE : liste des comptes -->
<td style="width: 40%; vertical-align: top;"> <td style="width: 40%; vertical-align: top;">
<h3>Liste des comptes</h3> <h3>Liste des comptes</h3>
<ul> <ul>
@ -31,55 +33,37 @@ function modif_compte_view(array $comptes, ?array $compte_select) {
</ul> </ul>
</td> </td>
<!-- COLONNE DROITE : formulaire de modification -->
<td style="vertical-align: top;"> <td style="vertical-align: top;">
<h3>Modifier les informations</h3> <h3>Informations</h3>
<?php if ($compte_select !== null): ?> <?php if ($compte_select !== null): ?>
<form action="index.php?route=modif_utilisateurs" method="post"> <form action="index.php?route=modif_utilisateurs" method="post">
<input type="hidden" name="id" value="<?= $compte_select['ID'] ?>"> <input type="hidden" name="id" value="<?= $compte_select['ID'] ?>">
<p> <p><label>Nom :</label>
<label>Nom :</label> <input type="text" name="nom" size="40" value="<?= htmlentities($compte_select['nom']) ?>"></p>
<input type="text" name="nom" size="40" value="<?= htmlentities($compte_select['nom']) ?>"> <p><label>Prénom :</label>
</p> <input type="text" name="prenom" size="40" value="<?= htmlentities($compte_select['prenom']) ?>"></p>
<p> <p><label>Rôle :</label>
<label>Prénom :</label>
<input type="text" name="prenom" size="40" value="<?= htmlentities($compte_select['prenom']) ?>">
</p>
<p>
<label>Rôle :</label>
<select name="role"> <select name="role">
<option value="gestionnaire" <?= $compte_select['type'] === 'gestionnaire' ? 'selected' : '' ?>>Gestionnaire</option> <option value="gestionnaire" <?= $compte_select['type'] === 'gestionnaire' ? 'selected' : '' ?>>Gestionnaire</option>
<option value="lecture" <?= $compte_select['type'] === 'lecture' ? 'selected' : '' ?>>Lecture</option> <option value="lecture" <?= $compte_select['type'] === 'lecture' ? 'selected' : '' ?>>Lecture</option>
<option value="administration" <?= $compte_select['type'] === 'administration' ? 'selected' : '' ?>>Administration</option> <option value="administration" <?= $compte_select['type'] === 'administration' ? 'selected' : '' ?>>Administration</option>
</select> </select></p>
</p> <p><label>Département :</label>
<p> <input type="text" name="nomdep" size="10" value="<?= htmlentities($compte_select['nomdep']) ?>"></p>
<label>Département :</label> <p><label> téléphone :</label>
<input type="text" name="nomdep" size="10" value="<?= htmlentities($compte_select['nomdep']) ?>"> <input type="text" name="num_tel" size="20" value="<?= htmlentities($compte_select['num_tel']) ?>"></p>
</p> <p><label>Login :</label>
<p> <input type="text" name="login" size="40" value="<?= htmlentities($compte_select['login']) ?>"></p>
<label> téléphone :</label> <p><label>Nouveau mot de passe :</label>
<input type="text" name="num_tel" size="20" value="<?= htmlentities($compte_select['num_tel']) ?>"> <input type="password" name="passwd" size="40" placeholder="Laisser vide pour ne pas modifier"></p>
</p> <p><input type="submit" value="Enregistrer les modifications"></p>
<p>
<label>Login :</label>
<input type="text" name="login" size="40" value="<?= htmlentities($compte_select['login']) ?>">
</p>
<p>
<label>Nouveau mot de passe :</label>
<input type="password" name="passwd" size="40" placeholder="Laisser vide pour ne pas modifier">
</p>
<p>
<input type="submit" value="Enregistrer les modifications">
</p>
</form> </form>
<?php else: ?> <?php else: ?>
<p>Cliquez sur un compte dans la liste pour le modifier.</p> <p>Cliquez sur un compte dans la liste pour le modifier.</p>
<?php endif; ?> <?php endif; ?>
</td> </td>
</tr> </tr>
</table> </table>

View file

@ -1,8 +0,0 @@
<?php
require('views/header.php');
?>
<h2>Bienvenue sur l'application de gestion</h2>
<p>Ceci est le contenu central de ma page d'accueil.</p>
<?php
require('views/footer.php');
?>