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

phpAnonyme
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
- 30 oct. 2011 à 23:31
phpAnonyme
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
- 8 nov. 2011 à 02:05
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

phpAnonyme
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
55
8 nov. 2011 à 02:05
#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.
cs_emilia123
Messages postés
122
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
5 janvier 2009

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

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