Ajouter

Nous ajoutons un fichier create.php à la racine du site. Ce fichier contient un formulaire qui permet d'ajouter une nouvelle personne.

Méthodecreate.php

La première partie du fichier contient le traitement des données du formulaire.

La deuxième partie contient le formulaire.

1
<?php
2
require 'bdd.php';
3
$page_title = 'Ajouter';
4
5
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
6
7
    // récupération des données du formulaire
8
    $nom = $_POST['nom'] ?? '';
9
    $prenom = $_POST['prenom'] ?? '';
10
    $age = (int) $_POST['age'] ?? 0;
11
    $slug = $_POST['slug'] ?? '';
12
13
    // création de la requête
14
    $sql = "INSERT INTO personnes
15
              (nom, prenom, age, slug)
16
            VALUES
17
              (:nom, :prenom, :age, :slug)";
18
19
    // envoi de la requête
20
    $statement = $db->prepare($sql);
21
    $statement->execute(compact('nom', 'prenom', 'age', 'slug'));
22
23
    $id = $db->lastInsertId();
24
25
    // récupération de la photo si elle existe
26
    if (isset($_FILES['photo']) && is_uploaded_file($_FILES['photo']['tmp_name'])) {
27
        $photo = $id . "_" . $slug . "." . strtolower(pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION));
28
        $origine = $_FILES['photo']['tmp_name'];
29
        $destination = "photos/$photo";
30
        move_uploaded_file($origine, $destination);
31
        // si la photo n'existe pas on copie la photo par defaut
32
    } else {
33
        $photo = $id . "_" . $slug . ".png";
34
        $origine = 'photos/photo.png';
35
        $destination = "photos/$photo";
36
        copy($origine, $destination);
37
    }
38
    // modification photo
39
    $sql = "UPDATE personnes SET 
40
            photo = :photo                  
41
          WHERE id = :id";
42
43
    // envoi de la requête
44
    $statement = $db->prepare($sql);
45
    $statement->execute(compact('photo', 'id'));
46
47
    // redirection
48
    header('location:personnes.php');
49
    exit();
50
}
51
?>
52
<!DOCTYPE html>
53
<html lang='fr'>
54
55
<?php require 'head.php'; ?>
56
57
<body>
58
    <?php require 'header.php'; ?>
59
    <main>
60
        <h1>Ajouter</h1>
61
        <form action='' method='post' enctype='multipart/form-data'>
62
63
            <div>
64
                <span>Nom</span>
65
                <input type='text' name='nom'>
66
            </div>
67
68
            <div>
69
                <span>Prénom</span>
70
                <input type='text' name='prenom'>
71
            </div>
72
73
            <div>
74
                <span>Age</span>
75
                <input type='text' name='age'>
76
            </div>
77
78
            <div>
79
                <span>Slug</span>
80
                <input type='text' name='slug'>
81
            </div>
82
83
            <div>
84
                <span>Photo</span>
85
                <input type='file' name='photo'>
86
            </div>
87
88
            <div>
89
                <button type='submit' name='ajouter'>Ajouter</button>
90
                <a href='personnes.php'><button type='button'>Annuler</button></a>
91
            </div>
92
93
        </form>
94
    </main>
95
    <?php require 'footer.php'; ?>
96
</body>
97
98
</html>
1
<form action="" method="post" enctype="multipart/form-data">

Envoie des données par méthode POST, possibilité d'envoyer des fichier (enctype). La validation du formulaire appellera la même url que celle du fichier sur lequel on se trouve (action vide).

1
<input type="text" name="nom">

L’attribut name permet de définir le nom de la variable transmise.

1
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter']))

Pour traiter les données, on vérifie que l'on a reçu des données après un appui sur le bouton ajouter.

1
$nom = $_POST['nom'] ?? ""

On récupère les valeurs du formulaire. Si la clé n'existe pas, on met la valeur vide par défaut.

1
INSERT INTO personnes (nom, prenom, age, slug) VALUES (:nom, :prenom, :age, :slug)

Requête sql d'ajout de la personne

1
compact('nom', 'prenom', 'age', 'slug')

Génère le tableau associatif : ['nom'=>$nom, 'prenom'=>$prenom, 'age'=>$age, 'slug'=>$slug]

1
$id = $db->lastInsertId();

Récupère l'identifiant de la dernière personne ajoutée.