Mettres des liens dans une liste déroulante php

Signaler
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009
-
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009
-
Mesdames Messieurs bonjour :)
Un petit soucis à ce jours, j'essaie (en vain) d'instaurer des liens dans des listes déroulantes (<option>) mais cela ne fonctionne pas.
Je vais tout d'abord vous montrer le code:
page: requete.php
            <select name="division" size="1">
                    <option value="*"><?php
                                    mysql_select_db($database, $Commerce);
                                          // Affiche les différentes divisions à l'écran
                                     while ($tableau = mysql_fetch_row($resdivision))
                                         {
                                             echo "<OPTION value=".$tableau[0].">".$tableau[0]." - ".$tableau[1]."";
                                         }
                                        ?>
                </select>

J'affiche donc une liste déroulante avec différente valeur (les différentes divisions d'une gamme de produit) qui sont tableau[0] et le nom des divisions tableau[1]. Je voudrais que dès que l'utilisateur choisit une divisions ça amène sur cette page avec une variable dans l'URL
Exemple, il choisit ENDO - ENDOSCOPIE
ça fait une redirection sur requete.php?div=ENDO
donc je pensais faire <option ...>"> <?php echo $tableau[0]." - ".$tableau[1]; ?> </option>

mais ça veut pas ='(
Quelqu'un pour m'aider :D?
Cordialement,
shikapowa

13 réponses

Messages postés
48
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
16 août 2010

Salut,

Voici un exemple avec un formulaire qui redirige automatique à la selection d'une option, ce ne sont pas des liens il faut en faite mettre dans l'evenement onChange de ta liste de deroulant un window.location.href(lien), c'est donc du javascript :

echo "
<form action="" method="post">
<select name="division" onChange="if (this.value != '') window.location.href('requete.php?div=' + this.value);">";
       
$req = $bd_nu->sql_query("SELECT * FROM table");
       
while ($row = $bd_nu->sql_fetcharray($req))
{            
  $val = $row['champ1'];
  $aff = $row['champ2'];
  echo "<option value="$val">$aff</option>";
}
           
echo "</select></form>";

Voila j'espere que ceci pourra t'aider

@+
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Oui j'étais actuellement en train d'essayer ce système qui fonctionne très bien je te l'accorde mais aurais tu une idée pour que la liste déroulante affiche ce que l'utilisateur à choisit après le rafraichissement de la page?
Car là par exemple je choisit ENDO, ça affiche bien l'URL ?div=ENDO
Mais au niveau de la liste déroulante après le rafraichissement, ça n'affiche plus ce que l'utilisateur à choisit.

As tu une idée?
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Ah et une autre remarque, ce système fonctionne bien sous IE mais pas sur Mozilla oO
Messages postés
48
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
16 août 2010

Ah oui, essai de faire ceci :

echo "
<form  action="" method="post">
<select id="list1" name="division" onChange="if (document.getElementById('list1').value != '') window.location.href('requete.php?div=' + document.getElementById('list1').value);">";
       
$req = $bd_nu->sql_query("SELECT * FROM table");
       
while ($row = $bd_nu->sql_fetcharray($req))
{            
  $val = $row['champ1'];
  $aff = $row['champ2'];
  echo "<option value="$val">$aff</option>";
}
           
echo "</select></form>";
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Nan monsieur IE (comme d'hab) ne veut pas, il retourne la première valeur à l'affichage tandis que monsieur Firefox lui n'accepte même pas le onchange x)
Messages postés
48
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
16 août 2010

retire le if (document.getElementById('list1').value)

essai comme ceci pour voir :

echo "
<form action="" method="post">
<select name="division" onChange="window.location.href('requete.php?div=' + this.value);">";
       
$req = $bd_nu->sql_query("SELECT * FROM table");
       
while ($row = $bd_nu->sql_fetcharray($req))
{            
  $val = $row['champ1'];
  $aff = $row['champ2'];
  echo "<option value="$val">$aff</option>";
}
           
echo "</select></form>";
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

J'ai retiré le if dès le départ car ça fonctionné pas avec, donc ce que je fais là, c'est que j'affiche $division = $_GET['division'] pour que l'utilisateur est la trace de ce qu'il a choisit mais ça affiche deux fois le choix dans la liste déroulante (le choix de l'utilisateur + les différents choix)
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Salut,

Ajoute un test dans la boucle while, du style :

while(...) {
  [...]
  echo '<option value="'.$val.'"';
  if ($val === $_GET['division']) echo ' selected="selected"';
  echo  ">$aff</option>";
}

Cordialement,

Kohntark -
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Nikel, j'ai modifié le code avec la condition de Kohntark et ça sélectionne, Merci beaucoup vous deux pour votre aide précieuse, juste une dernière question, sur la 2e liste déroulante je mets ceci
                            <select name="famille1" size="1" onChange="window.location.href('requete.php?div=<?php echo $division?>&fam1='+ this.value)">

Sauriez vous pourquoi je reçois %20 avant le résultat de this.value
Exemple :
requete.php?div=ENDO&fam1=%20022
Au lieu de
requete.php?div=ENDO&fam1=022 ?

Cordialement,
Antoine
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Erreur bête de ma part, c'est dans la valeur de <option> j'avais mis un espace :D
Merci à vous
Messages postés
2
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
15 juin 2009

oui le %20 n'est que le petit espace entre le |&fam1='+| et le |this.value)|
si tu tape |echo $division?>&fam1='+this.value)">| tu ne l'auras plus
voila
Messages postés
2
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
15 juin 2009

et oui tu l'as pigé tout seul
(j'étais un peu en retard) :(
Messages postés
51
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
26 juin 2009

Merci quand même ^^