Modification
Adaptation des fichiers pour utiliser les fonctions définies dans model.php
Méthode : utilisateur/index.php
1
2
// ==============================3
// INCLUSION DES FONCTIONS DU MODÈLE4
// ==============================5
require '../model.php';
6
7
// ==============================8
// RÉCUPÉRATION DE LA LISTE9
// ==============================10
$listeUtilisateurs = all('utilisateurs');
11
12
// ==============================13
// VARIABLES POUR LA VUE14
// ==============================15
16
// Chemin de base pour les inclusions17
$page_base = '../';
18
// Titre dynamique de la page19
$page_title = 'Afficher les utilisateurs';
20
// Feuilles de styles spécifiques à la page21
$page_styles = ['utilisateur', 'card'];
22
23
24
25
<html lang='fr'>
26
27
require "$page_base/head.php";
28
29
<body>
30
require "$page_base/header.php";
31
<main>
32
<h1>Afficher</h1>
33
<a href="utilisateur/create.php" class="btn-create">Ajouter</a>
34
35
<ul class="utilisateur-list">
36
foreach ($listeUtilisateurs as $utilisateur):
37
<li>
38
39
$card = [
40
'src' => $utilisateur['photo'],
41
'alt' => "photo de {$utilisateur['nom']} {$utilisateur['prenom']}",
42
'figcaption' => "{$utilisateur['nom']} {$utilisateur['prenom']} - {$utilisateur['age']} ans",
43
'show' => "utilisateur/show.php?id={$utilisateur['id']}",
44
'delete' => "utilisateur/delete.php?id={$utilisateur['id']}",
45
'update' => "utilisateur/update.php?id={$utilisateur['id']}"
46
];
47
require("$page_base/components/card.php");
48
49
</li>
50
endforeach;
51
</ul>
52
</main>
53
require "$page_base/footer.php";
54
</body>
55
56
</html>
Méthode : utilisateur/show.php
1
2
// ==============================3
// INCLUSION DES FONCTIONS DU MODÈLE4
// ==============================5
require '../model.php';
6
7
// ==============================8
// RÉCUPÉRATION DE L’ID 9
// ==============================10
$id = (int) ($_GET['id'] ?? 0);
11
12
// ==============================13
// RÉCUPÉRATION DE L’UTILISATEUR14
// ==============================15
16
// Récupération de l’utilisateur (tableau associatif)17
$utilisateur = find('utilisateurs', $id);
18
19
// Si aucun utilisateur n’est trouvé → redirection vers la liste20
if (!$utilisateur) {
21
header('location:../utilisateur/index.php');
22
exit();23
}
24
25
// ==============================26
// VARIABLES POUR LA VUE27
// ==============================28
29
// Chemin de base pour les inclusions30
$page_base = '../';
31
// Titre dynamique de la page32
$page_title = "Afficher-{$utilisateur['nom']}";
33
// Feuilles de styles spécifiques à la page34
$page_styles = ['utilisateur', 'card'];
35
36
37
38
<html lang='fr'>
39
40
require "$page_base/head.php"
41
42
<body>
43
require "$page_base/header.php"
44
45
<main>
46
<h1>Afficher</h1>
47
48
$card = [
49
'src' => $utilisateur['photo'],
50
'alt' => "photo de {$utilisateur['nom']} {$utilisateur['prenom']}",
51
'figcaption' => "{$utilisateur['nom']} {$utilisateur['prenom']} - {$utilisateur['age']} ans"
52
];
53
require("$page_base/components/card.php");
54
55
</main>
56
57
require "$page_base/footer.php"
58
</body>
59
60
</html>
Méthode : utilisateur/create.php
1
2
// ==============================3
// INCLUSION DES FONCTIONS DU MODÈLE4
// ==============================5
require '../model.php';
6
7
// ==============================8
// INCLUSION HELPERS9
// =============================10
require '../helpers.php';
11
12
// ==============================13
// TRAITEMENT DU FORMULAIRE14
// ==============================15
16
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
17
18
// ------------------------------19
// RÉCUPÉRATION DES DONNÉES20
// ------------------------------21
22
// Nettoyage des champs texte - supprime les espaces superflus23
$nom = trim($_POST['nom'] ?? '');
24
$prenom = trim($_POST['prenom'] ?? '');
25
26
// Cast en entier pour le champ âge27
$age = (int) ($_POST['age'] ?? 0);
28
29
// Slug qui servira à la fois pour l’URL et le nom du fichier photo30
// La fonction slug() transforme une chaîne en format compatible URL 31
// (par exemple : "Jean Dupont" → "jean-dupont")32
// On s’assure que ce slug est unique : si un enregistrement existe déjà,33
// un suffixe numérique sera ajouté pour créer un slug distinct34
$baseSlug = slug("$prenom-$nom");
35
$slug = $baseSlug;
36
37
$i = 1;
38
// Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique39
while (where('utilisateurs', ['slug' => $slug])) {
40
$slug = "{$baseSlug}_{$i}";
41
$i++;
42
}
43
44
// ------------------------------45
// GESTION DE LA PHOTO46
// ------------------------------47
48
// Dossier relatif de stockage des photos49
// par rapport à la racine du projet50
$relDir = '../';
51
// Dossier de stockage des photos52
$photoDir = 'images/photos/';
53
54
// Création du dossier s’il n’existe pas55
if (!is_dir($relDir . $photoDir)) {
56
mkdir($relDir . $photoDir, 0755, true);
57
}
58
59
// Cas 1 : une photo a été uploadée60
if (61
isset($_FILES['photo']) &&
62
is_uploaded_file($_FILES['photo']['tmp_name'])
63
) {64
65
// Récupération de l’extension du fichier (en minuscule)66
$extension = strtolower(
67
pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION)
68
);
69
70
// Nom final du fichier photo71
$photo = "{$photoDir}{$slug}.{$extension}";
72
73
// Déplacement du fichier temporaire vers le dossier photos74
move_uploaded_file(75
$_FILES['photo']['tmp_name'],
76
"{$relDir}{$photo}"
77
);
78
79
// Cas 2 : aucune photo envoyée → image par défaut80
} else {81
82
// Nom de la photo par défaut83
$photo = "{$photoDir}{$slug}.png";
84
85
// Copie de l’image générique86
copy(87
"{$relDir}{$photoDir}photo.png",
88
"{$relDir}{$photo}"
89
);
90
}
91
92
// ------------------------------93
// INSERTION EN BASE DE DONNÉES94
// ------------------------------95
96
create('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo'));
97
98
// ------------------------------99
// REDIRECTION100
// ------------------------------101
102
// Redirection après succès (évite la resoumission du formulaire)103
header('location:../utilisateur/index.php');
104
exit;105
}
106
107
// ==============================108
// VARIABLES POUR LA VUE109
// ==============================110
111
$page_base = '../';
112
$page_title = 'Ajouter un utilisateur';
113
$page_styles = ['utilisateur', 'form'];
114
115
116
117
<html lang='fr'>
118
119
require "$page_base/head.php"
120
121
<body>
122
require "$page_base/header.php"
123
<main>
124
<h1>Ajouter</h1>
125
<form action='' method='post' enctype='multipart/form-data'>
126
<fieldset>
127
<legend>Identité</legend>
128
<ul>
129
<li>
130
<label for="nom">Nom</label>
131
<input type='text' name='nom' id='nom'>
132
</li>
133
134
<li>
135
<label for="prenom">Prénom</label>
136
<input type='text' name='prenom' id='prenom'>
137
</li>
138
139
<li>
140
<label for="age">Age</label>
141
<input type='text' name='age' id='age'>
142
</li>
143
</ul>
144
</fieldset>
145
<fieldset>
146
<legend>Photo</legend>
147
<ul>
148
<li>
149
<label for="photo">Photo</label>
150
<input type='file' name='photo' id='photo'>
151
</li>
152
153
</ul>
154
</fieldset>
155
156
<section class="form-buttons">
157
<button type="submit" name="ajouter">Ajouter</button>
158
<a href="utilisateur/index.php" class="btn-cancel">Annuler</a>
159
</section>
160
161
</form>
162
</main>
163
require "$page_base/footer.php"
164
</body>
165
166
</html>
Méthode : utilisateur/update.php
1
2
// ==============================3
// INCLUSION DES FONCTIONS DU MODÈLE4
// ==============================5
require '../model.php';
6
7
// ==============================8
// INCLUSION HELPERS9
// =============================10
require '../helpers.php';
11
12
// ==============================13
// RÉCUPÉRATION DE L’ID 14
// ==============================15
$id = (int) ($_GET['id'] ?? 0);
16
17
// ==============================18
// RÉCUPÉRATION DE L’UTILISATEUR19
// ==============================20
$utilisateur = find('utilisateurs', $id);
21
22
// Si aucun utilisateur n’est trouvé, redirection vers la liste23
if (!$utilisateur) {
24
header('location:../utilisateur/index.php');
25
exit;26
}
27
28
// ==============================29
// TRAITEMENT DU FORMULAIRE30
// ==============================31
// Vérifie si le formulaire a été soumis32
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['modifier'])) {
33
34
// Sauvegarde de l’ancien slug (utile pour renommer la photo)35
$oldSlug = $utilisateur['slug'];
36
37
// Récupération et nettoyage des champs du formulaire38
$nom = trim($_POST['nom'] ?? '');
39
$prenom = trim($_POST['prenom'] ?? '');
40
$age = (int) ($_POST['age'] ?? 0);
41
42
// ------------------------------43
// Génération du slug à partir du prénom et du nom44
// ------------------------------45
$baseSlug = slug("$prenom-$nom");
46
$slug = $baseSlug;
47
48
$i = 1;
49
// Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique50
while (where('utilisateurs', ['slug' => $slug])) {
51
$slug = "{$baseSlug}_{$i}";
52
$i++;
53
}
54
55
// ------------------------------56
// GESTION DE LA PHOTO57
// ------------------------------58
59
// Dossier relatif de stockage des photos60
// par rapport à la racine du projet61
$relDir = '../';
62
// Dossier de stockage des photos63
$photoDir = 'images/photos/';
64
65
// Par défaut, on conserve la photo existante66
$photo = $utilisateur['photo'];
67
68
// Création du dossier s’il n’existe pas69
if (!is_dir($relDir . $photoDir)) {
70
mkdir($relDir . $photoDir, 0755, true);
71
}
72
73
// Chemin complet de l’ancienne photo74
$oldPathPhoto = "{$relDir}{$photo}";
75
76
// ------------------------------ 77
// RENOMMAGE DE LA PHOTO SI LE SLUG A CHANGÉ 78
// ------------------------------79
80
// Si le slug a changé et que la photo existe81
if ($oldSlug !== $slug && is_file($oldPathPhoto)) {
82
83
// Récupération de l’extension du fichier84
$extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
85
86
// Nouveau nom de fichier87
$photo = "{$photoDir}{$slug}.{$extension}";
88
89
// Renommage du fichier sur le serveur90
rename($oldPathPhoto, "{$relDir}{$photo}");
91
}
92
93
// ------------------------------94
// UPLOAD D’UNE NOUVELLE PHOTO95
// ------------------------------96
97
// Vérifie qu’un fichier a bien été envoyé98
if (99
isset($_FILES['photo']) &&
100
is_uploaded_file($_FILES['photo']['tmp_name'])
101
) {102
103
// Suppression de la photo si elle existe104
if (is_file("{$relDir}{$photo}")) {
105
unlink("{$relDir}{$photo}");
106
}
107
108
// Récupération de l’extension de la nouvelle photo109
$extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
110
111
// Nouveau nom de fichier112
$photo = "{$photoDir}{$slug}.{$extension}";
113
114
// Déplacement du fichier temporaire vers le dossier photos115
move_uploaded_file(116
$_FILES['photo']['tmp_name'],
117
"{$relDir}{$photo}"
118
);
119
}
120
121
// ------------------------------ 122
// MISE À JOUR EN BASE DE DONNÉES123
// ------------------------------124
125
update('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo', 'id'));
126
127
// Redirection après succès128
header('location:../utilisateur/index.php');
129
exit;130
}
131
132
// ==============================133
// VARIABLES POUR LA VUE134
// ==============================135
136
$page_base = '../';
137
$page_title = "Modifier-{$utilisateur['nom']}";
138
$page_styles = ['utilisateur', 'card', 'form'];
139
140
141
<html lang='fr'>
142
143
require "$page_base/head.php"
144
145
<body>
146
require "$page_base/header.php"
147
148
<main>
149
<h1>Modifier</h1>
150
151
<form action="" method="post" enctype="multipart/form-data">
152
<fieldset>
153
154
$card = [
155
'src' => $utilisateur['photo'],
156
'alt' => "photo de {$utilisateur['nom']} {$utilisateur['prenom']}",
157
'figcaption' => "{$utilisateur['nom']} {$utilisateur['prenom']} - {$utilisateur['age']} ans",
158
];
159
require("$page_base/components/card.php");
160
161
162
<label for="photo">Modifier la photo</label>
163
<input type="file" name="photo" id="photo">
164
</fieldset>
165
<fieldset>
166
<ul>
167
<li>
168
<label for="nom">Nom</label>
169
<input type="text" name="nom" id="nom" value="= $utilisateur['nom'] ">
170
</li>
171
<li>
172
<label for="prenom">Prénom</label>
173
<input type="text" name="prenom" id="prenom" value="= $utilisateur['prenom'] ">
174
</li>
175
<li>
176
<label for="age">Âge</label>
177
<input type="number" name="age" id="age" value="= $utilisateur['age'] ">
178
</li>
179
</ul>
180
</fieldset>
181
182
<section class="form-buttons">
183
<button type="submit" name="modifier">Confirmer la modification</button>
184
<a href="utilisateur/index.php" class="btn-cancel">Annuler</a>
185
</section>
186
</form>
187
188
189
</main>
190
191
require "$page_base/footer.php"
192
</body>
193
194
</html>
Méthode : utilisateur/delete.php
1
2
// ==============================3
// INCLUSION DES FONCTIONS DU MODÈLE4
// ==============================5
require '../model.php';
6
7
// ==============================8
// RÉCUPÉRATION DE L’ID 9
// ==============================10
$id = (int) ($_GET['id'] ?? 0);
11
12
// ============================== 13
// RÉCUPÉRATION DE L’UTILISATEUR 14
// ============================== 15
$utilisateur = find('utilisateurs', $id);
16
17
// Si aucun utilisateur n’est trouvé → redirection vers la liste18
if (!$utilisateur) {
19
header('location:../utilisateur/index.php');
20
exit;21
}
22
23
// ============================== 24
// TRAITEMENT DU FORMULAIRE25
// ==============================26
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['supprimer'])) {
27
// suppression de l'utilisateur28
delete('utilisateurs', $id);
29
30
// Dossier relatif de stockage des photos31
// par rapport à la racine du projet32
$relDir = '../';
33
34
// suppression de la photo si elle existe35
if (is_file("{$relDir}{$utilisateur['photo']}")) {
36
unlink("{$relDir}{$utilisateur['photo']}");
37
}
38
// redirection39
header('location:../utilisateur/index.php');
40
exit;41
}
42
// ============================== 43
// VARIABLES POUR LA VUE 44
// ==============================45
$page_base = '../';
46
$page_title = "Supprimer-{$utilisateur['nom']}";
47
$page_styles = ['utilisateur', 'card', 'form'];
48
49
50
51
<html lang='fr'>
52
53
require "$page_base/head.php"
54
55
<body>
56
require "$page_base/header.php"
57
58
<main>
59
<h1>Supprimer</h1>
60
<form action="" method="post">
61
<section class="form-buttons">
62
<button type="submit" name="supprimer">Confirmer la suppression</button>
63
<a href="utilisateur/index.php" class="btn-cancel">Annuler</a>
64
</section>
65
</form>
66
67
$card = [
68
'src' => $utilisateur['photo'],
69
'alt' => "photo de {$utilisateur['nom']} {$utilisateur['prenom']}",
70
'figcaption' => "{$utilisateur['nom']} {$utilisateur['prenom']} - {$utilisateur['age']} ans"
71
];
72
require("$page_base/components/card.php");
73
74
</main>
75
76
require "$page_base/footer.php"
77
</body>
78
79
</html>