GET et POST, que choisir entre les deux ?

Image mis en avant de l'article

Sur un site internet, il y a plusieurs manières pour envoyer des informations vers un serveur PHP. L’un des moyens les plus courants est par l’utilisation de formulaire HTML qui va donner la possibilité à un utilisateur d’entrer des données. Ces formulaires utilisent deux méthodes d’envoi, GET et POST. Mais au fait, quelle est la différence entre les deux ? Je vais expliquer ça dans cet article !

Des variables superglobales

GET et POST sont deux types de requêtes HTTP différentes qui permettent principalement de récupérer les données d’un formulaire HTML. Une fois le formulaire validé et les données envoyées, le serveur PHP va stocker toutes ces informations dans des variables qu’on nomme superglobales.

Vous connaissez tous les variables globales ? Une variable superglobale comme son nom l’indique est une super variable globale ! Comparées à une variable globale, elles n’ont pas besoin d’être déclarées et elles existent dans toutes les pages PHP, peu importe si des données ont été envoyées ou non.

Même principe que pour les variables globales, elles sont aussi accessibles partout dans le code PHP, peu importe le contexte. Cette portée peut être mal vue pour ceux qui veulent respecter l’encapsulation des données, car les superglobales perturbent ce concept.

Ils existent beaucoup de variables superglobales, ceux qui nous intéressent pour récupérer les données des requêtes GET et POST portent le même nom à savoir les variables $_GET et $_POST.

Ces variables se présentent sous la forme d’un tableau associatif. La récupération ainsi que la modification de leurs valeurs se fait exactement comme avec un tableau.

	$variable = $_GET['id'];
	$variable2 = $_POST['nom'];
	$_POST['nom'] = 'autre chose';

Les données envoyées peuvent être modifiées par un utilisateur, il faut donc toujours vérifier les informations qui sont envoyées par ces requêtes. Si les données ne sont pas vérifiées, filtrées et sécurisées, c’est une faille de sécurité potentielle !

GET

GET est une méthode qui va permettre d’envoyer des données vers une page PHP grâce à un formulaire.

<p>Formulaire utilisant la méthode GET</p>
<form method="get" action="page.php">
	<input type="text" name="id">
	<input type="text" name="couleur">
	<input type="submit" value="Envoyer" />
</form> 
<?php
if(isset($_GET['id'])){
	echo '<p> Page n°' . $_GET['id'] . '</p>';
}
else{
}

if(isset($_GET['couleur']) AND $_GET['couleur'] == "rouge"){
	echo "<p> Couleur rouge ! </p>";
}
else{
}

Exemple d'envoi de données par GET

GET utilise l’adresse URL pour pouvoir passer des informations. Le formulaire plus haut va donner ce lien : « http://127.0.0.1/page.php?id=8&couleur=rouge ».

Le fait qu’il utilise une adresse URL pour envoyer des données lui donne la possibilité de ne pas utiliser un formulaire HTML, mais directement un lien. Cela permet d’envoyer à une page PHP des paramètres qu’il peut traiter avec un simple lien.

Vous pouvez d’ailleurs voir lorsqu’une page utilise ce genre de requête, le caractère « ? » est présent dans l’URL suivi des données qui sont envoyées. La modification d’un paramètre est très facile, car vous pouvez le faire directement sur le lien ou dans la barre d’adresse !

Exemple d'une modification d'un paramètre GET

La méthode GET n’est pas adaptée pour les données qui sont lourdes. Vous ne pourrez pas envoyer un long texte avec GET par exemple ! Cela s’explique que l’URL est limitée à 2048 caractères, et comme GET se sert de l’URL pour envoyer des données, il est lui aussi limité !

La méthode GET n’est pas non plus adaptée pour les informations sensibles comme les mots de passe, car du fait de son fonctionnement, ces données sont directement affichées dans la barre d’adresse. Ce n’est pas vraiment la bonne méthode pour recevoir des codes de cartes de crédit !

Comme on a affaire à un simple lien, il peut être mis en favori, être mis en cache et être enregistré dans l’historique de votre navigateur.

Exemple d'ajout en favori d'un paramètre GET

Historique de Google chrome :

Exemple de l'historique d'un paramètre GET

Pour ajouter un autre inconvénient à cette méthode, seuls des caractères ASCII peuvent être passés. Le format binaire ne passera pas dans l’URL. Vous ne pourrez pas envoyer de fichiers par cette méthode.

Ses caractéristiques :

  • Les requêtes avec des paramètres GET sont visibles, peuvent être mises en cache, être mises en favoris et être enregistrées dans l’historique.
  • Les paramètres GET peuvent être modifiés par n’importe qui.
  • La méthode GET peut être utilisée en dehors d’un formulaire par un lien.
  • Les données doivent être uniquement en caractères ASCII.
  • Les données sont limitées en longueur.

Voilà en gros les caractéristiques de la méthode GET, voyons voir la deuxième méthode !

POST

POST est la deuxième méthode qui permet de récupérer les données d’un formulaire HTML.

<p>Formulaire utilisant la méthode POST</p>
<form method="post" action="page.php">
	<input type="text" name="id">
	<input type="text" name="couleur">
	<input type="submit" value="Envoyer" />
</form>
<?php
if(isset($_POST['id'])){
	echo '<p> Page n°' . $_POST['id'] . '</p>';
}
else{
}

if(isset($_POST['couleur']) AND $_POST['couleur'] == "rouge"){
	echo "<p> Couleur rouge ! </p>";
}
else{
}

Les changements sont minimes par rapport au code source de GET, car le principe reste le même. Seule la méthode d’envoi change ainsi que la variable superglobale qui va contenir les données du formulaire.

POST, comparé à GET, n’utilise pas l’URL pour passer des informations. Les données sont incluses directement dans la requête HTTP. Du coup cela va le libérer de toutes les contraintes que GET possède.

Les informations qui sont envoyées vers le serveur ne sont donc pas visibles et donc par la même occasion, ne peuvent être ni mises en favori ni enregistrées.

POST n’a pas de limite de longueur vu qu’il ne se sert pas de l’URL, et peut passer tout type de données, binaire compris.

POST est plus sécurisé que GET, car les données sont cachées aux yeux de tous. Mais attention, les données restent toutefois modifiables par des personnes qui s’y connaissent en technique. Vérifier donc toujours ces données par un script PHP !

Ses caractéristiques :

  • Paramètres non visibles par un utilisateur lambda.
  • Les requêtes POST ne sont jamais mises en cache, comme elles ne peuvent pas être mises en favoris ni être dans l’historique.
  • Pas de restriction sur la longueur des données.
  • Peut passer tout type de données, ASCII comme binaire.
  • Reste modifiable par un utilisateur qui s’y connait.

Pour envoyer des données, la méthode POST surpasse GET à tous les points et ne présente pas d’inconvénient par rapport à la première méthode. C’est la méthode qu’il faut utiliser dans 99 % des cas pour l’envoi de données à un script PHP.

GET est-il donc inutile ?

Non, il a son utilité ! Mais pas pour l’envoi d’informations qui vise à modifier des données sur un serveur !

GET est beaucoup plus adapté pour récupérer certaines données. Il peut servir par exemple à avoir un certain type de page en fonction du paramètre qui est envoyé.

Les forums utilisent souvent cette méthode pour afficher les posts des utilisateurs. Chaque post possède un identifiant, en passant cet identifiant en paramètre, le script PHP identifie qu’elle page renvoyé aux visiteurs.

« forum.php?topic=1 »
« forum.php?topic=2 »

De même qu’un paramètre « couleur » ou « design » pourrait indiquer à un script PHP d’envoyer une page avec un thème différent.

Le principe de GET est que rien ne doit changer avec des données envoyées par GET. Quand je dis ne rien changer, il ne doit pas y avoir d’ajout ou de modification dans une base de données. L’appel de l’URL avec des données GET doit pouvoir se faire indéfiniment sans poser de soucis.

POST est plus adapté pour des actions visant à créer, modifier ou supprimé des données sur un serveur. Si vous utilisez la méthode GET pour faire ce genre d’actions, vous pourriez par erreur taper ces commandes dans la barre d’adresse ce qui fera des modifications ! De même que ces actions pourraient être exécutées par des robots comme celui de Google ce qui pourrait causer des perturbations sur votre site.

Une mauvaise utilisation de GET qui va supprimer un post en fonction du paramètre « delete » :

« forum.php?topic=1&delete=1 »

La requête POST va indiquer que quelque chose va être changé sur le site, et qu’il ne devrait pas être fait à l’infini. C’est d’ailleurs pour ça que votre navigateur vous demande si vous voulez renvoyer des données d’un formulaire lorsque vous rafraîchissez une page ou que vous faites « précédent ». Les requêtes GET sont aussi réenvoyées après rafraîchissement, mais comme ils sont censés ne pas modifier les données, le navigateur ne prend donc pas la peine de vous avertir.

D’ailleurs, ces méthodes portent bien leur nom ! GET signifie récupérer et POST, poster.

Pour conclure !

  • La méthode GET doit être utilisé pour récupérer des données d’un script PHP.
  • La méthode POST doit être utiliser pour envoyer des informations vers un script PHP qui va modifier ou ajouter de nouvelles données.
Partager l’article :
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.