Adresse absolue de la page en cours, avec variables $_get

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 523 fois - Téléchargée 17 fois

Contenu du snippet

Bonjour à tous ;)
Ceci est une petite fonction servant à retourner l'adresse absolue de la page en cours avec les variables passé en GET.
Tout est expliqué dans les commentaires du code.

Source / Exemple :


<?php
/*

  • Ceci est un fichier pour tester la fonction PHP adresse_absolue(), cette
  • fonction permet de retourner l'adresse absolue de la page en cours avec les
  • variables passé en $_GET.
  • /
//On test la fonction sans exclure de variables $_GET et en les affichant echo '<h3 style="color:blue">'. adresse_absolue(true, "").'</h3>'; //********************************************************************************* /**
  • Cette fonction permet de retourner l'adresse absolue de la page en cours avec les
  • variables passé en $_GET.
*
  • @param <boolean> $avec_get
  • Ici il faut mettre "true" si vous voules l'adresse absolue avec les variables
  • $_GET, "false" pour obtenir juste l'adresse absolue
*
  • @param <Array> $array_exclure_get
  • Si vous voulez exclure des variables $_GET dans l'adresse absolue renseignez
  • ici un ARRAY avec les clef à exclure, par exemple vous avez la variable
  • $_GET['pseudo'] qui rentre dans votre page mais que vous ne la voulez pas,
  • alors vous ferez comme ceci:
  • --------------------------------------------------
  • $array[0]="pseudo";
  • echo adresse_absolue($array, true);
  • --------------------------------------------------
  • mettre une chaine de caractère vide si vous ne voulez pas interdire de
  • variables GET:
  • --------------------------------------------------
  • echo adresse_absolue("", true);
  • --------------------------------------------------
  • @return <String>
  • chaine de caractères contenant l'adresse absolue de la page en cour.
  • /
function adresse_absolue($avec_get,$array_exclure_get) { //on crées l'adresse absolue sans les variables $_GET $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $i=0;//compteur de boucle //si on veut les variable $_GET if($avec_get) { //on initialise la chaine de carctères qui vas contenir tous les paramètres //passé en GET ex: "pseudo=dariumis&connecte=1". $param=""; //on récupère les clef de l'array $_GET $array_clef_get=array_keys($_GET); //pour chaque valeurs passé en GET foreach ($_GET as $v) { //on initialise un booléen pour voir si vous avez interdit la variable //en cours passé en GET $interdit=false; //on teste si vous avez interdit des variables en cours passé en GET if(is_array($array_exclure_get)) {//si vous en avez interdit //on parcour le tableau d'interdiction foreach ($array_exclure_get as $v2) {//pour chaque variables interdit //on la teste avec la clef de la variable GET en cours if($v2==$array_clef_get[$i]) {//si la variables en cour est interdit //on initialise le booléen d'interdiction a "true" $interdit=true; //on a fini le teste, donc on sort de la boucle break; } } } //on regarde si vous avez interdit la variables passé en GET if(!$interdit) {//si vous ne l'avez pas interdit //on écrit dans $param la clef de la variable GET en cours et sa valeur $param.=$array_clef_get[$i]."=".$v."&"; } //on incremente le compteur avant de passer à la prochaine Variable GET $i++; } //on enlève le dernier "&" des paramètres $param=preg_replace("#&$#", "", $param); if($param!="") {//si il y a des paramètres GET à écrire //alors, on les écrits $url.="?".$param; } } return $url;//on retourne le résultat } ?>

A voir également

Ajouter un commentaire

Commentaires

phpAnonyme
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
13 -
1- Adresse absolue ? donc faut pas utiliser GET en dure, mais bien ce qui semble avoir été passé en paramètres. GET peut être ajouter/modifier/supprimer en dure dans le script; tu peux te trouver avec des données non passé en URL => conséquence en autres boucles supplémentaires, etc, etc
2- Pas besoin de faire deux boucles pour ça
3- Pas assez de protection sur les superGlobal $_SERVER
4- Tu te compliques trop la vie notamment avec ton compteur de boucle...

/*
$displayVars = boolean, affichage ou non des valeurs passés en paramètres
$excludeVars = array or boolean false, valeurs à exclure
*/function parsor($displayVars true, $excludeVars false)
{
$Uri='http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['PHP_SELF']);
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );

if(!$displayVars OR empty($parsed_url['query']))
return $Uri;
if(!$excludeVars Or !is_array($excludeVars))
return $Uri.'?'.$parsed_url['query'];

$set_url = '';
$tempA = explode('&', $parsed_url['query']);
if(sizeof($tempA))
{
foreach($tempA AS $keyA => $valA)
{
$tempB = explode('=', $valA);
if(!in_array($tempB[0], $excludeVars))
$set_url .= (!empty($set_url) ? '&' : '').$tempB[0].'='.$tempB[1];

}
}
return $Uri.'?'.(empty($set_url) ? $parsed_url['query'] : $set_url);
}
phpAnonyme
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
13 -
#Remplacer :
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );

#Par :
$parsed_url = parse_url( strip_tags($_SERVER['REQUEST_URI']) );
TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
10 -
Salut,

Et si par exemple on utilise du https ou du ftp on fais comment ? Ha tu vous retourne une fausse url...
Sinon je n'ai que survolé car la quantité de commentaires inutiles (et bourrés de fautes) ainsi que la grosse lourdeur du code m'a un peu découragé. Allez, avec juste quelques fonctions sur les tableaux tu économises un grand nombre de lignes et fais maigrir ton code de 70% minimum. Comme l'a dit phpAnonyme avant moi : tu te compliques la vie !
cs_emilia123
Messages postés
122
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
5 janvier 2009
-
Bonjour,

Voici un petit "tips" qui peut servir assez souvent surtout dans la concaténation comme ici.
Ici :
# //on enlève le dernier "&" des paramètres
# $param=preg_replace("#&$#", "", $param);
ou meme ici, dans le commentaire de "phpAnonyme":
$set_url .= >>>>(!empty($set_url) ? '&' : '')<<<<....;

On peut tout simplement utiliser l'une des 3 fonctions suivantes (en fonction de la situation):
- trim(...)
- ltrim(...)
- rtrim(...)
Peu de gens savent que l'on peut passer, à ces fonctions, un paramètres supplémentaires indiquant la liste des caractères à supprimer en fin et/ou début de chaine.
$param=preg_replace("#&$#", "", $param);
devient simplement :
$param=rtrim($param, '&');
Du coup on n'est pas obligé de faire des tests à chaque boucle. On ajoute à chaque boucle sans se poser de question, et on fait un trim à la fin pour supprimer les éléments aux extrémités.

EM
phpAnonyme
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
13 -
#rtrim()
Je connais, c'est surtout qu'il fallait y penser ! Il y a des tas de fonctions qui se ressemblent...
Après cela ne joue pas de manière significative sur les performances sur code. Donc bon à savoir pour certains peut-être, mais pas grand intérêt sur le fond du problème avec le code d'origine.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.