Variables GET & POST
Définitions
Il s'agit de tableaux associatifs (I.E. à une clé donnée associons une valeur) Elles permettent de stocker des données pour les transférer d'une page à une autre. Il en existe 5 sortes
- Variables GET => $_GET
- Variables POST => $_POST
- Variables GTE & POST ==> $_REQUEST
- Variables de session => $_SESSION1
- Variables de cookie => $_COOCKIE1
1 les variables de sessions et de cookie de permettent ne transmettre des données d’une page à l’autre mais les stocker de façon durable au cours de la navigation du site
Les Variables GET
Elles permettent de transmettre des données via l'URL de la page il suffit d'utiliser le symbole ? pour indiquer à PHP où chercher les données et le symbole & pour les séparer.
Prenons une URL très simple : mapage.php?nom=DUMONT&prenom=Pierre
Nous avons donc 2 variables nom et prenom associant chacune une valeur DUMONT et Pierre Donc sur mapage.php, on pourra les utiliser de la manière suivante :
- <?php
- echo $_GET["nom"] . "" . $_GET[“prenom"] ;
- ?>
Pour stocker un tableau via les variables GET, il suffit d'utiliser les symboles [] comme suit : mapage.php?var[]=1&var[]=2&var[]=3
Ce qui donnera en PHP :
- <?php
- for($i=0 ; $i < count( $_GET [”var“] ) ; $i++){
- echo ( $_GET [”var“] [$i] . “<br> ” ;
- }
- for($i=0 ; $i < count( $_GET [”var“] ) ; $i++){
- ?>
2
3
Les Variables POST
Elles permettent de transmettre des données par le biais notamment d'un formulaire HTML. La valeur attribuée à la propriété name du composant servira de clé
- <form method="POST" action="result.php">
- Nom : <input type="text" name="nom"><br>
- Prénom : <input type="text" name="prenom"><br>
- <input type="submit">
- </form>
Donc dans cet exemple, nous allons envoyer à result.php deux variables nom et prénom dont les valeurs seront saisies par l'utilisateur. On pourra les utiliser de cette manière :
[result.php]- <?php
- echo $_POST["nom"]." ”.$_POST["prenom"] ;
- ?>
Nota : comme pour la variable $_GET pour créer des tableaux via les variables POST on utilise les [] associées au nom de la variable
- <input type="checkbox" name="choice[]" value=1><br>
- <input type="checkbox" name=“choice[]" value=2><br>
- <input type="checkbox" name="choice[]" value=3><br>
La variable $_REQUEST
Elle permet à la fois de retrouver les variables $_GET, $_POST Donc le code- <php
- if ( $_POST[ “test” ] == $_REQUEST[ “test” ])
- echo “c’est la même chose !” ;
- if ( $_POST[ “test” ] == $_REQUEST[ “test” ])
- ?>
Va afficher
sécurité et XSS
Lorsque que l’on utilise des variables saisies, il convient d’être vigilant sur les caractères spéciaux. En effet un utilisateur peut saisir dans un champ de texte une instruction javascript à l'aide de balises <script/>. Cette méthode d'incursion de code JS dans une variable saisie s'appelle le Cross Site Scripting ou XSS
Pour pallier au problème d’interprétation il convient d’utiliser la fonction htmlentities() lorsque l’on récupère la donnée.Prenons l'exemple d'un utilisateur qui saisi dans un textarea le message <script>while(1==1)alert('POP')</sctipt> Cette incursion de code va afficher de façon continue le message POP.
La méthode htmlentities va remplacer les tag < et > par < et > et empêchera le code de s'éxécuter
- <?php
echo $_POST[“message”] ;- echo htmlentities($_POST[“message”], , ENT_QUOTES) ;
- ?>
docn va afficher
Isset & empty
Une variable peut ne pas être paramètré au moment où l'on souhaite l'utiliser. Ainsi sur la page result.php telle quelle, si l'on écrit
- <?php
- echo $_GET['test'];
- ?>
Voila ce qu'il va afficher :
Mais si l'on utilise la fonction isset() au préalable
- <?php
- if(isset($_GET['test']))
- echo $_GET['test']
- else
- echo "pas de variable passée en GET";
- if(isset($_GET['test']))
- ?>
Va afficher
Pour une variable POST cette fonction ne servira pas car toutes les variables vont être postées mais certaines n'auront aucune valeur attribuée
Il convient d'utiliser la focntion empty()
- <?php
- if(!empty($_POST['nom']))
- echo "bonjour" . $_POST['nom']
- else
- echo "tu n'as pas saisie ton nom";
- if(!empty($_POST['nom']))
- ?>
Pourra afficher