Ajouter des enregistrements

Principe

Pour ajouter un nouvel enregistrement il faut :

  • Réaliser un formulaire.

  • Récupérer et enregistrer les données.

MéthodeLe formulaire

Le formulaire d'ajout correspond aux différents champs de la table que l'utilisateur doit renseigner.

1
<form action='' method='post'>
2
  <div>
3
    <label>Nom</label>
4
    <input type='text' name='nom' />
5
  </div>
6
  <div>
7
    <label>Prénom</label>
8
    <input type='text' name='prenom' />
9
  </div>
10
  <div>
11
    <label>Enregistrer</label>
12
    <input type='submit' value='cliquez pour enregistrer' />
13
  </div>
14
</form>

L'action du formulaire étant vide, c'est le fichier lui-même qui sera appelé pour traiter le formulaire.

Formulaire Ajouter

MéthodeTraitement 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.

1
<?php
2
// ouverture de la connexion
3
...
4
// traitement
5
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
6
    // création de la requête
7
    $sql = "INSERT INTO auteurs
8
              (nom, prenom)
9
            VALUES
10
              (:nom, :prenom)";
11
12
    // envoi de la requête      
13
    $statement = $db->prepare($sql);
14
    $statement->execute(['nom' => $_POST['nom'], 'prenom' => $_POST['prenom']]);
15
16
    //  redirection
17
    header("Location:afficher.php");
18
    exit();
19
}
20
?>

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.

1
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
2
...
3
}

On ajoute les variables à la table :

1
    // création de la requête
2
    $sql = "INSERT INTO auteurs
3
              (nom, prenom)
4
            VALUES
5
              (:nom, :prenom)";
6
7
    // envoi de la requête      
8
    $statement = $db->prepare($sql);
9
    $statement->execute(['nom' => $_POST['nom'], 'prenom' => $_POST['prenom']]);
10

A la fin du traitement, on peut rediriger vers une autre page  :

1
// redirection
2
header("Location:index.php");
3
exit();

MéthodeUtilisation de compact

La fonction compact permet de créer un tableau associatif à partir de clés

1
<?php
2
$nom = 'dupont';
3
$prenom = 'jean';
4
$tab = compact('nom', 'prenom'); // ['nom'=>'dupont', 'prenom'=>'jean']

Ce qui donne :

1
<?php
2
// ouverture de la connexion
3
$host = "localhost";
4
$dbname = "bdd";
5
$port = "3306";
6
$username = 'root';
7
$password = 'root';
8
9
$dsn = "mysql:host=$host;port=$port;dbname=$dbname";
10
$options = [
11
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
12
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
13
];
14
$db = new PDO($dsn, $username, $password, $options);
15
16
// traitement
17
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
18
  // création de la requête
19
  $sql = "INSERT INTO auteurs
20
              (nom, prenom)
21
            VALUES
22
              (:nom, :prenom)";
23
24
  //récupération des données
25
  $nom = $_POST['nom'] ?? '';
26
  $prenom = $_POST['prenom'] ?? '';
27
28
  // envoi de la requête      
29
  $statement = $db->prepare($sql);
30
  $statement->execute(compact('nom', 'prenom'));
31
32
  //  redirection
33
  header("Location:afficher.php");
34
  exit();
35
}
36
?>
37
38
<form action='' method='post'>
39
  <div>
40
    <label>Nom</label>
41
    <input type='text' name='nom' />
42
  </div>
43
  <div>
44
    <label>Prénom</label>
45
    <input type='text' name='prenom' />
46
  </div>
47
  <div>
48
    <label>Enregistrer</label>
49
    <input type='submit' value='cliquez pour enregistrer' />
50
  </div>
51
</form>