http://mawel.free.fr : Site d'informations pratiques
pour la mise en place de sites
dynamiques en php
--> Accueil <--  > Soumission de données
> Tutoriels
   Erreurs courantes
   Saisie de texte riche
   Structure de données
   Ajout/Modif/Suppression
   Résoudre un problème
   Soumission de données
   Pseudo-templates
   Enregistrement de fichiers
   Liens relatifs


> Cours
   1. Structure de site



Contact
   Votre avis
   e-mail



Liens
   Inventons!
  

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 :
  1. Le navigateur recherche le serveur de Yahoo
  2. 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)
  3. Le serveur reçoit la demande, et répond avec le contenu du fichier par défaut chez Yahoo (donc, la page d'accueil)
  4. Le navigateur reçoit le contenu du fichier et l'affiche
  5. 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 :
<html>
<body>
<form action=Script.php method=get>
Entrez votre nom : <input type=text name=Nom>
</form>
</body>
</html>


Et dans script.php :
<pre>
< ?
echo 'Valeurs soumises en GET : '
var_dump($HTTP_GET_VARS)
echo '<hr>Valeurs soumises en POST : '
var_dump($HTTP_POST_VARS)
?>
</pre>


Note : var_dump permet de visualiser le contenu des information présentes dans le tableau fournit en argument. Il est aussi possible de faire une boucle avec " each() ".

En modifiant le GET de " formulaire.html " en POST, vous remarquerez les différences, principalement dans l'url.