Modifier

page utilisateur/update.php
Nous ajoutons un fichier update.php à la racine du site, contenant un formulaire permettant de modifier un utilisateur.
Méthode : update.php
Le fichier doit afficher un formulaire prérempli avec les valeurs actuelles de l’enregistrement et permettre leur modification.
Au début du script, on vérifie si le formulaire a été soumis.
Si des données ont été envoyées, la base de données est mise à jour ; sinon, le formulaire est simplement affiché avec les informations existantes.
1
2
// ==============================3
// CONNEXION À LA BASE DE DONNÉES4
// ==============================5
$db = require '../bdd.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
21
// Requête SQL avec paramètre nommé22
$sql = 'SELECT * FROM utilisateurs WHERE id = :id';
23
24
// Préparation de la requête (protection contre les injections SQL)25
$statement = $db->prepare($sql);
26
27
// Exécution de la requête en liant le paramètre :id28
$statement->execute(['id' => $id]);
29
30
// Récupération de l’utilisateur sous forme de tableau associatif31
$utilisateur = $statement->fetch();
32
33
// Si aucun utilisateur n’est trouvé, redirection vers la liste34
if (!$utilisateur) {
35
header('location:../utilisateur/index.php');
36
exit;37
}
38
39
// ==============================40
// TRAITEMENT DU FORMULAIRE41
// ==============================42
// Vérifie si le formulaire a été soumis43
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['modifier'])) {
44
45
// Sauvegarde de l’ancien slug (utile pour renommer la photo)46
$oldSlug = $utilisateur['slug'];
47
48
// Récupération et nettoyage des champs du formulaire49
$nom = trim($_POST['nom'] ?? '');
50
$prenom = trim($_POST['prenom'] ?? '');
51
$age = (int) ($_POST['age'] ?? 0);
52
53
// ------------------------------54
// Génération du slug à partir du prénom et du nom55
// ------------------------------56
$baseSlug = slug("$prenom-$nom");
57
$slug = $baseSlug;
58
59
$i = 1;
60
// Requête SQL avec paramètres nommés61
$sql = "SELECT * FROM utilisateurs WHERE slug = :slug";
62
// Préparation de la requête (sécurité contre les injections SQL)63
$stmt = $db->prepare($sql);
64
// Exécution de la requête avec le slug actuel65
$stmt->execute(['slug' => $slug]);
66
// Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique67
while ($stmt->fetch()) {
68
$slug = "{$baseSlug}_{$i}";
69
$stmt->execute(['slug' => $slug]);
70
$i++;
71
}
72
73
// ------------------------------74
// GESTION DE LA PHOTO75
// ------------------------------76
77
// Dossier relatif de stockage des photos78
// par rapport à la racine du projet79
$relDir = '../';
80
// Dossier de stockage des photos81
$photoDir = 'images/photos/';
82
83
// Par défaut, on conserve la photo existante84
$photo = $utilisateur['photo'];
85
86
// Création du dossier s’il n’existe pas87
if (!is_dir($relDir . $photoDir)) {
88
mkdir($relDir . $photoDir, 0755, true);
89
}
90
91
// Chemin complet de l’ancienne photo92
$oldPathPhoto = "{$relDir}{$photo}";
93
94
// ------------------------------95
// RENOMMAGE DE LA PHOTO SI SLUG MODIFIÉ96
// ------------------------------97
98
// Si le slug a changé et que la photo existe99
if ($oldSlug !== $slug && is_file($oldPathPhoto)) {
100
101
// Récupération de l’extension du fichier102
$extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
103
104
// Nouveau nom de fichier105
$photo = "{$photoDir}{$slug}.{$extension}";
106
107
// Renommage du fichier sur le serveur108
rename($oldPathPhoto, "{$relDir}{$photo}");
109
}
110
111
// ------------------------------ 112
// UPLOAD D’UNE NOUVELLE PHOTO113
// ------------------------------114
115
// Vérifie qu’un fichier a bien été envoyé116
if (117
isset($_FILES['photo']) &&
118
is_uploaded_file($_FILES['photo']['tmp_name'])
119
) {120
121
// Suppression de la photo si elle existe122
if (is_file("{$relDir}{$photo}")) {
123
unlink("{$relDir}{$photo}");
124
}
125
126
// Récupération de l’extension de la nouvelle photo127
$extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
128
129
// Nouveau nom de fichier130
$photo = "{$photoDir}{$slug}.{$extension}";
131
132
// Déplacement du fichier temporaire vers le dossier photos133
move_uploaded_file(134
$_FILES['photo']['tmp_name'],
135
"{$relDir}{$photo}"
136
);
137
}
138
139
// ------------------------------140
// MISE À JOUR EN BASE DE DONNÉES141
// ------------------------------142
143
// Requête UPDATE avec paramètres nommés144
$sql = "UPDATE utilisateurs
145
SET nom = :nom,146
prenom = :prenom,147
age = :age,148
slug = :slug,149
photo = :photo150
WHERE id = :id";151
152
// Préparation de la requête153
$statement = $db->prepare($sql);
154
155
// Exécution de la requête156
// compact() crée un tableau associatif :157
// ['nom' => $nom, 'prenom' => $prenom, ...]158
$statement->execute(
159
compact('nom', 'prenom', 'age', 'slug', 'photo', 'id')
160
);
161
162
// Redirection après succès163
header('location:../utilisateur/index.php');
164
exit;165
}
166
167
// ==============================168
// VARIABLES POUR LA VUE169
// ==============================170
171
$page_base = '../';
172
$page_title = "Modifier-{$utilisateur['nom']}";
173
$page_styles = ['utilisateur', 'card', 'form'];
174
175
176
<html lang='fr'>
177
178
require '../head.php'
179
180
<body>
181
require '../header.php'
182
183
<main>
184
<h1>Modifier</h1>
185
186
<form action="" method="post" enctype="multipart/form-data">
187
<fieldset>
188
189
$card = [
190
'src' => $utilisateur['photo'],
191
'alt' => "photo de {$utilisateur['nom']} {$utilisateur['prenom']}",
192
'figcaption' => "{$utilisateur['nom']} {$utilisateur['prenom']} - {$utilisateur['age']} ans",
193
];
194
require('../components/card.php');
195
196
197
<label for="photo">Modifier la photo</label>
198
<input type="file" name="photo" id="photo">
199
</fieldset>
200
<fieldset>
201
<ul>
202
<li>
203
<label for="nom">Nom</label>
204
<input type="text" name="nom" id="nom" value="= $utilisateur['nom'] ">
205
</li>
206
<li>
207
<label for="prenom">Prénom</label>
208
<input type="text" name="prenom" id="prenom" value="= $utilisateur['prenom'] ">
209
</li>
210
<li>
211
<label for="age">Âge</label>
212
<input type="number" name="age" id="age" value="= $utilisateur['age'] ">
213
</li>
214
</ul>
215
</fieldset>
216
217
<section class="form-buttons">
218
<button type="submit" name="modifier">Confirmer la modification</button>
219
<a href="utilisateur/index.php" class="btn-cancel">Annuler</a>
220
</section>
221
</form>
222
223
224
</main>
225
226
require '../footer.php'
227
</body>
228
229
</html>
1
<input type="text" name="nom" value="= $utilisateur['nom'] ">
Permet d'afficher la valeur actuelle de l'utilisateur
1
UPDATE utilisateurs SET nom = :nom,prenom = :prenom, age = :age, slug = :slug, photo = :photo WHERE id = :id
Requête SQL pour mettre à jour les informations de l’utilisateur correspondant à l’id spécifié.