Php $get $post $session

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Les concepts

Lorsque l'on conçoit une application Web, il y a un moment ou on est obligé de communiquer des informations entre les différentes pages de cette application. Les pages sont demandées par la partie cliente, généralement un navigateur (eg. Firefox, Chrome, Safari, ...), et sont distribuées par la partie serveur (eg. Apache HTTPd, Nginx, IIS, ...).

Cette échange est encadré par l'utilisation du protocole HTTP et doit donc utiliser des méthodes HTTP, aussi appellées verbes HTTP, consacrés :

  • GET;
  • POST;
  • PUT;
  • DELETE;

Les deux premiers sont utilisés dans les applications Web au travers de formulaires et les deux derniers sont plutôt utilisés dans le cadre de Web services RESTful.

On distingue donc deux cas de figure :

  • l'envoie d'informations du client au serveur;
  • la conservation d'information côté serveur.

Dans le premier cas de figure, on peut utiliser les méthodes GET ou POST, alors que dans le deuxième cas de figure on utilisera les sessions.

Création d'un projet

Pour illustrer ces propos nous allons créer un projet dans Eclipse et pour cela assurez-vous d'avoir la perspective Php ainsi que d'avoir suivi le tutoriel Xdebug.

Commençons par la création du projet:

  • Première écran de l'assistant :
    • on créé le projet sur le serveur local;
    • on active le support de JavaScript
Eclipse php project create first screen.png
  • Deuxième écran de l'assistant :
    • On créé un repertoire src
Eclipse php project create second screen.png
  • On clique sur finish pour terminer l'assistant

Une fois le projet créé, on va y ajouter une page index.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Formulaire</title>
</head>
<body>
		<div align="center">
			<form action="php/traitement.php" method="get">
				Login :
				<input type="text" name="login"><br>
				Password : 
				<input type="password"  name="password"><br>
				<input type="submit" value="Connexion">
			</form>
		</div>
</body>
</html>

Comme vous pouvez le constater, cette page ne contient pas le code Php en charge du traitement du formulaire. Elle envoie les informations à la page traitement.php qui se trouve dans le répertoire php. Voici le code de cette page :

<?php

var_dump($_GET);

La méthode GET

Pour l'instant, en phase de découverte, nous allons utiliser la fonction var_dump qui permet d'afficher le contenu d'une variable, peu importe son type. On pourrait également utiliser la vue Debug d'Eclipse pour voir le contenu de la variable en mémoire. Peu importe la solution retenue, l'important et de voir la corrélation entre :

  • les données du formulaire;
  • l'URL;
  • le tableau $_GET créé par l'interpréteur Php.

Envoie d'information

Lorsque l'on valide le formulaire, le navigateur va construivre l'URL suivante :

http://localhost/Form/src/php/traitement.php?login=toto&password=titi

Et l'interpréteur Php va remplir le tableau $_GET de la manière suivante (résultat du var_dump) :

array (size=2)
  'login' => string 'toto' (length=4)
  'password' => string 'titi' (length=4)

On peut s'amuser à modifier les valeurs dans l'URL pour comprendre l'impact sur le contenu du tableau $_GET : l'interpréteur construit un tableau associatif ou figurera chacun des tuples présent dans l'URL. Le caractère ? sert à séparer la ressource demandée, de la liste des tuples et le caractère & sert à séparer chacun des tuples dans la liste.

Réception d'information

La récupération d'une valeur semble simple : il suffit d'y accéder en spécifiant son nom.

<?php

$login = $_GET["login"];
$password = $_GET["password"];

echo "Votre login est : ".$login;
echo "<br>";
echo "Votre mot de passe est : ".$password;

La méthode POST

Envoie d'information

Très similaire à la méthode GET à la différence que les tuples sont envoyé dans le corps de la requête HTTP et non dans l'URL. Pour l'utiliser, il suffit de modifier la ligne suivante du fichier index.php :

<form action="php/traitement.php" method="get">

en

<form action="php/traitement.php" method="post">

Réception d'information

La récupération des informations ce fait non plus dans le tableau $_GET mais dans le tableau $_POST :

<?php

$login = $_POST["login"];
$password = $_POST["password"];

echo "Votre login est : ".$login;
echo "<br>";
echo "Votre mot de passe est : ".$password;

Les sessions