Page 1 sur 1

Ajouter des arguments à l'Url

Posté : 20 nov. 2006, 01:06
par FredoMkb
Bonjour à tous :)

Voici la question sur laquelle je bloque depuis un bon moment (le lot de tous les débutants :roll: )

Dans une fonction Php, je construit des arguments pour des adresses Url afin d'afficher des contenus dans un site... mais, les arguments de ma fonction remplacent ceux du site, alors que j'aimerais qu'ils se rajoutent... comment faire ? :shock:

Par exemple, si l'adresse Url du site est :

Code : Tout sélectionner

http://www.monsite.fr/site/
Dans ce cas, pas de soucis, ça marche, puisque je fais dans ma fonction la chose suivante :

Code : Tout sélectionner

<a href="?article=5">Article 5</a>
Et j'obtient donc :

Code : Tout sélectionner

http://www.monsite.fr/site/?article=5
Mais, comment faire lorsque j'ai une adresse Url du type :

Code : Tout sélectionner

http://www.monsite.fr/site/?page=8
Si je fais mon lien de la même manière, ça ne fonctionne plus, car, même si le lien affiche bien l'article 5, l'argument de la page disparaît, et le résultat n'est pas celui qu'on attend...

En fait, au lieu d'obtenir un truc du genre :

Code : Tout sélectionner

http://www.monsite.fr/site/?page=8&article=5
J'obtiens toujours ça :

Code : Tout sélectionner

http://www.monsite.fr/site/?article=5
En somme, je voudrais que l'ensemble des arguments déjà présents dans l'adresse Url restent en place, tout en ajoutant les miens...

Voilà... je sèche... :cry:

Merci à tous ceux qui pourront me donner quelques pistes pour résoudre ce petit problème (cas d'école ? 8) )...

a+ :)

Posté : 20 nov. 2006, 01:47
par DocType
Pour récupérer ton url actuelle => $_SERVER['REQUEST_URI']
Après, il suffit de concaténer et de supprimer les pramètres futiles à ton goût

Posté : 20 nov. 2006, 01:56
par momox
Récuperes $_GET, tu supprimes les entrées non-necéssaires, tu index le tout dans un tableau et tu fais un joli foreach suivi d'un implode et ensuite, tu obtiens une belle URL :)
Enfin bon, c'est le principe que j'utilise pour mon CMS :)

Posté : 20 nov. 2006, 02:04
par DocType
Récuperes $_GET, tu supprimes les entrées non-necéssaires, tu index le tout dans un tableau et tu fais un joli foreach suivi d'un implode et ensuite, tu obtiens une belle URL :)
Enfin bon, c'est le principe que j'utilise pour mon CMS :)
En somme, je voudrais que l'ensemble des arguments déjà présents dans l'adresse Url restent en place, tout en ajoutant les miens...
Vu sa demande il vaut mieux s'appuyer sur php_self ou request_uri. Cela demandera moins de temps de conception et moins de calculs php. :wink:

Ajouter des arguments à l'Url

Posté : 20 nov. 2006, 02:43
par FredoMkb
Bonsoir à tous :)

Merci beaucoup pour vos réponses rapide :pouce:

Je viens de regarder un peu dans la doc en ligne pour comprendre comment utiliser "PHP-SELF", mais je n'y arrive pas à le faire fonctionner correctement... et la fonction "_GET" reste un mystère pour moi :-s

Bon, admétons que j'ai une Url de ce type :

Code : Tout sélectionner

http://www.monsite.fr/site/?page=8
Comment puis-je faire, concrétement, pour ajouter à la fin :

Code : Tout sélectionner

&article=5
Si c'est juste ça, j'arrive plus au moins bien, mais là où ça se corse, c'est que je ne sais pas a priori si le signe d'interrogation, qui indique le début des arguments, est présent ou pas...

Bref... je coince grave ](*,)

Encore merci à tous pour votre aide :)

Posté : 20 nov. 2006, 03:03
par Ajoloca
Bonsoir,

Une façon simple de savoir si un caractère se trouve dans une chaîne c'est d'utiliser la fonction PHP strpos() qui te retournera un entier (en cas de succès) représentatn la prmière position de ce caractère dans la chaîne ou false si le caractère n'y figure pas, ce qui veux dire qu'il faut faire attention avec la façon de l'utiliser (ne pas confondre position 0 == premier caractère et false == pas de caractère), dans ton cas ça donnerais QQ chose du style.
$uriActuel = $_SERVER['PHP_SELF'];
$mesParams = 'par=1&par1=2';
if (false !== (strpos($uriActuel, '?'))){
   // L'uri contient au moins un paramètre
   // Je concatenne avec '&'
   $uriActuel .= '&';
}
else{
   // L'uri n'as pas de paramètres
   // Je concatenne avec '?'
  $uriActuel .= '?';
}
$uriFinal = $uriActuel . $mesParams;

Posté : 20 nov. 2006, 11:20
par Ryle
En fait, dans ton url, on distingue deux chose : l'adresse de la page (jusqu'au "?" éventuel) et les paramètres passés (tout ce qui suit le "?")

Lorsque tu créer un lien relatif (qui ne commence pas par / ou http://) , le navigateur utilise par défaut le chemin de la page pour le construire, mais il ne reprend aucun des paramètres passés si tu ne le lui demande pas explicitement :) C'est donc à toi de constituer la chaine de paramètres que tu souhaites passer dans le lien.


$_GET et $_POST sont deux variables "super-globales" (c'est à dire que tu y a accès n'importe où dans ton code, comme si c'était une constante définie sur chaque page). Il s'agit en fait de deux tableaux associatifs qui contiennent les paramètres qui ont été envoyés à ta page. $_GET contient ceux passés dans l'url, $_POST ceux passés via la méthode "post" d'un formulaire.
Tu pourrais donc les utiliser pour retrouver les paramètres passés à la page et reconstituer ton url en ajoutant ton paramètre supplémentaire.

$_SERVER est également une variable super-globales, mais celle-ci fait référence à tout ce qui se passe sur le serveur. Ainsi $_SERVER['PHP_SELF'] est une variable qui contient le chemin et le nom de la page appelé dans l'url, $_SERVER['QUERY_STRING'] te donne la chaine de requête qui a permis d'accéder à la page, etc.

Utilise la fonction print_r() sur ces différentes variables pour voir leur contenu, ça te donnera une idée de ce que tu peux récupérer sur ta page :)
echo '<pre>'; // formate le texte pour le rendre plus lisible
print_r($_SERVER); // affiche le contenu du tableau $_SERVER
echo '</pre>';

Posté : 20 nov. 2006, 19:10
par FredoMkb
Bonjour à tous :)

Désolé pour cette réponse tardive, et un Grand Merci pour toutes vos explications et précisions claires et instructives :)

J'ai enfin réussi à faire quelque chose qui a l'air de bien fonctionner, avec la fonction "$_GET[argument]"... mais je n'ai pas encore fini mon projet... dès que je l'aurai fini, je posterai ici la solution que j'aurais retenu.

Encore merci à tous pour votre aide :pouce:

Posté : 21 nov. 2006, 05:26
par FredoMkb
Bonjour à tous :)

Voici donc ce que donne mon grossier bricolage :shock: mais ça a l'air de fonctionner pour l'instant :
// Nettoyage de l'adresse Url pour construir les liens
$requete = $_SERVER['argv'][0];
$debut = '?'.$requete.'&';
$debut = preg_replace('#var_mode=.*?([\&])#i','',$debut);
$debut = preg_replace('#date=.*?([\&])#i','',$debut);
$debut = rtrim($debut, '&');
$debut = str_replace('?&','?',$debut);
$debut = str_replace('&&','&',$debut);
Si vous avez quelques idées pour améliorer un peu tout ça... n'hésitez pas, je suis preneur 8)

Encore merci à tous pour votre aide précieuse :pouce: