Variables dans l'url php

Fermé
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 - Modifié par Bleek le 24/06/2010 à 21:35
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 - 27 juin 2010 à 13:48
Bonjour à tous, je suis nouveau sur le forum !

Voilà, je cherche à conditionner la présence ou non de la(les) variable(s) dans l'url.

Au départ l'url est simple et fonctionnelle, elle se présente comme cela

http://www.site.fr/page.php?search=article

Si je clique sur un lien de tri par couleur, l'url deviendra

http://www.site.fr/page.php?search=article+noir

Jusque là ça fonctionne !

Par contre, si maintenant je filtre sur une autre variable je me demande comment associer le troisième paramètre qui donnera une url comme ça

http://www.site.fr/page.php?search=article+noir+valeur

Ce que je souhaite, c'est me retrouver avec une url dynamique qui ajustée qui tient compte de la requête précédente et qui ajoute juste le nouveau critère.

Cela doit être réalisable, je crois ?

Cela fait un moment que je cherche mais je ne trouve pas...
A voir également:

9 réponses

LelLex Messages postés 1628 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 5 septembre 2012 112
24 juin 2010 à 22:00
Tu devrais pas plutôt faire : http://www.site.fr/page.php?search=article&couleur=noir&variable=valeur

Comme ça tu peux choisir ta variable comme tu veux avec GET, par exemple prendre que la couleur : $_GET['couleur']

C'est bien ça que tu demandes ?
3
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 1
24 juin 2010 à 22:16
J'ai utiliser cette variable $_GET['couleur'] (même si j'ai simplifier mon propos). Mais cela ne suffit pas...

Si je devais expliquer autrement ce que je souhaite faire, je dirais que j'ai 6 types de liens : article, couleur, taille, prix, et tri croissant/décroissant

Le visiteur peux cliquer sur un article et ensuite de filtrer sur la couleur ou la taille.
Donc, l'url doit pouvoir être construite au fur et à mesure en tenant compte du précédent choix.
Le tout en restant sur la même page et en passant les paramètres dans l'url.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
24 juin 2010 à 22:35
Comme as dit LelLex, tu dois simplement vérifier pour chaque variable si elle existe.
si oui, tu en tient compte pour ton classement.
sinon, tu n'en tient pas compte.
0
LelLex Messages postés 1628 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 5 septembre 2012 112
24 juin 2010 à 22:43
Ce que tu souhaites faire, c'est de pouvoir ajouter les variables dans l'URL ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est pas trés clair, en fait tu parles d'une seule variable au début alors que tu en veut plusieurs...
Pour passer les variables en get c'est soit en formulaire soit en écrivant ton URL à la main(en fait les variables derrière l'URL) . Pour l'instant ça doit être clair.
Donc en php soit tu fais un formulaire(je parles pas du graphisme, il peut avoir la tête qu'il veut mais c'est un <form method="GET">) et donc pour reprendre une valeur déjà passée dans la variable tu testes si elle existe et tu l'ajoutes dans un input du formulaire de type hidden:

if(!empty($_GET['montruc']){  
// donc on a bien une page ou une valeur est envoyée en GET, la variable //$_GET['montruc']  
//pour la reprnredre on la met dans le formulaire:  
echo "<input type='hidden' name='montruc' value='".$_GET['montruc']."' />"  
// lorsque l'on envoie le formulaire toutes les valeurs des input avec leur nom //seront envoyé dans l'URL  

}  


Ce qui écriras donc l'URL suivant http://url_de_destination.html?montruc=lavaleur

lorsque qu'il y a plusieurs input les variables sont séparées par le symbole "&"

Donc si on a 15 input l'url s'écrit comme ça:

://url_de_destination.html?montruc=lavaleur&montruc1=uneautrecaleur&montruc2=encoreuneautrevaleur http://url_de_destination.html/...]


...bon je vais pas l'écrire 15 fois non plus...

Du coup si tu veut simuler un envoi de valeurs en GET, soit par GET, soit par POST ou avec la redirection header(location:) il faut que l'url soit une chaine de caractères comprenant toutes les variables.


en GET c'est marqué dans les attributs du form(sous réserve qu'on ait vérifié les variables préablablement récupérées en GET)
<FORM METHOD="GET" ACTION="http://url_de_destination.html<?php echo "?montruc='".$GET['montruc']."&montruc1=".$GET['montruc1']; ">


enPOST ça marche aussi:
<FORM METHOD="POST" ACTION="http://url_de_destination.html<?php echo "?montruc='".$GET['montruc']."&montruc1=".$GET['montruc1']; "
>

avec header()
<?php  
header("location:http://url_de_destination.html?montruc=".$GET_['montruc']."&montruc1=".$_GET['montruc1']);  

?>


Bien sur c'est pas reccomandé de passer des valeurs en GET et limités à 255 caractères. Pas recommandé parce qu'imagine qu'il y ait une base de donnes ou que l'on ne veuilles pas afficher la valeur , bin c'est foutu tout est dans l'url et quelqu'un de mal intentionné peut modifier lui même l'url pour faire planter le programme ou pire insérer des valeurs fausses ou encore pire...
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
25 juin 2010 à 15:16
d'où l'utilité à bien protéger et vérifier les variables post et get.
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
Modifié par arthezius le 25/06/2010 à 18:00
La solution de LelLex est la plus simple.
Rien ne t'empêche de redefinir tes urls simplement en reprenant ces variables.
Exemple:
<?php 
echo'<a href="http://www.site.fr/page.php?search=article'; 
if(isset($_GET['couleur'])) 
	{echo'&couleur=noir';} 
if(isset($_GET['variable'])) 
	{echo'&variable=valeur';} 
echo'&new=ajout">Ajout</a>'; 
?>

Dans cet exemple, j'ai repris celui de LelLex dans son premier message. Ce que j'ai rajouté, te donne une url sur un lien en reprenant tes variables si elles sont déclaré et en ajoutant une nouvelle.
On pourrai très bien imaginé faire ça avec une fonction.
function newurl($new,$valeur) 
	{ 
	$url='http://www.site.fr/page.php?search=article'; 
	if(isset($_GET['couleur'])) 
 		{$url=$url.'&couleur=noir';} 
	if(isset($_GET['variable'])) 
		{$url=$url.'&variable=valeur';} 
	$url=$url.'&'.$new.'='.$valeur.'';
	return $url;
	}

Dans ce cas, le lien sera généré comme suis:
<a href="'.newurl('new','ajout').'">Texte</a>

J'ai pas testé, mais ça devrai fonctionner correctement.
« La recherche commence là où s'arrête la connaissance. »
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
25 juin 2010 à 15:39
pas oublier de mettre le return $url;
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
25 juin 2010 à 18:01
C'est corrigé ^^
Un simple oublie... :(
0
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 1
Modifié par Bleek le 25/06/2010 à 20:50
Bonsoir à tous,

J'ai testé le dernier exemple d'Arthezius et cela ne me donne pas le résultat escompté. Je fais un copier coller pour voir le résultat sur le lien texte et cela me donne une url de ce type :

http://www.site.fr/page.php?search=article&new=ajout

Peut être n'ai je pas compris ? Apparemment cela ne marche pas !

De plus, la couleur, les tailles par exemples ont de multiples choix !
Comment les 'variabilisés' sachant qu'à l'avance je ne sais pas quel choix fera le visiteur ?

De mon coté, j'ai tenté des choses avec $_SERVER['QUERY_STRING'] placé comme ça :

http://www.site.fr/page.php?<?php echo $_SERVER['QUERY_STRING'] ?>+37

37 étant une taille. Le problème avec ça est si je clique sur 38 juste après je me retrouve avec +37 38 derrière. Donc l'url ajoute à la queue leu leu la dernière sélection. Pas cool ! Bref je tourne en rond...
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
26 juin 2010 à 05:37
Mon exemple est à réadapter suivant ta situation.
En fait, on sais pas du tout comment va être utiliser le principe que tu cherches à développer.

Reprenons mon exemple.
http://www.site.fr/page.php?search=article&new=ajout  

Une url de ce type comporte deux variables.
Tu les récupères de la manière suivante:
$_GET['search'] et $_GET['new']
Tu peux très simplement les reprendre pour faire de nouveaux url.
<a href="http://www.site.fr/page.php?search='.$_GET['search'].'&new='.$_GET['new'].'">lien</a>


Essai de nous expliquer précisément et clairement ce que tu souhaites faire pour qu'on puisse t'aider au mieux. Tes précédentes explications étaient tout sauf précise et du coup on patauge pour essayer de comprendre ce que tu souhaites faire et t'aider au mieux à partir de ce qu'on comprends.
Ma méthode est, de ce que j'ai compris de ce que tu veux, à priori la bonne. Le tout est de savoir comment l'agencer pour obtenir le résultat que tu souhaites.

Si j'ai bien compris, tu veux faire un tris de donnée en passant des paramètres dans l'url.
Pour ce faire, je suppose que les données sont stocké dans une BDD et que tu les affiches avec une requêtes SQL.
Les paramètres de tris (variables) que tu passes dans l'url sont donc utilisé dans ta requête SQL.
Ce qui serait intéressant ce serait de voir ta requêtes et ainsi la manière dont tu utilises ces variables.
Essai de clarifié ta situation pour qu'on puisse t'aider au mieux à partir d'une base solide d'information.
0
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 1
26 juin 2010 à 14:14
Bon, tu as raison je vais essayer d'être le plus exhaustif possible !!!!

J'ai 6 types de liens : article, couleur, taille, prix, et tri croissant/décroissant

1) Article = restera fixe sur la page (charger avec la page article...)
2) Couleur = dépend de la sélection du visiteur
3) Taille = 33 à 42 (idem que dessus)
4) Prix = utilisé avec une instruction BETWEEN (pour des gammes de prix entre p1 et p2)
5) Tri = Croissant ou décroissant

J'utilise une requete sql de ce type :

$query_article = sprintf("SELECT * FROM 'nom_table' WHERE 'detail' LIKE  REPLACE(%s,' ','%%')  AND 'prix' BETWEEN %s and %s", GetSQLValueString("%" . $colname_article . "%", "text"),GetSQLValueString($p1_article, "double"),GetSQLValueString($p2_article, "double"));
$query_limit_article = sprintf("%s LIMIT %d, %d", $query_article, $startRow_article, $maxRows_article);
$article = mysql_query($query_limit_article, $bdd) or die(mysql_error());
$row_article = mysql_fetch_assoc($article);


Pour ce qui est du tri croissant ou décroissant :

if (isset($_GET['croissant']))
                        {
$query_article= sprintf("SELECT * FROM 'nom_table' WHERE detail LIKE  REPLACE(%s,' ','%%') ORDER BY prix ASC", GetSQLValueString("%" . $colname_article . "%", "text"));
$query_limit_article= sprintf("%s LIMIT %d, %d", $query_article, $startRow_article, $maxRows_article);
$article= mysql_query($query_limit_article, $bdd) or die(mysql_error());
$row_article = mysql_fetch_assoc($article);
                        }


Le problème avec le tri ci-dessus, c'est qu'il renvoit une requête qui ne tient pas compte du dernier paramètre charger par le visiteur.

Mon but : Le visiteur peux cliquer sur un article et ensuite le filtrer sur une des couleurs ou une des tailles (33 à 42) ou les 2 à la fois.
Donc, l'url doit pouvoir être construite au fur et à mesure en tenant compte du précédent choix. Le tout en restant sur la même page et en passant les paramètres dans l'url via une requête sql.

Donc, si la requête est testée pour vérifier la présence de variable(s), elle ne prend en compte que ce qui est déjà présent dans l'url.

J'espère que j'ai suffisamment détaillé ! Dis moi si tu veux plus de détails.

Au fait, merci d'avance !!! :-)
0
Bleek Messages postés 8 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 31 mai 2014 1
27 juin 2010 à 13:48
Petit up, please !!!
0