Transmission de données via l'URL
Il est tout à fait possible de transmettre des données directement dans l'URL d'une page sans passer par un formulaire. Vous pouvez envoyer des données à une page simplement dans le lien vers cette page par exemple.
Les données qui voyagent dans l'URL vont apparaître à la fin de celle-ci dans ce qu'on appelle la chaîne de requête.
La chaîne de requête commence par un point d'interrogation ? et on peut mettre dedans plusieurs couples paramètre/valeur de la manière suivante :
?param1=valeur1¶m2=valeur2
Cas d'utilisation : transmettre un identifiant dans un lien
On se sert de la chaîne de requête généralement pour transmettre une petite information qui va être utile sur la page cible. Par exemple si vous avez un site qui présente une liste d'articles, un fichier PHP unique va gérer l'affichage de tous les articles. Pour savoir quel article afficher, on va transmettre le numéro de l'article. Survolez les liens de l'exemple ci-dessous et regardez bien les URLs en pied de page du navigateur avant de cliquer dessus !
<ul>
<li><a href="index.php?article=17">Article 17</a></li>
<li><a href="index.php?article=23">Article 23</a></li>
<li><a href="index.php?article=38">Article 38</a></li>
</ul>
Réception des données
Les données transmises dans la chaîne de requête sont toujours récupérées dans la variable super globale $_GET. Celle-ci contient un tableau associatif
dont les clés sont le nom des paramètres qui ont voyagé dans l'URL. Dans l'exemple ci-dessus on a créé dans les URLs des liens un paramètre article,
que l'on va donc récupérer à la clé article du tableau $_GET : $_GET['article']
Le paramètre est-il bien présent ?
La chaîne de requête apparaît dans la barre d'adresse du navigateur et l'internaute peut la modifier. Il ne faut jamais faire confiance à l'internaute et il est nécessaire de vérifier si le paramètre attendu existe bien et s'il est conforme à nos attentes.
On va donc vérifier que la clé article existe bien dans les clés du tableau $_GET avec la fonction array_key_exists : if(array_key_exists('article', $_GET)).
Il n'y a pas de paramètre article dans l'URL, vous n'avez pas encore cliqué sur un lien, allez-y !