Valid XHTML 1.0 Transitional CSS Valide !

PHP 5 : les formulaires

5-1 Leur principe

PHP est un langage de script qui s’exécute sur le serveur qui offre la possibilité de manipuler des données issues d’un formulaire. Ces données, entrées sur le client, sont donc transférées au serveur pour permettre leur manipulation (traitement de chaînes de caractères, sauvegarde des données, comparaison des données ...).
Contrairement à un script Javascript, le traitement est donc effectué sur le serveur, ce qui permet de mettre en place des moyens de sécurité qui nous étaient interdits par Javascript, comme la gestion de mots de passe par exemple.

La gestion des formulaires en PHP se fait en plusieurs phases :
1. le client se connecte à une page, HTML ou PHP, contenant un formulaire composé de différents champs et d’un bouton submit.
Dans ce cas les champs method et action inclus dans la déclaration du formulaire sont «renseignés»;
2. le client «envoie» les données de son formulaire à l’aide du bouton submit;
3. le serveur «récupère» les données et les traite à l’aide d’un script PHP;
4. le script de traitement génère une page HTML virtuelle qui est renvoyée au client. Cette page peut être composée d’informations issues du traitement des données ou tout simplement de l’assurance que les données ont été correctement analysées.

L’exploitation des données d’un formulaire dépend de la configuration de l’interpréteur PHP, et plus particulièrement de la variable register_globals, qui se trouve dans le fichier php.ini. A chaque champ du formulaire est associé une commutateur name qui va nous permettre d’accéder à la valeur entrée, ou sélectionnée, dans ce champ.

Si la variable register_globals est à Off, on peut accéder à la valeur du champ en utilisant les tableaux associatifs suivants, pour accéder à la valeur d’un champ dont la valeur du commutateur name est nomChamp.
Si le formulaire utilise la méthode POST, l’accès se fait en utilisant le prototype suivant : $_POST["nomChamp"]
Si le formulaire utilise la méthode GET, l’accès se fait en utilisant le prototype suivant : $_GET["nomChamp"]
Dans tous les cas (POST ou GET), l’accès peut se faire en utilisant le prototype suivant : $_REQUEST["nomChamp"]

Si,par contre, la variable register_globals est à On, on peut accéder à la valeur du champ en utilisant
soit les tableaux associatifs suivants, pour accéder à la valeur d’un champ dont la valeur du commutateur name est nomChamp :
Si le formulaire utilise la méthode POST, l’accès se fait en utilisant le prototype suivant : $_POST["nomChamp"]
Si le formulaire utilise la méthode GET, l’accès se fait en utilisant le prototype suivant : $_GET["nomChamp"]
Dans tous les cas (POST ou GET, l’accès peut se faire en utilisant le prototype suivant : $_REQUEST["nomChamp"]

Mais aussi une variable PHP dont le nom est le même que celui du champ, quelle que soit la méthode (POST ou GET). Le prototype d’un tel accès sera, dans notre cas : $nomChamp
Dans la suite, nous considèrerons que la variable register_globals est à Off. Attention le contenu du champ est référencé par une variable portant le même nom que le champ du formulaire il ne faut donc pas oublier dans le script PHP de traitement d’utiliser le caractère $ pour accéder aux différentes valeurs : si le nom du champ du formulaire est : toto la variable contenant la valeur associée à ce champ est $toto.

Les formulaires PHP par siteduzero
register_globals : on ou off par php.net

5-2 Méthode POST ou méthode GET

Pour permettre le traitement des données d’un formulaire par un script PHP, la définition du formulaire doit contenir :
• le nom du fichier contenant le script à exécuter dans le champ action ;
• la méthode de transmission de données : GET ou POST dans le champ method .


La méthode POST «encapsule» les données des champs renseignés dans un message qui est passé au serveur. Les données sont envoyées «en clair» sous le format URL-encodage, mais ne sont pas accessibles par le biais de l’adresse. En utilisant cette méthode, la taille des données à envoyer n’est pas limitée.

La méthode GET construit à partir de l’URL du script de traitement des données, des noms de champs du formulaire et des valeurs associées une nouvelle URL. L’accès au script de traitement contient donc, en clair et visible, ces différentes informations. La taille des données transférées vers le serveur par cette méthode est limitée. Cette limite dépend de la configuration du serveur.
Exemple : Deux formulaires de type text, l'un utilisant la method post et l'autre la get. Après envoi, que constatons-nous?
Avec la method post, l'url ne change pas alors qu'avec la method get, l'url est complétée par le nom du champs et par les mots qui ont été saisis puis envoyés.

Un premier exemple


5-3 Accès aux différents éléments d'un formulaire

Les manières d’accéder aux différents éléments d’un formulaire peuvent varier en fonction du nombre de sélections possibles pour un élément, ainsi que du type d’éléments utilisés. Nous donnons maintenant la liste des différents éléments de formulaire, ainsi que le moyen d’accéder aux différentes informations. Pour chaque élément de formulaire, nous donnons un exemple constitué du code de deux fichiers, le premier étant le fichier HTML contenant le formulaire et le second un script PHP réalisant l’affichage des données «issues» du formulaire.

5-3-1 Champs de type input
Exemple text.html
Exemple pass.html
Exemple radio.htmlType de formulaire radio : plusieurs propositions et un seul choix possible. Ce choix peut ensuite être affiché.
Exemple check.htmlType de formulaire check : plusieurs propositions et plusieurs choix possibles (une seule proposition à toutes). Les propositions selectionnées peuvent être affichées au moyen d'un script PHP.
Exemple hidden.htmlType de formulaire hidden : on ne voit pas le(s) choix proposé(s).
5-3-2 Champs de type textarea
Un exemple de formulaire text area
5-3-3 Champs de type select

Les champs de type select sont de deux «types» : à sélection unique et à sélection multiple.

Dans le cas d’un champ à sélection multiple, on accède aux éléments choisis à l’aide du tableau des réponses données. Dans ce cas le nom du champ select doit se terminer par les caractères «[ ]» pour bien montrer qu’il s’agit d’un tableau.

Un exemple de formulaire à selection multiple dans un menu déroulant
Un exemple de formulaire à sélection unique dans un menu déroulant

5-4 Un exemple plus évolué

Un exemple qui reprend différents types de formulaires

5-5 L'intérêt des champs cachés (hidden)

Lorsque l’on utilise un formulaire pour transmettre des données à un script PHP, le bouton submit que l’on utilise ne provoque que l’envoi des données du formulaire auquel il appartient. Si la page est constituée de plusieurs formulaires différents, et que l’on souhaite envoyer la totalité des informations contenues dans les différents formulaires, il faut collecter les informations des autres formulaires avant de cliquer sur submit.
La collecte de ces informations nécessite de pouvoir sauvegarder ces informations dans un champ particulier. Pour cela, on utilise, généralement, un champ de type hidden.
Le schéma général d’une gestion de ce type est :
1. écrire un script Javascript collectant les informations des différents formulaires et les rangeant dans un, ou plusieurs, champs cachés du «dernier» formulaire;
2. écrire les différents formulaires;
3. au bouton submit du dernier formulaire, associer à l’événement onClick l’exécution de la fonction Javascript. On remarque que les fonctions appelées par des événements s’effectuent avant l’envoi des informations du formulaire au script de traitement.
Un exemple de formulaire avec un champs hidden Cliquer ici pour retourner à la page d'accueil