8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour tout le monde Smiley smile


A défaut de de connaître les bon mots clés pour faire un bonne recherche sur google, je vous pause directement la question.

Comment cumuler plusieurs variable dans une url en cliquant sur plusieurs lien. ?

exemple (si je choisie plusieurs critère de sélection) :

index.php?categorie=A

J'ajoute :
<a href="ranger=nom">classer par nom</a>
<a href="ranger=date">classer par date</a>


Puis :
<a href="limite=20">Limiter à 20</a>
<a href="limite=50">Limiter à 50</a>
<a href="limite=100">Limiter à 100</a>

Et je veux obtenir :
index.php?categorie=A&ranger=nom&limite=50


Comment obtenir un lien comme ca
index.php?categorie=A&ranger=nom&limite=50 plutôt que comme ca index.php?limite=50

Merci d'avance Smiley ravi
Modifié par Spark (14 Mar 2007 - 15:35)
Salut Spark Smiley cligne

Es-tu vraiment obligé de passer tes variables par méthode GET ou peux-tu utiliser la méthode POST ?
Si tu peux utiliser la 2ème méthode, un petit $_POST['nom-de-variable'] suffira Smiley biggrin

Atention à ne pas oublier d'indiquer dans ton Form la méthode Post ^^

++
Salut,

Il n'est pas possible de créer une url en cliquant sur plusieurs liens. En effet, chaque lien possède sa propre url et lorsque tu cliques dessus, tu es redirigé vers la page en question.

Il est peut être possible de "simuler" ce que tu souhaites en utilisant javascript (par exemple, mettre un onclick sur les liens qui eux même n'ont aucune url : href="#" ) mais je pense que c'est très compliqué et surtout peu accessible.

Le plus simple pour cela est de réaliser un formulaire contenant l'ensemble de tes critères de sélection. Si tu souhaites avoir les variables affichées dans l'url il suffit d'utiliser la méthode get.

J'éspère que cela t'aidera Smiley cligne
Modifié par ymhotepa (13 Mar 2007 - 22:58)
Administrateur
Bonjour,

+1 pour le formulaire, sinon un tableau de 2 par 3 avec les 6 possibilités dans 6 liens différents si c'est plus ergonomique (peu probable)

Sinon ce que tu demandes existe pour des fichiers XML avec XLink (hum Smiley haha ) mais c'est pas humainement compréhensible (?) et n'est pas prêt de concerner nos navigateurs.
+1 pour le formulaire, mais tu peux aussi répéter l'URL actuelle ans test liens, grâce à la variable REQUEST_URI :

Par exemple ce lien :
echo "<a href=\"{$_SERVER_REQUEST_URI}&valeur=2\"<...</a>

ajoute &valeur=2 à la fin de l'URL.
A toi de voir s'il faut ajouter un & ou un ?
Merci à tous,


La méthode post j'y avais pensé mais tenais à connaître la méthode proposé par QuentinC, car j'étais sur qu'un truc comme ça existe Smiley smile


Voilà ce que ça donne (très bien pour ajouter 1 variable, je ne vais pas m'aventurer à les cumuler ^^):

<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&limite=25">Limiter à 25</a>
<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&limite=50">Limiter à 50</a>
<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&limite=100">Limiter à 100</a>



Maintenant j'ai un autre problème, mais ca sera pour autre post Smiley smile
a écrit :

Maintenant j'ai un autre problème, mais ca sera pour autre post

Je devine : avec mon truc ça marche, mais tes variables arrivent en double si tu cliques sur plusieurs liens successifs... bah suffit d'être un peu intelligent.
Non ce n'est pas ça. Le problème que tu évoque n'a pas d'incidence, c'est le dernier clique qui est pris en compte, j'ai utilisé cette méthode pour ce que je voulais faire, c'est bien suffisant. Smiley cligne
Je suis très intéressé par la solution dans le cas où on clique plusieures fois sur le lien d'affilé ou si la variable est déjà dans l'url. Quelqu'un pourrais t-il m'aider ??

Voici mon code actuel :



<a href="<?php echo $_SERVER['REQUEST_URI']; ?>?lang=fr">
<img src="squelettes/images/flag_france.png" height="13" width="20" alt="Fran&ccedil;ais" title="Fran&ccedil;ais" />
</a>




En gros je veux ajouter la variable ?lang=fr si elle n'est pas présente et si si j'ai déjà la variable ?lang=en alors je la remplace. Mon but étant de créer des drapeau permettant de changer la langue du site.

Merci d'avance.
Modifié par Klesk (03 Aug 2007 - 12:19)
Juste une petite remarque : l'utilisation d'un formulaire s'applique dans le cadre de passage de paramètres dit sensibles ... Or dans ce contexte celles-ci ne me semblent pas sensibles ... d'où mon étonnement pour cet engouement pour le formulaire ...
Dans un premier temps merci pour ta réponse rapide, cependant je n'y connais presque rien a PHP et je t'avouerai que ce qui ressemble à la solution à mon problème est du chinois pour moi Smiley smile .

En gros j'imagine qu'il faut récupérer l'adresse via la fonction que j'ai déjà mise puis ensuite la tester pour voir si on a déjà ?lang=fr ou ?lang=en et avec une formule conditionnelle, dans un cas on insère la variable ?lang=fr ou alors on remplace ?lang=en par ?lang=fr.

Sachant je précise que par défault si ni l'une ni l'autre des variables ne sont dans l'url, le site est en français. En gros quand ya pas de variable on a aucune utilité à avoir un lien clicable vers ?lang=fr sur le drapeau français.

Idéalement j'aimerai aussi pouvoir changer le statut du drapeau en fonction de la langue actuellement en vigueur.

Sur le principe je pense comprendre par contre je ne sais absolument pas comment procéder !! :S

Sachant que je vais ensuite faire l'inverse pour mon drapeau anglais Smiley smile
Modifié par Klesk (03 Aug 2007 - 13:07)
Je pensais que l'exemple était limpide ! Smiley biggol

Alors plus clairement : d'après ton post tu n'as qu'une variable (lang) à rajouter à ton url. Donc tu pourrais faire :
<?php
// on définit les langues autorisées
$langues = array('fr', 'en');
// on récupère une éventuelle variable lang passée en GET
$lang = (isset($_GET['lang'])) ? $_GET['lang'] : '';
// Si cette variable n'existe pas ou quelle est incorrecte on lui affecte fr par défaut
if ($lang == '' || !in_array($lang, $langues)) {
$lang = 'fr';
}
//on définit le suffixe à rajouter à tous les liens 
$suffix = "?lang=$lang";
?>

et plus loin dans ton code, chaque lien est écrit sous la forme :
<a href="page.php<?php echo $suffix ?>">Page</a>

A+ Smiley smile
La fonction que tu me donnes, me fais exactement le meme résultat qu'un simple <a href="<?php echo $_SERVER['REQUEST_URI']; ?>?lang=fr"></a>, à savoir qu'elle ne teste pas si la variable est déjà dans l'url et donc je me retrouve avec des variables en double. :S.

je précise que je l'ai mise sous cette forme :


<a href="<?php echo $_SERVER['REQUEST_URI']; ?><?php echo $suffix ?>"></a>


Car mon url peut varier et mettre "index.php<?php echo $suffix ?>" ne marcherait pas car l'utilisateur peux avoir envi de passer le site dans une autre langue alors qu'il n'est pas forcément arrivé sur la page d'accueil, on aura donc d'autres variables avant (eventuellement une varible de langue d'ailleur d'ou l'idée de tester l'url).

SI j'ai bien compris la fonction citée dans ton post défini uniquement la variable a insérer je me trompe ?
Modifié par Klesk (03 Aug 2007 - 13:26)
Ben... pourquoi utilises-tu $_SERVER['REQUEST_URI'] ? Smiley rolleyes

*Edit: on s'est croisés...

Le code que je t'ai donné ne fonctionne que si tu as une seule variable GET Smiley murf . Tu as un exemple de lien possible (avec plusieurs variables) ?
Modifié par Heyoan (03 Aug 2007 - 13:29)
Je viens de tester sans et c'est pareil. La fonction est une version plus sécurisée de


<a href="<?php echo $_SERVER['REQUEST_URI']; ?>?lang=fr"></a>


Je pense qu'il faut tester l'url pour éviter les doublons et remplacer ?lang=en par ?lang=fr le cas échéant. Actuellement je me retrouve avec les deux.

Donc en se basant sur ton premier jet ça devrait le faire Smiley smile
Modifié par Klesk (03 Aug 2007 - 13:30)
Klesk a écrit :
Je pense qu'il faut tester l'url pour éviter les doublons et remplacer ?lang=en par ?lang=fr le cas échéant.

Dans l'exemple que je te donne et le lien sur l'autre sujet, l'idée est justement d'éviter de redécouper le $_SERVER['REQUEST_URI'] puisqu'il existe déjà les isset($_GET[...
Modifié par Heyoan (03 Aug 2007 - 13:33)
Heyoan a écrit :
Ben... pourquoi utilises-tu $_SERVER['REQUEST_URI'] ? Smiley rolleyes

*Edit: on s'est croisés...

Le code que je t'ai donné ne fonctionne que si tu as une seule variable GET Smiley murf . Tu as un exemple de lien possible (avec plusieurs variables) ?


je te donnes un scénario : tu arrives sur le site par l'accueil. Par défault mon site n'affiche aucun nom de fichier en url et est en français.

tu veux changer la langue pour l'anglais et pour se faire tu clic sur le lien du drapeau qui a pour effet d'ajouter bètement ?lang=en dans l'url à la suite du reste (peu importe l'ordre des variable).

Dans le cas ou tu es déjà sur un page ayant en url ?lang=fr ou ?lang=en, on a pas besoin de rajouter une fois de plus cette variable sous risque de disfonctionnement. D'ou l'idée de tester la présence des ces deux variables dans l'url.

Dans le cas ou on a déjà ?lang=fr et qu'on clic sur le drapeau français alors ça en fais rien, et si on est sur une page ayant dans l'url ?lang=en alors on la remplace par ?lang=fr.

EN gros faut simplement que les drapeau test la présence ou non des variables dans l'url et ensuite ajoute ou non la bonne variable en fonction du drapeau sur lequel on a cliqué.
Je viens de re regarder ta fonction, en fait si j'ai bien compris tu test si la variable ?lang=fr est déjà présente auquel cas tu ne l'ajoute pas, donc ça c'est super, en revanche il faudrait tester si on a déjà la variable ?lang=en et le cas échéant la remplacer par ?lang=fr ou la supprimer bètement (le site étant par défault en français quand on a aucune variable).

Après faut que je fasse l'inverse pour l'anglais, on test si la variable ?lang=en est déjà là, si c'est le cas on fait rien, si c'est pas le cas on test si ya la variable fr et on la remplace cette fois car si on la supprime le site sera en français.

Tiens au fait : www.korx-crew.com

Tu pourras voir ce que ça donne. j'ai remarqué que quand je suis en anglais, mon drapeau français me propose un lien vers ?lang=en du coup alors qu'il devrait me proposer toujours le ?lang=fr.
Modifié par Klesk (30 Jul 2008 - 12:06)
Re',

j'ai modifié le code pour tenir compte d'une éventuelle variable fichier :
<?php
$suffix = '';
// on récupère une éventuelle variable fichier passée en GET
$fichier = (isset($_GET['fichier'])) ? $_GET['fichier'] : '';
// on définit les fichiers autorisés
$fichiers = array('contact', 'aide', 'forum');
// Si cette variable est incorrecte on ne met rien
if (!in_array($fichier, $fichiers)) {
$fichier = '';
}
// Si fichier est renseigné, on change le suffixe
if ($fichier != '') {
$suffix = '?fichier='.$fichier;
}

// on définit les langues autorisées
$langues = array('fr', 'en');
// on récupère une éventuelle variable lang passée en GET
$lang = (isset($_GET['lang'])) ? $_GET['lang'] : '';
// Si cette variable n'existe pas ou quelle est incorrecte on lui affecte fr par défaut
if ($lang == '' || !in_array($lang, $langues)) {
$lang = 'fr';
}
//on définit le suffixe à rajouter à tous les liens 
if ($suffix == '') {
$suffix = "?lang=$lang";
} else {
$suffix .= "&lang=$lang";
}
?>

Même si ça semble plus compliqué que de simplement tester l'existence ou non de lang=en dans l'URL, c'est AMHA une bonne idée de toujours tester toutes ses variables (surtout en GET) pour ne pas, par exemple, faire un include d'une page inexistante... et du coup tu as déjà le suffixe à rajouter à tes liens...
Pages :