Formation PUB010 : PHP, 2025 Passer des paramètres dans l'URL

29.1 Encodage d'URL (URL avec paramètres)


Prenons le cas où vous avez une liste de clients affichée dans un tableau. Pour chacun des clients, vous souhaitez offrir trois options : afficher les détails, modifier ou supprimer le client.

Tableau de données avec boutons d'édition

Concentrons-nous sur l'affichage des détails d'un client. On comprend que peu importe le client sélectionné, la logique d'affichage sera la même. Seule la requête qui va chercher les données à afficher sera différente. Il faut donc trouver un moyen d'indiquer à la page qui affiche les détails sur quel client elle doit travailler.

Une des techniques pouvant être utilisées est l'encodage d'URL.

L'encodage d'URL consiste à passer des paramètres dans l’URL. En anglais, les paramètres ajoutés à l'URL s'appellent query strings. Il s'agit d'une technique pratique et rapide. Mais attention : elle ne doit pas être utilisée pour passer les informations sensibles puisque ces informations seront écrites en clair dans l’URL.

Et comme les informations sont écrites directement dans l'URL, il faut prévoir qu'un internaute pourrait tenter une attaque en entrant des caractères malicieux...

Les techniques de protection sont les mêmes que lorsque l'information provient d'un formulaire Web : requêtes préparées pour prévenir les injections SQL si l'information doit être utilisée dans une requête SQL, htmlspecialchars() pour prévenir les attaques XSS si l'information doit être affichée à l'écran, etc.

Pour passer un paramètre dans l'URL, il suffit de faire suivre le nom de la page Web par un point d'interrogation. Suivront ensuite une ou plusieurs paires variable=valeur, séparées par un esperluette (&).

Ex : https://mondomaine.com/details-client.php?id=28

Ex : https://apical.xyz/ContenuFormation.php?formation_id=30&chapitre_id=1722&fiche_id=1222

Encodage de l'URL

Dans la plupart des cas, les URL avec paramètres seront encodés dans un lien.

PHP

echo "<a href='https://mondomaine.com/details-client.php?id=28'><img src='medias/commun/BoutonChoisir.png' alt='Détails' title='Détails' /></a>;

Mieux : on utilisera des variables pour préciser les paramètres :

PHP

echo "<a href='https://mondomaine.com/details-client.php?id=$id'><img src='medias/commun/BoutonChoisir.png' alt='Détails' title='Détails' /></a>;

Et si l'information à passer en paramètre est tirée de la base de données :

PHP

echo "<a href='https://mondomaine.com/details-client.php?id=$enreg[0]'><img src='medias/commun/BoutonChoisir.png' alt='Détails' title='Détails' /></a>;

Décodage de l'URL

Dans la page qui reçoit un paramètre dans son URL (ex : dans la page details-client.php), on pourra retrouver la valeur d'un paramètre en utilisant $_GET.

Vérifier si le paramètre est là

Il faut toujours utililser isset() pour vérifier si le paramètre existe avant de tenter de lire sa valeur au cas où un internautre entrerait directement l'URL sans paramètre.

PHP
if (isset($_GET['id'])) {
   ...   // traitement
}
else {
   ...  // Action à poser si la page n'a pas reçu l'identifiant en paramètre.
}

Dans cet exemple, si un internaute tentait d'accéder à la page en entrant directement son URL sans préciser de paramètres (ex : en tapant http://mondomaine.com/details-client.php dans la barre d'URL de son navigateur), le code du else serait exécuté puisqu'aucun id n'aurait été précisé.

Dans ce else, le programme pourrait, par exemple, rediriger l'internaute vers une page sur laquelle on peut choisir le client désiré.

Travailler avec la valeur reçue en paramètre

C'est le tableau $_GET qui nous permet de retrouver des paramètres dans l'URL.

Il s'agit d'un tableau associatif. Sa clé correspond au nom de la variable dans l'URL.

Pour faciliter le code, il convient de placer cette valeur dans une variable.

PHP
if (isset($_GET['id'])) {
   $id = $_GET['id'];
   // Penser à utiliser les requêtes préparées si $id doit être ajouté dans une requête SQL
   // ou un htmlspecialchars() avant de l'afficher à l'écran.
   ...
}
else {
   ...  // Action à poser si la page n'a pas reçu l'identifiant en paramètre.
} 

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre