Médiaforma

PHP MySQL – Transmission de données par l’URL

Print Friendly

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["param1"]."<br>";
  echo "La donnée param2 a pour valeur ".$_GET["param2"]."<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["param1"]))
    echo "La donnée param1 a pour valeur ".$_GET["param1"]."<br>";
  if (isset($_GET["param2"]))
    echo "La donnée param2 a pour valeur ".$_GET["param2"]."<br>";
  if (!isset($_GET["param1"]) && !isset($_GET["param2"]))
    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["param1"]))
    echo "La donnée param1 a pour valeur ".htmlspecialchars($_GET["param1"])."<br>";
  if (isset($_GET["param2"]))
    echo "La donnée param2 a pour valeur ".htmlspecialchars($_GET["param2"])."<br>";
  if (!isset($_GET["param1"]) && !isset($_GET["param2"]))
    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.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply