Introduction
Ce tutorial présente différentes manières de soumettre des données entre un navigateur web (le "client") et un serveur sur lequel sont placés les script php.
On y trouve les informations suivantes :
- La séparation "client" et "serveur"
- La soumission "GET" et "POST"
- En pratique avec GET
- En pratique avec POST
Un client, et un serveur
Le principe initial de fonctionnement d'un site web et de mettre en place un client d'un coté, et un serveur de l'autre. C'est le client qui va donner des ordres, et le serveur qui va les exécuter. Ainsi, lorsque l'on tape " http://www.yahoo.fr/ " sur son navigateur, il se passe concrètement les choses suivantes :
- Le navigateur recherche le serveur de Yahoo
- Le navigateur demande la page par défaut du serveur web, de la manière suivante : " GET / ", il transmet simultanément d'autres informations (Le nom du navigateur, l'url référante, les cookies s'il y a lieu)
- Le serveur reçoit la demande, et répond avec le contenu du fichier par défaut chez Yahoo (donc, la page d'accueil)
- Le navigateur reçoit le contenu du fichier et l'affiche
- Ces étapes sont suivies pour absolument toutes les demandes entre un serveur web et un navigateur, aussi bien pour servir des pages html, php ou encore des fichiers images
Get et Post
Le client possède plusieurs moyens pour effectuer sa requête vers le serveur, get et post :
- En mode "GET", le navigateur ne transmet qu'une Url au serveur. Ce peut être une url " normale " comme " /page.html ", ou une url avec des arguments comme " /script.php?V1=15 ". Cette adresse, qui va apparaître dans la zone d'url du navigateur, permet au serveur de localiser la page qu'il doit servir. S'il y a des arguments, ils vont être transmis a la page en question. En php, les arguments vont être disponible dans le tableau $HTTP_GET_VARS
- En mode "POST", le navigateur transmet une url ET un ensemble de valeur. La requéte ressemble alors à :
"POST /script.php
V1=15
V2=156 "
(en pratique, le codage est plus complexe, mais cette simplification permet de mieux comprendre le mécanisme). Le serveur va alors appeler la page "script.php" et lui transmettre l'ensemble des valeurs. Seule l'adresse "script.php" apparaît alors dans la barre du navigateur. En php, les données soumises sont disponibles dans le tableau $HTTP_POST_VARS
Pourquoi deux méthodes ?
L'existence de deux méthodes peut surprendre, puisqu'elles font apparemment la même chose. Les différences sont pourtant importantes en particulier :
- POST permet de soumettre un grand volume de données, mais il ne permet pas de placer en signet la page de résultat
- GET ne permet pas de dépasser un volume relativement faible (pas beaucoup plus de 255 caractères), mais peut en revanche être placé en signet.
Par " placer en signet ", il faut bien comprendre que dans le cas d'un " GET ", l'adresse résultante de la soumission (celle que l'on voit dans le navigateur) est une adresse compléte. Si, par exemple, je fait une recherche sur Altavista, et que je place un signet sur la page de résultat, je peut revenir quinze jours plus tard, utiliser le signet, et retrouver directement les résultats. Si Altavista utilisait " POST " pour transmettre les données, cela ne serait pas possible aussi simplement.
Un exemple simple
En pratique, on choisit la méthode de la manière suivante :
- Lorsque l'on effectue une soumission sur des informations que l'on n'enregistre pas (AltaVista n'enregistre pas quelque part les requètes que vous faites), et que le volume de données le permet, on utilise GET. On y gagne ensuite si l'on souhaite faire des liens directs vers la page de résultat
- Lorsque l'on effectue une soumission sur des informations que l'on enregistre réellement (par exemple, une inscription a un service), on utilise de préférence " POST "
La méthode se paramètre dans le fichier contenant le formulaire :
<form action=Script.php method=GET> ou <form action=Script.php method=POST>
Par défaut, s'il n'y a pas de " method " précisé, le navigateur utilise " GET ".
Il est assez simple de créer deux fichier : Formulaire.html et Script.php.
Dans Formulaire.html :
En modifiant le GET de " formulaire.html " en POST, vous remarquerez les différences, principalement dans l'url.