Ajouter des enregistrements
Principe
Pour ajouter un nouvel enregistrement il faut :
Réaliser un formulaire.
Récupérer et enregistrer les données.
Méthode : Le formulaire
Le formulaire d'ajout correspond aux différents champs de la table que l'utilisateur doit renseigner.
<form action='' method='post'>
<div>
<label>Nom</label>
<input type='text' name='nom' />
</div>
<div>
<label>Prénom</label>
<input type='text' name='prenom' />
</div>
<div>
<label>Enregistrer</label>
<input type='submit' value='cliquez pour enregistrer' />
</div>
</form>
L'action du formulaire étant vide, c'est le fichier lui-même qui sera appelé pour traiter le formulaire.
Méthode : Traitement du formulaire
Le traitement du formulaire se fait dans le haut de la page.
La difficulté est de comprendre que l'on traite le formulaire envoyé par la page précédente.
// ouverture de la connexion
...
// traitement
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// création de la requête
$sql = "INSERT INTO auteurs
(nom, prenom)
VALUES
(:nom, :prenom)";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute(['nom' => $_POST['nom'], 'prenom' => $_POST['prenom']]);
// redirection
header("Location:afficher.php");
exit();
}
On réalise le traitement que si c'est le formulaire qui a appelé la page.
C'est à dire, si des données ont été envoyées par la méthode POST.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
...
}
On ajoute les variables à la table :
// création de la requête
$sql = "INSERT INTO auteurs
(nom, prenom)
VALUES
(:nom, :prenom)";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute(['nom' => $_POST['nom'], 'prenom' => $_POST['prenom']]);
A la fin du traitement, on peut rediriger vers une autre page :
// redirection
header("Location:index.php");
exit();
Méthode : Utilisation de compact
La fonction compact permet de créer un tableau associatif à partir de clés
<?php
$nom = 'dupont';
$prenom = 'jean';
$tab = compact('nom', 'prenom'); // ['nom'=>'dupont', 'prenom'=>'jean']
Ce qui donne :
// ouverture de la connexion
$host = "localhost";
$dbname = "bdd";
$port = "3306";
$username = 'root';
$password = 'root';
$dsn = "mysql:host=$host;port=$port;dbname=$dbname";
$options = [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
];
$db = new PDO($dsn, $username, $password, $options);
// traitement
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// création de la requête
$sql = "INSERT INTO auteurs
(nom, prenom)
VALUES
(:nom, :prenom)";
//récupération des données
$nom = $_POST['nom'] ?? '';
$prenom = $_POST['prenom'] ?? '';
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute(compact('nom', 'prenom'));
// redirection
header("Location:afficher.php");
exit();
}
<form action='' method='post'>
<div>
<label>Nom</label>
<input type='text' name='nom' />
</div>
<div>
<label>Prénom</label>
<input type='text' name='prenom' />
</div>
<div>
<label>Enregistrer</label>
<input type='submit' value='cliquez pour enregistrer' />
</div>
</form>