Variables dans l'url php

Bleek Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
Bleek Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   112
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   112
 
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
pseudopod
 
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   Statut Membre Dernière intervention   126
 
d'où l'utilité à bien protéger et vérifier les variables post et get.
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   126
 
pas oublier de mettre le return $url;
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
C'est corrigé ^^
Un simple oublie... :(
0
Bleek Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
Petit up, please !!!
0