Mission Carthage

Accueil › Cours › PHP : les formulaires

PHP : formulaires, $_GET, $_POST et contrôle des données

Chapitre 31 · Bac SI

Reçois les données d'un formulaire avec $_POST et $_GET, contrôle-les, et relie plusieurs pages avec require, des liens et des redirections.

Les leçons de ce chapitre

  1. Envoyer un formulaire
  2. Contrôler les données
  3. Plusieurs pages

Leçon 31.1 : Envoyer un formulaire

12 min

Un formulaire HTML envoie ses champs à une page PHP. L'attribut action dit quelle page les reçoit, method comment (post ou get), et chaque champ est rangé sous son attribut name.

<form action="traitement.php" method="post">
  <input type="text" name="prenom">
  <input type="submit" name="envoyer" value="Envoyer">
</form>
<?php
$prenom = $_POST["prenom"];
echo "Bonjour $prenom";
?>

Attention : Le nom dans $_POST["..."] doit être exactement l'attribut name du champ. Sinon PHP écrit « Warning: Undefined array key ».

En PHP

Lance le site, remplis le formulaire et envoie-le : traitement.php reçoit les champs. Ajoute un champ ville au formulaire et affiche-le dans traitement.php.

<?php
$nom = $_POST["nom"];
$prenom = $_POST["prenom"];
echo "<h1>Merci $prenom $nom</h1>";
echo '<p><a href="index.html">Retour au formulaire</a></p>';
?>

Leçon 31.2 : Contrôler les données

12 min

Le serveur ne doit jamais faire confiance à ce qu'il reçoit : un champ peut être vide, contenir des espaces ou un texte à la place d'un nombre. On vérifie avant d'utiliser.

<?php
$prenom = trim($_POST["prenom"]);
$note = $_POST["note"];
if (empty($prenom)) {
  echo "Le prénom est obligatoire";
} elseif (!is_numeric($note)) {
  echo "La note doit être un nombre";
} else {
  echo "Merci $prenom";
}
?>

Astuce : Le JavaScript vérifie aussi le formulaire avant l'envoi, mais il peut être contourné : la vérification PHP, sur le serveur, est celle qui compte.

En PHP

Ici le formulaire s'envoie à sa propre page. Envoie-le vide, puis avec une note en lettres, puis correctement.

<!DOCTYPE html>
<html lang="fr">
<head><meta charset="utf-8"><title>Contrôle</title></head>
<body>
<form action="" method="post">
  <p>Prénom : <input type="text" name="prenom"></p>
  <p>Note : <input type="text" name="note"></p>
  <p><input type="submit" name="envoyer" value="Envoyer"></p>
</form>
<?php
if (isset($_POST["envoyer"])) {
  $prenom = trim($_POST["prenom"]);
  $note = $_POST["note"];
  if (empty($prenom)) {
    echo "<p>Le prénom est obligatoire</p>";
  } elseif (!is_numeric($note)) {
    echo "<p>La note doit être un nombre</p>";
  } else {
    echo "<p>Merci $prenom</p>";
  }
}
?>
</body>
</html>

Leçon 31.3 : Plusieurs pages

12 min

Inclure un fichier : require

require "fonctions.php"; insère un autre fichier PHP à cet endroit : ses fonctions et ses variables deviennent utilisables. On y range ce qui sert dans plusieurs pages (la connexion à la base, les fonctions communes). Si le fichier manque, la page s'arrête.

Liens avec paramètres

<?php
echo '<a href="detail.php?id=3">Voir le produit 3</a>';
?>

Un lien peut porter des valeurs : detail.php?id=3. La page detail.php les lit dans $_GET["id"]. C'est ainsi qu'une liste mène à la page de chaque élément.

Rediriger : header

<?php
header("Location: accueil.php");
exit;
?>

Attention : header("Location: …") envoie le navigateur vers une autre page. Mets exit; juste après : sinon la suite du script s'exécute quand même.

En PHP

Lance le site : index.php utilise une fonction de fonctions.php, et chaque lien ouvre detail.php avec son id. Ajoute un produit au tableau de fonctions.php.

<?php
require "fonctions.php";
echo "<h1>Nos produits</h1>";
foreach (produits() as $id => $p) {
  echo '<p><a href="detail.php?id=' . $id . '">' . $p . '</a></p>';
}
?>

S'entraîner gratuitement

Chaque leçon a 3 exercices gratuits avec indices pour appliquer ce chapitre avec Hannibot.

Ouvrir le chapitre dans Mission Carthage Essayer dans le compilateur en ligne

← Chapitre précédent : PHP : premiers scripts · Chapitre suivant : PHP et MySQL →

Tous les chapitres · Voir les devoirs corrigés de 2ème TI

Cours écrit pour Mission Carthage d'après le programme officiel. Ton professeur reste la référence.