logo du langage PHP Les bases du langage PHP

Chapitre 16 - Méthode POST

Documentation officielle

La Superglobale $_POST permet de transmettre les données récoltées dans un formulaire, vers ma base de données ou vers une autre page

Pour ce chapitre, je vais récupérer ces données sur cette même page. Si j'avais voulu les récupérer sur une autre, j'aurais eu à renseigner l'attribut action (exemple: <form action="monAutrePage.php"> )

Remarque

Il est souvent utile de faire un print_r($_POST) (dans la balise <pre> ) pour vérifier que je récupère bien les données envoyées par mon formulaire. C'est un bon moyen pour vérifier et cibler un bug

Voici le code pour le formulaire


<form method="POST" action="">
  <div class="form-group">
    <label for="prenom">Prénom</label>
    <input class="form-control col-md-3" type="text" name="prenom" id="prenom" placeholder="Votre prénom">

    <label for="description">Description</label>
    <textarea  class="form-control col-md-3" name="description" id="description" rows="3" placeholder="Description">
    </textarea>

    <label for="annee">Année de naissance</label>
    <select  class="form-control col-md-2" name="annee" id="annee">
    <?php
    for($i = date('Y'); $i= date('Y') - 100; $i--){
      echo '<option>' . $i . '</option>';
    }
    ?>
    </select>
  </div>
  <button type="submit" class="btn btn-primary">Envoyer</button>
</form>

Dans la balise <form>, pour l'attribut method, POST devra etre renseigné (et rien pour action, dans la mesure où je récupère les données sur cette même page)

Autre précision, qui concerne l'attribut name des input, textarea etc... C'est lui qui sera récupéré dans le script PHP. Et non pas l'attribut id, qui, si il a une importance, n'entrera pas en ligne de compte dans mon script. Il est en fait lié au for du label ... ils doivent correspondrent

Toute page qui affichera les données collectées, comme pour $_GET, devra débuter par un if($_POST). Sinon elle génèrera une erreur PHP, les données n'étant pas (encore) envoyées (au moment du premier appel de la page)

Remarque

Si je dois scripter plusieurs formulaires sur une même page, alors il sera nécessaire de donner un name au bouton submit. Ainsi, je pourrais crocheter ce nom dans le if($_POST['nomDuBouton']) . Sans cela, tous mes formulaires seront activés en même temps, sans discernement

Voici la syntaxe (contractée) pour récupérer mes données envoyées dans le formulaire


<?php if($_POST): ?>
<ul class="list-group mt-4">
  <li class="list-group-item">
    <h5>Prénom: <?= $_POST['prenom'] ?></h5>
  </li>
  <li class="list-group-item">
    <h5>Description: <?= $_POST['description'] ?></h5>
  </li>
  <li class="list-group-item">
    <h5>Année de naissance: <?= $_POST['annee'] ?></h5>
  </li>
</ul>
<?php endif; ?>

Comme pour $_GET, les données sont stockées dans un array. Pour les récupérer, ma syntaxe devra utiliser les crochets [ ]


Le résultat apparaitra ci-dessous