Leçon 10 / 18

Envoyer un formulaire en POST

20 min PHP 8 — premiers scripts et formulaires Gratuit

Objectif : Configurer le formulaire d’ajout du carnet et repérer sa soumission POST côté serveur.

Un formulaire peut afficher les champs attendus et pourtant ne transmettre aucune donnée à votre application. Pour préparer l’ajout d’un contact, vous devez choisir où envoyer le formulaire et vérifier côté serveur qu’une soumission a bien eu lieu. Dans cette leçon, vous détectez la requête reçue ; la validation des champs viendra ensuite.

Configurer l’envoi du formulaire

Un formulaire HTML possède notamment un attribut action, qui désigne la page destinataire, et un attribut method, qui indique comment les champs sont transmis. Ici, le traitement se trouve dans contact-ajouter.php et la méthode choisie est post. Le navigateur envoie alors les champs du formulaire dans le corps de la requête plutôt que de les ajouter à l’adresse de la page.

La page ci-dessous réutilise l’en-tête et le pied de page déjà présents dans votre projet. Elle affiche seulement la section utile à cette étape : le formulaire d’ajout. Les champs conservent les noms prévus pour le carnet, nom, courriel et telephone ; ces noms serviront de clés pour retrouver les valeurs transmises.

contact-ajouter.phpPHP
<?php

declare(strict_types=1);

$estSoumission = ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST';
$nombreDeChampsRecus = $estSoumission ? count($_POST) : 0;

require __DIR__ . '/includes/entete.php';
?>

<section aria-labelledby="titre-contact">
  <h2 id="titre-contact">Ajouter un contact</h2>

  <?php if ($estSoumission): ?>
    <p class="carnet-message" role="status">
      Requête POST reçue. Nombre de champs transmis :
      <?= htmlspecialchars((string) $nombreDeChampsRecus, ENT_QUOTES, 'UTF-8') ?>.
    </p>
  <?php else: ?>
    <p class="carnet-message">Remplissez le formulaire pour envoyer une requête.</p>
  <?php endif; ?>

  <form class="carnet-formulaire" action="contact-ajouter.php" method="post">
    <label class="carnet-champ" for="nom">Nom</label>
    <input id="nom" name="nom" type="text" required>

    <label class="carnet-champ" for="courriel">Adresse e-mail</label>
    <input id="courriel" name="courriel" type="email" required>

    <label class="carnet-champ" for="telephone">Téléphone</label>
    <input id="telephone" name="telephone" type="tel">

    <div class="carnet-actions">
      <button type="submit">Envoyer</button>
      <button type="reset">Effacer</button>
    </div>
  </form>
</section>

<?php require __DIR__ . '/includes/pied.php'; ?>
Résultat attendu
À l’ouverture directe de contact-ajouter.php, la page invite à remplir le formulaire. Après son envoi, elle indique que la requête POST a été reçue et affiche le nombre de champs transmis.

Les champs possèdent chacun un attribut name : c’est ce nom qui identifie la donnée envoyée. L’attribut required et le type email aident le navigateur à guider la saisie, mais ne remplacent pas les contrôles côté serveur. Vous avez déjà étudié l’association entre les libellés et les champs ; ici, observez surtout la correspondance entre name et les clés reçues.

Repérer la requête côté serveur

PHP fournit la superglobale $_SERVER, qui contient des informations sur la requête en cours. La valeur $_SERVER['REQUEST_METHOD'] permet de connaître sa méthode HTTP : dans cet exemple, la comparaison stricte avec 'POST' détermine si la page a reçu une soumission. La valeur de secours '' évite de lire une clé absente.

Les champs transmis avec POST sont accessibles dans la superglobale $_POST. Le script ne lit ici que le nombre d’éléments présents : il ne montre pas et ne traite pas les valeurs reçues. Quand vous ouvrez la page sans envoyer le formulaire, la méthode n’est pas POST et le message d’invitation s’affiche. Après l’envoi, la même page reçoit la requête, détecte POST et indique le nombre de champs transmis.

Pour vérifier le parcours, ouvrez contact-ajouter.php dans votre navigateur : vous devez voir le message d’invitation. Saisissez ensuite des valeurs et envoyez le formulaire ; l’adresse reste celle de la page et le message confirme la réception de POST. Le nombre affiché correspond aux champs envoyés, et non à une validation réussie ni à un contact enregistré.

À retenir

  • L’attribut action indique la page destinataire ; method="post" transmet les champs dans une requête POST.
  • Les attributs name des champs deviennent les clés utilisées pour retrouver leurs données transmises.
  • $_SERVER['REQUEST_METHOD'] permet de distinguer une ouverture de page d’une soumission POST.
  • $_POST contient les champs reçus, mais leur présence ne prouve pas qu’ils sont valides ou enregistrés.

Dans la prochaine leçon, vous récupérerez les valeurs soumises et vous apprendrez à valider les champs côté serveur avant tout traitement.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.