Accueil › Cours › PHP : les formulaires
PHP : formulaires, $_GET, $_POST et contrôle des données
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
- Envoyer un formulaire
- Contrôler les données
- Plusieurs pages
Leçon 31.1 : Envoyer un formulaire
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";
?>
method="post": les valeurs arrivent dans$_POST, invisibles dans l'adresse.method="get": dans$_GET, visibles dans l'adresse (traitement.php?prenom=Rim).- Une case à cocher n'est envoyée que si elle est cochée : on le teste avec
isset($_POST["tva"]). - Des boutons radio du même
nameenvoient lavaluede celui qui est choisi ; une liste<select name="ville">envoie lavaluede l'option choisie.
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
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.
trim($ch)enlève les espaces au début et à la fin.empty($x)est vrai si$xest vide (ou"0").is_numeric($x): est-ce un nombre ?strlen($ch): la longueur d'une chaîne.- Un formulaire peut s'envoyer à sa propre page (
action="") : on teste alorsisset($_POST["envoyer"])pour savoir s'il vient d'être envoyé.
<?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
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.
← 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.