article(s) dans votre panier VOIR

Tuto PHP/MySQL | Transmission de données par l'URL

  • Vidéo 80 sur 158
  • 4h43 de formation
  • 158 leçons

Un contenu flash devrait s'afficher ici. Votre navigateur ne comporte pas de plugin flash, ou il ne s'est pas correctement initialisé.

Vous pouvez télécharger le plugin flash depuis le site d'Adobe à l'adresse suivante : http://get.adobe.com/flashplayer/.

Pour accéder à la suite de cette formation, vous devez vous abonner.
previous
summary
resume
next
play
Transmission de données par l'URL
00:00 / 03:26
HD
fullscreen
Je m’abonne
à partir de 16,6 € / mois
  • Visionnage en ligne
  • Accès illimité à toutes nos formations
OU
J'achète uniquement
la formation
49,90€
  • Téléchargement + VOD à vie
  • Accès uniquement à cette formation

Sommaire de la formation

Détails de la formation

La façon la plus simple de transmettre des données à une page PHP consiste à les insérer dans l'URL :

http://www.adressedusite.com/unepage.php?param1=valeur1&param2=14

Ici par exemple, deux données sont transmises à la page unepage.php : param1 et param2. Ces deux données ont pour valeur "valeur1" et "14". 

Remarque

Vous pouvez transmettre autant de données que vous voulez, mais la taille des URL doit être inférieure à 256 caractères, sans quoi, certains navigateurs risquent de tronquer les URL trop longues.

Pour récupérer les données, vous utiliserez le tableau superglobal $_GET en l'interrogeant sur le nom de la donnée dont vous voulez récupérer la valeur :

<?php

  echo "La donnée param1 a pour valeur ".$_GET."<br>";

  echo "La donnée param2 a pour valeur ".$_GET."<br>";

?>

Exécutons ce code en entrant son adresse dans la barre d'adresses du navigateur. Les deux données ont bien été récupérées dans le tableau superglobal $_GET.

Si vous affichez la même page en supprimant les données de l'URL, deux erreurs sont générées.

Pour éviter ces problèmes, utilisez la fonction isset() pour tester si les données qui sont supposées être transmises dans l'URL sont effectivement présentes :

<?php

  if (isset($_GET))

    echo "La donnée param1 a pour valeur ".$_GET."<br>";

  if (isset($_GET))

    echo "La donnée param2 a pour valeur ".$_GET."<br>";

  if (!isset($_GET) && !isset($_GET))

    echo "Aucune donnée n'a été transmise à ce script PHP";  

?>

Si le paramètre param1 est défini, on affiche sa valeur.

Si le paramètre param2 est défini, on affiche sa valeur.

Si aucun des paramètres param1 et param2 ne sont définis, on affiche un message pour l'indiquer à l'utilisateur.

Essayons ces trois configurations.

Nous transmettons le paramètre param1 mais pas le paramètre param2. Aucune erreur n'est détectée et la valeur du paramètre param1 est affichée.

Nous transmettons le paramètre param2 mais pas le paramètre param1. Aucune erreur n'est détectée et la valeur du paramètre param2 est affichée.

Nous omettons les paramètres param1 et param2 de l'URL. Un message indiquant que ces paramètres n'ont pas été transmis est affiché.

 

Etant donné que l'utilisateur peut modifier l'URL affiché dans la barre d'adresses du navigateur, il est vital d'échapper les données reçues pour éviter les problèmes d'injection de type Cross-Site Scripting. Pour cela, vous appliquerez la fonction htmlspecialchars() à chacune des données récupérées. Le code à utiliser est le suivant :

<?php

  if (isset($_GET))

    echo "La donnée param1 a pour valeur ".htmlspecialchars($_GET)."<br>";

  if (isset($_GET))

    echo "La donnée param2 a pour valeur ".htmlspecialchars($_GET)."<br>";

  if (!isset($_GET) && !isset($_GET))

    echo "Aucune donnée n'a été transmise à ce script PHP";  

?>

 

Dans ce code, nous avons juste protégé l'affichage en appliquant la fonction htmlspecialchars aux deux paramètres qui auraient pu être altérés par l'utilisateur.