ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET

Signaler
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
-
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53720-adresse-absolue-de-la-page-en-cours-avec-variables-get

Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
37
#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.
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
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
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 !
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
37
#Remplacer :
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );

#Par :
$parsed_url = parse_url( strip_tags($_SERVER['REQUEST_URI']) );
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
37
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);
}