Modification

Adaptation des fichiers pour utiliser les fonctions définies dans model.php

Méthodeutilisateur/index.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
5
require '../model.php';
6
7
// ==============================
8
// RÉCUPÉRATION DE LA LISTE
9
// ==============================
10
$listeUtilisateurs = all('utilisateurs');
11
12
// ==============================
13
// VARIABLES POUR LA VUE
14
// ==============================
15
16
// Chemin de base pour les inclusions
17
$page_base = '../';
18
// Titre dynamique de la page
19
$page_title = 'Afficher les utilisateurs';
20
// Feuilles de styles spécifiques à la page
21
$page_styles = ['utilisateur', 'card'];
22
?>
23
24
<!DOCTYPE html>
25
<html lang='fr'>
26
27
<?php require "$page_base/head.php"; ?>
28
29
<body>
30
    <?php 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
            <?php foreach ($listeUtilisateurs as $utilisateur): ?>
37
                <li>
38
                    <?php
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
            <?php endforeach; ?>
51
        </ul>
52
    </main>
53
    <?php require "$page_base/footer.php"; ?>
54
</body>
55
56
</html>

Méthodeutilisateur/show.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
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
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 liste
20
if (!$utilisateur) {
21
    header('location:../utilisateur/index.php');
22
    exit();
23
}
24
25
// ==============================
26
// VARIABLES POUR LA VUE
27
// ==============================
28
29
// Chemin de base pour les inclusions
30
$page_base = '../';
31
// Titre dynamique de la page
32
$page_title = "Afficher-{$utilisateur['nom']}";
33
// Feuilles de styles spécifiques à la page
34
$page_styles = ['utilisateur', 'card'];
35
?>
36
37
<!DOCTYPE html>
38
<html lang='fr'>
39
40
<?php require "$page_base/head.php" ?>
41
42
<body>
43
    <?php require "$page_base/header.php" ?>
44
45
    <main>
46
        <h1>Afficher</h1>
47
        <?php
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
    <?php require "$page_base/footer.php" ?>
58
</body>
59
60
</html>

Méthodeutilisateur/create.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
5
require '../model.php';
6
7
// ==============================
8
// INCLUSION HELPERS
9
// =============================
10
require '../helpers.php';
11
12
// ==============================
13
// TRAITEMENT DU FORMULAIRE
14
// ==============================
15
16
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
17
18
  // ------------------------------
19
  // RÉCUPÉRATION DES DONNÉES
20
  // ------------------------------
21
22
  // Nettoyage des champs texte - supprime les espaces superflus
23
  $nom = trim($_POST['nom'] ?? '');
24
  $prenom = trim($_POST['prenom'] ?? '');
25
26
  // Cast en entier pour le champ âge
27
  $age = (int) ($_POST['age'] ?? 0);
28
29
  // Slug qui servira à la fois pour l’URL et le nom du fichier photo
30
  // 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 distinct
34
  $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érique
39
  while (where('utilisateurs', ['slug' => $slug])) {
40
    $slug = "{$baseSlug}_{$i}";
41
    $i++;
42
  }
43
44
  // ------------------------------
45
  // GESTION DE LA PHOTO
46
  // ------------------------------
47
48
  // Dossier relatif de stockage des photos
49
  // par rapport à la racine du projet
50
  $relDir =  '../';
51
  // Dossier de stockage des photos
52
  $photoDir = 'images/photos/';
53
54
  // Création du dossier s’il n’existe pas
55
  if (!is_dir($relDir . $photoDir)) {
56
    mkdir($relDir . $photoDir, 0755, true);
57
  }
58
59
  // Cas 1 : une photo a été uploadée
60
  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 photo
71
    $photo = "{$photoDir}{$slug}.{$extension}";
72
73
    // Déplacement du fichier temporaire vers le dossier photos
74
    move_uploaded_file(
75
      $_FILES['photo']['tmp_name'],
76
      "{$relDir}{$photo}"
77
    );
78
79
    // Cas 2 : aucune photo envoyée → image par défaut
80
  } else {
81
82
    // Nom de la photo par défaut
83
    $photo = "{$photoDir}{$slug}.png";
84
85
    // Copie de l’image générique
86
    copy(
87
      "{$relDir}{$photoDir}photo.png",
88
      "{$relDir}{$photo}"
89
    );
90
  }
91
92
  // ------------------------------
93
  // INSERTION EN BASE DE DONNÉES
94
  // ------------------------------
95
96
  create('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo'));
97
98
  // ------------------------------
99
  // REDIRECTION
100
  // ------------------------------
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 VUE
109
// ==============================
110
111
$page_base = '../';
112
$page_title = 'Ajouter un utilisateur';
113
$page_styles = ['utilisateur', 'form'];
114
?>
115
116
<!DOCTYPE html>
117
<html lang='fr'>
118
119
<?php require "$page_base/head.php" ?>
120
121
<body>
122
  <?php 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
  <?php require "$page_base/footer.php" ?>
164
</body>
165
166
</html>

Méthodeutilisateur/update.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
5
require '../model.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
$utilisateur = find('utilisateurs', $id);
21
22
// Si aucun utilisateur n’est trouvé, redirection vers la liste
23
if (!$utilisateur) {
24
    header('location:../utilisateur/index.php');
25
    exit;
26
}
27
28
// ==============================
29
// TRAITEMENT DU FORMULAIRE
30
// ==============================
31
// Vérifie si le formulaire a été soumis
32
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 formulaire
38
    $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 nom
44
    // ------------------------------
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érique
50
    while (where('utilisateurs', ['slug' => $slug])) {
51
        $slug = "{$baseSlug}_{$i}";
52
        $i++;
53
    }
54
55
    // ------------------------------
56
    // GESTION DE LA PHOTO
57
    // ------------------------------
58
59
    // Dossier relatif de stockage des photos
60
    // par rapport à la racine du projet
61
    $relDir =  '../';
62
    // Dossier de stockage des photos
63
    $photoDir = 'images/photos/';
64
65
    // Par défaut, on conserve la photo existante
66
    $photo = $utilisateur['photo'];
67
68
    // Création du dossier s’il n’existe pas
69
    if (!is_dir($relDir . $photoDir)) {
70
        mkdir($relDir . $photoDir, 0755, true);
71
    }
72
73
    // Chemin complet de l’ancienne photo
74
    $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 existe
81
    if ($oldSlug !== $slug && is_file($oldPathPhoto)) {
82
83
        // Récupération de l’extension du fichier
84
        $extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
85
86
        // Nouveau nom de fichier
87
        $photo = "{$photoDir}{$slug}.{$extension}";
88
89
        // Renommage du fichier sur le serveur
90
        rename($oldPathPhoto, "{$relDir}{$photo}");
91
    }
92
93
    // ------------------------------
94
    // UPLOAD D’UNE NOUVELLE PHOTO
95
    // ------------------------------
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 existe
104
        if (is_file("{$relDir}{$photo}")) {
105
            unlink("{$relDir}{$photo}");
106
        }
107
108
        // Récupération de l’extension de la nouvelle photo
109
        $extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
110
111
        // Nouveau nom de fichier
112
        $photo = "{$photoDir}{$slug}.{$extension}";
113
114
        // Déplacement du fichier temporaire vers le dossier photos
115
        move_uploaded_file(
116
            $_FILES['photo']['tmp_name'],
117
            "{$relDir}{$photo}"
118
        );
119
    }
120
121
    // ------------------------------   
122
    // MISE À JOUR EN BASE DE DONNÉES
123
    // ------------------------------
124
125
    update('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo', 'id'));
126
127
    // Redirection après succès
128
    header('location:../utilisateur/index.php');
129
    exit;
130
}
131
132
// ==============================
133
// VARIABLES POUR LA VUE
134
// ==============================
135
136
$page_base = '../';
137
$page_title = "Modifier-{$utilisateur['nom']}";
138
$page_styles = ['utilisateur', 'card', 'form'];
139
?>
140
<!DOCTYPE html>
141
<html lang='fr'>
142
143
<?php require "$page_base/head.php" ?>
144
145
<body>
146
    <?php 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
                <?php
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
    <?php require "$page_base/footer.php" ?>
192
</body>
193
194
</html>

Méthodeutilisateur/delete.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
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 liste
18
if (!$utilisateur) {
19
    header('location:../utilisateur/index.php');
20
    exit;
21
}
22
23
// ============================== 
24
// TRAITEMENT DU FORMULAIRE
25
// ==============================
26
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['supprimer'])) {
27
    // suppression de l'utilisateur
28
    delete('utilisateurs', $id);
29
30
    // Dossier relatif de stockage des photos
31
    // par rapport à la racine du projet
32
    $relDir =  '../';
33
34
    // suppression de la photo si elle existe
35
    if (is_file("{$relDir}{$utilisateur['photo']}")) {
36
        unlink("{$relDir}{$utilisateur['photo']}");
37
    }
38
    // redirection
39
    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
<!DOCTYPE html>
51
<html lang='fr'>
52
53
<?php require "$page_base/head.php" ?>
54
55
<body>
56
    <?php 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
        <?php
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
    <?php require "$page_base/footer.php" ?>
77
</body>
78
79
</html>