Une question récurrente que se posent les débutants en PHP concerne les formulaires : comment les gère-t'on ? Comment r�cup�re-t'on les valeurs saisies soit pour les traiter, soit pour les r�afficher ? R�ponses ci-dessous...
Introduction
Avant de rentrer dans le d�tail des r�ponses, je veut faire un petit rappel. Les formulaires (balises <form>...</form>) et les éléments que l'on peut y mettre (<input>, <select>, <textarea>, ...) sont des éléments HTML, ils obéissent à certaines règles liées au protocole HTTP.
Sans rentrer trop dans les détails, cela veut dire qu'un formulaire HTML obéit à des règles et fonctionnements qui sont indépendant du PHP, et qui s'appliquent aussi aux autres langages présents sur le Net (ASP, JSP, ...).
La balise d'ouverture d'un formulaire a un minimum de deux attributs à renseigner.
Le premier est l'attribut ACTION, il permet de dire vers quelle page ou quel script le contenu sera transmis.
Exemple minimaliste et incomplet :
<form action="traitement.php">[ ... ]</form>
Exemple en utilisant PHP pour donner à l'attribut ACTION le nom de la page en cours :
Le second attribut minimum d'un formulaire est l'attribut METHOD. Il sert à spécifier quelle sera la méthode employée pour transmettre les données vers la page contenue dans l'attribut ACTION. Il n'existe que deux méthodes possibles, POST ou GET. Elles sont issues du protocole HTTP. La méthode POST transmet les données en mode invisible, tandis que la méthode GET les transmet via la barre d'adresse. On dit ainsi pour la première méthode "poster un formulaire" et pour la seconde "obtenir un formulaire", en allusion à la traduction française de leurs méthodes respectives.
Personnelement, je vous déconseille d'utiliser la méthode GET, car les variables apparaissent dans la barre d'adresse, quelqu'un peut alors les modifier ou voir vos noms de variable... et là, bonjour les intrusions ! Autre point noir à cette méthode, la barre d'adresse de votre navigateur peut accueillir une infinité de caractères, mais le serveur web est généralement limité à 255 caractères (et il est rare que la valeur soit plus élevée). Si votre chaîne GET est plus longue, elle sera tronquée et vous perdrez des données... Utilisez POST tant que vous le pouvez...
Je ne vais pas rentrer dans le détail des différents éléments que l'on peut mettre dans un formulaire. Mais juste faire une mise en garde sur deux d'entre eux, qui ont un comportement spécial.
Les éléments de saisie de type "case à cocher" ne sont transmis que si et seulement si la fameuse checkbox est cochée.
Pareil pour les "boutons bascule", si il n'y a pas de valeur par défaut spécifiée, les "radios" qui n'ont pas de valeurs ne sont pas transmises...
Il est important de le savoir, et cela n'est pas lié à PHP, qu'on se le dise ! Fin de la parenthèse ;-)
"<textarea>" et sauts de ligne
Les balises <textarea> et </textarea> autorisent la saisie du texte avec des sauts de lignes. Lorsqu'ils sont transmis par POST ou par GET, ils sont « encodés » sous la forme \n\r (et accessoirement, ils seront stockés sous cette forme dans MySQL). Pour les afficher sous forme HTML avec prise en compte des sauts de ligne, vous devez utiliser la fonction PHP >> nl2br(), qui converti les séquences \n\r en balises (X)HTML <br />...
"<form>" et PHP
code source du formulaire :
<html>
<head><title>formulaire et PHP</title></head>
<body>
<form action="traitement.php" method="post" name="test" target="_blank">
<input type="hidden" name="var1" value="valeur 1" />
<input type="text" name="var2" value="valeur 2" /><br />
<input type="radio" name="var3" value="o" /> Oui <input type="radio" name="var3" value="n" /> Non<br />
<textarea cols="70" rows="5" name="var4">zone de texte avec gestion des sauts de ligne.
Une ligne blanche, et une autre...
;-)</textarea><br />
<input type="checkbox" name="var5" value="ok" /> OK<br />
<input type="submit" name="soumettre" value="soumettre" /><br />
</form>
</body>
</html>
et son aperçu :
Selon la méthode utilisée, POST ou GET, les valeurs "postées" ou "obtenues" se trouvent soit dans $_POST soit dans $_GET. Ces deux variables sont des super globales de PHP, elles n'ont pas besoin d'être déclarées. Elles remplacent depuis PHP 4.3.x les anciennes $HTTP_POST_VARS et $HTTP_GET_VARS ; elles conservent néanmoins le même fonctionnement, puisque ce sont aussi des tableaux de données (array).
Récupérer proprement les données
Autre chose à savoir. Avant PHP 4.3.x et les nouvelles super globales $_POST et $_GET, on pouvait automatiquement récupérer d'un script à un autre les valeurs passées par les méthodes POST ou GET. En raison des problèmes de sécurité et d'incohérences de programmation, cette facilité n'est plus disponible. Il faut donc récupérer proprement les valeurs de ses variables.
$_REQUEST est une autre super globale qui contient toutes les variables et leurs valeurs, que la transmission se fassent par les méthodes POST ou GET, ou même, si je ne dit pas de bêtises, par les sessions et les cookies.
Exemples :
Ce premier formulaire utilise la méthode POST, si vous cliquez sur le bouton "soumettre" sans avoir cocher la case OK ou sans choisir entre les boutons bascule oui et non, le script de démo de la section 1) affichera des lignes blanches, correspondant aux variables qui n'auront pas été transmises...
Ce second formulaire utilise la méthode GET, le script de démo de la section 1) n'affichera donc que des lignes blanches, tandis que la section 2) affichera les valeurs transmises, qui seront aussi visible dans la barre d'adresse de votre navigateur...
Pour installer facilement et rapidement PHP, Apache et MySQL sous Windows. >> plus d'infos.
+ de liens
Vous voulez d'autres tutoriaux, d'autres scripts PHP ? Pas de problème, pour avoir tout ça, cliquez >> ici, et consultez aussi >> l'annuaire de liens.
Le PHP en chiffres
6 des dix plus importants sites français utilisent le PHP, contre 2 l'ASP et 2 une technologie non dévoilée.
1'200 fonctions, pour dessiner des images aux formats GIF ou PNG à la volée, tranformer ou créer des fichiers au format PDF, interroger des bases de données avec ou sans ODBC, sans parler de toutes les fonctions HTTP, la manipulation de tableaux, les fichiers, les fonctions mathématiques...
100'000 sites en PHP en janvier 1999, contre
6 millions à ce jour, le PHP ayant été lançé en version 1.0 en janvier 1994.
(source : SVM n°201 février 2002, citant Jupiter MMXI, Security-space et Netcraft)