
Parfois, lors du développement de pages Web, on est confronté à une situation où on a besoin de récupérer le nom de la page appelante. Ceci par exemple pour personnaliser le traitement selon la page qui a appelé, imaginons le cas de figure suivant :
Après saisie d'un produit, je suis redirigé à la page de détail du produit saisi. la même chose si j'effectue une recherche, je peux consulter le détail du produit recherché à partir des résultats de recherche. Dans le premier cas on souhaite mettre en place un lien dans la page de détail pour passer à la page de saisie pour introduire un nouveau produit. Dans le deuxième cas, on souhaite mettre en place un lien dans la page de détail pour retourner aux résultats de recherche.
Il s'agirait dans cas de figure
de personnaliser le lien selon la page appelante, il existe plusieurs solution pour remédier à ce problème :
Méthode - 1: Créer bêtement deux pages distinctes de détail, une pour la saisie et une pour la recherche. une solution assez simple au début, car il suffit de copier coller la page de détail, et modifier directement l'url du lien de retour. mais les choses vont se compliquer lorsqu'on voudra modifier les données de la page de détail, la il faut veiller toujours à appliquer chaque modification dans les deux pages, ce qui peut devenir fastidieux avec le temps.
Méthode - 2: Passer à la page de détail un paramètre HTTP "source" dont préciser soit "page_saisie" ou "page_recherche" :
detail_produit.php?source=page_saisie
Selon le paramètre source, le traitement sera différent dans la page de détail :
<?php
if ($_POST['source']='page_saisie') {
?>
<a href="saisir_nouveau_produit.php">saisir un nouveau produit</a>
<?php
} else if ($_GET['source']=='page_recherche.php') {
?>
<a href="resultats_recherche.php">retour au résultats de la recherche</a>
<?php
}
?>
cette solution mieux que celle d'avant, qui réglé le problème à condition de renseigner le paramètre "source" avec la bonne valeur, et l'envoyer avec la bonne méthode d'envoi (GET ou POST).
Méthode - 3: Récupérer le nom de la page appelante depuis la requête HTTP qui fais appel à la page de détail. Il existe un header spécial dans chaque requête HTTP envoyée, ayant le nom 'HTTP_REFERER' et qui contient l'url source depuis étais crée la requête HTTP. Pour lire la valeur de ce header, il faut le récupérer à partir du tableau prédéfini $_SERVER, il regroupe tout les headers qui composent une requête HTTP.
$url_source=$_SERVER['HTTP_REFERER'];
Maintenant il reste juste d'extraire le nom de la page depuis l'url récupérer. Pour faire, il existe dans php une fonction dédiée à ce besoin, c'est la fonction url_parse. elle permet d'extraire le nom de la page à partir d'un chemin web long.
<?php
$url_source=$_SERVER['HTTP_REFERER'];
$page_source=url_parse($url_source);
if ($page_source=='saisie.php') {
?>
<a href="saisir_nouveau_produit.php">saisir un nouveau produit</a>
<?php
} else if ($page_source=='recherche.php'){
?>
<a href="resultats_recherche.php">retour au résultats de la recherche</a>
<?php
}
?>
Cette méthode est plus flexible que celle d'avant, plus besoin d'utiliser un paramètre pour indiquer la source, puisque le paramètre $_SERVER['HTTP_REFERER'] le permet déjà.