Ajouter
Nous ajoutons un fichier create.php à la racine du site. Ce fichier contient un formulaire qui permet d'ajouter une nouvelle personne.
Méthode : create.php
La première partie du fichier contient le traitement des données du formulaire.
La deuxième partie contient le formulaire.
require 'bdd.php';
$page_title = 'Ajouter';
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
// récupération des données du formulaire
$nom = $_POST['nom'] ?? '';
$prenom = $_POST['prenom'] ?? '';
$age = (int) $_POST['age'] ?? 0;
$slug = $_POST['slug'] ?? '';
// création de la requête
$sql = "INSERT INTO personnes
(nom, prenom, age, slug)
VALUES
(:nom, :prenom, :age, :slug)";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute(compact('nom', 'prenom', 'age', 'slug'));
$id = $db->lastInsertId();
// récupération de la photo si elle existe
if (isset($_FILES['photo']) && is_uploaded_file($_FILES['photo']['tmp_name'])) {
$photo = $id . "_" . $slug . "." . strtolower(pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION));
$origine = $_FILES['photo']['tmp_name'];
$destination = "photos/$photo";
move_uploaded_file($origine, $destination);
// si la photo n'existe pas on copie la photo par defaut
} else {
$photo = $id . "_" . $slug . ".png";
$origine = 'photos/photo.png';
$destination = "photos/$photo";
copy($origine, $destination);
}
// modification photo
$sql = "UPDATE personnes SET
photo = :photo
WHERE id = :id";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute(compact('photo', 'id'));
// redirection
header('location:personnes.php');
exit();
}
<html lang='fr'>
require 'head.php';
<body>
require 'header.php';
<main>
<h1>Ajouter</h1>
<form action='' method='post' enctype='multipart/form-data'>
<div>
<span>Nom</span>
<input type='text' name='nom'>
</div>
<div>
<span>Prénom</span>
<input type='text' name='prenom'>
</div>
<div>
<span>Age</span>
<input type='text' name='age'>
</div>
<div>
<span>Slug</span>
<input type='text' name='slug'>
</div>
<div>
<span>Photo</span>
<input type='file' name='photo'>
</div>
<div>
<button type='submit' name='ajouter'>Ajouter</button>
<a href='personnes.php'><button type='button'>Annuler</button></a>
</div>
</form>
</main>
require 'footer.php';
</body>
</html>
<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).
<input type="text" name="nom">
L’attribut name permet de définir le nom de la variable transmise.
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.
$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.
INSERT INTO personnes (nom, prenom, age, slug) VALUES (:nom, :prenom, :age, :slug)
Requête sql d'ajout de la personne
compact('nom', 'prenom', 'age', 'slug')
Génère le tableau associatif : ['nom'=>$nom, 'prenom'=>$prenom, 'age'=>$age, 'slug'=>$slug]
$id = $db->lastInsertId();
Récupère l'identifiant de la dernière personne ajoutée.