Modifier

page utilisateur/update.php

Nous ajoutons un fichier update.php à la racine du site, contenant un formulaire permettant de modifier un utilisateur.

Méthodeupdate.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
<?php
2
// ==============================
3
// CONNEXION À LA BASE DE DONNÉES
4
// ==============================
5
$db = require '../bdd.php';
6
7
// ==============================
8
// INCLUSION HELPERS
9
// ==============================
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’UTILISATEUR
19
// ==============================
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 :id
28
$statement->execute(['id' => $id]);
29
30
// Récupération de l’utilisateur sous forme de tableau associatif
31
$utilisateur = $statement->fetch();
32
33
// Si aucun utilisateur n’est trouvé, redirection vers la liste
34
if (!$utilisateur) {
35
    header('location:../utilisateur/index.php');
36
    exit;
37
}
38
39
// ==============================
40
// TRAITEMENT DU FORMULAIRE
41
// ==============================
42
// Vérifie si le formulaire a été soumis
43
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 formulaire
49
    $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 nom
55
    // ------------------------------
56
    $baseSlug = slug("$prenom-$nom");
57
    $slug = $baseSlug;
58
59
    $i = 1;
60
    // Requête SQL avec paramètres nommés
61
    $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 actuel
65
    $stmt->execute(['slug' => $slug]);
66
    // Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique
67
    while ($stmt->fetch()) {
68
        $slug = "{$baseSlug}_{$i}";
69
        $stmt->execute(['slug' => $slug]);
70
        $i++;
71
    }
72
73
    // ------------------------------
74
    // GESTION DE LA PHOTO
75
    // ------------------------------
76
77
    // Dossier relatif de stockage des photos
78
    // par rapport à la racine du projet
79
    $relDir =  '../';
80
    // Dossier de stockage des photos
81
    $photoDir = 'images/photos/';
82
83
    // Par défaut, on conserve la photo existante
84
    $photo = $utilisateur['photo'];
85
86
    // Création du dossier s’il n’existe pas
87
    if (!is_dir($relDir . $photoDir)) {
88
        mkdir($relDir . $photoDir, 0755, true);
89
    }
90
91
    // Chemin complet de l’ancienne photo
92
    $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 existe
99
    if ($oldSlug !== $slug && is_file($oldPathPhoto)) {
100
101
        // Récupération de l’extension du fichier
102
        $extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
103
104
        // Nouveau nom de fichier
105
        $photo = "{$photoDir}{$slug}.{$extension}";
106
107
        // Renommage du fichier sur le serveur
108
        rename($oldPathPhoto, "{$relDir}{$photo}");
109
    }
110
111
    // ------------------------------   
112
    // UPLOAD D’UNE NOUVELLE PHOTO
113
    // ------------------------------
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 existe
122
        if (is_file("{$relDir}{$photo}")) {
123
            unlink("{$relDir}{$photo}");
124
        }
125
126
        // Récupération de l’extension de la nouvelle photo
127
        $extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
128
129
        // Nouveau nom de fichier
130
        $photo = "{$photoDir}{$slug}.{$extension}";
131
132
        // Déplacement du fichier temporaire vers le dossier photos
133
        move_uploaded_file(
134
            $_FILES['photo']['tmp_name'],
135
            "{$relDir}{$photo}"
136
        );
137
    }
138
139
    // ------------------------------
140
    // MISE À JOUR EN BASE DE DONNÉES
141
    // ------------------------------
142
143
    // Requête UPDATE avec paramètres nommés
144
    $sql = "UPDATE utilisateurs 
145
            SET nom = :nom,
146
                prenom = :prenom,
147
                age = :age,
148
                slug = :slug,
149
                photo = :photo
150
            WHERE id = :id";
151
152
    // Préparation de la requête
153
    $statement = $db->prepare($sql);
154
155
    // Exécution de la requête
156
    // 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ès
163
    header('location:../utilisateur/index.php');
164
    exit;
165
}
166
167
// ==============================
168
// VARIABLES POUR LA VUE
169
// ==============================
170
171
$page_base = '../';
172
$page_title = "Modifier-{$utilisateur['nom']}";
173
$page_styles = ['utilisateur', 'card', 'form'];
174
?>
175
<!DOCTYPE html>
176
<html lang='fr'>
177
178
<?php require '../head.php' ?>
179
180
<body>
181
    <?php require '../header.php' ?>
182
183
    <main>
184
        <h1>Modifier</h1>
185
186
        <form action="" method="post" enctype="multipart/form-data">
187
            <fieldset>
188
                <?php
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
    <?php 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é.