Trier une liste déroulante selon une table adjacente

Résolu/Fermé
Messages postés
6
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
1 février 2013
-
Messages postés
6
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
1 février 2013
-
Bonjour,
Je crée une liste déroulante avec la boucle while suivante :

$result = mysql_query (" SELECT segment FROM segmentation ");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$format = '<option value="%1$s">%1$s</option>';
echo sprintf($format,$row[0]);
}

Cette liste déroulante fait référence à l'ensemble des arguments disponibles de la table segmentation.

Tout en conservant la totalité des arguments de cette table, comment puis-je la réafficher, en la triant selon le choix antérieur d'un utilisateur ?

En d'autres termes, comment réafficher à cette utilisateur (par exemple dans le cas d'une mise à jour de son profil) la même liste, mais en plaçant en tête de celle-ci, le choix retenu par cet utilisateur.
Son choix, bien évidemment, ayant été stocké dans une table "profil" par exemple.

Merci pour vos réflexions avisées.

PS : la mettre en tête ou bien insérer l'option selected :
'<option selected value="'.$xxx.'">'.$xxx.'</option>';

4 réponses

Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
126
Moi je le ferait comme ça :
$format = '<option value="'.$row[0].'"';
if($row[0]==$CHOIX_UTILISATEUR)$format.=" selected='selected' ";
$format .='>'.$row[0].'</option>'; 
echo $format;
Messages postés
6
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
1 février 2013

Salut Nhay,

je fini mon codage en cours,
teste ta proposition et reposte les résultats obtenus !

Merci
Messages postés
6
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
1 février 2013

Re Nhay,

Super, un grand merci,
Ton code fonctionne nickel.

Utile pour la communauté, le voici en entier
(Il y a bien évidemment et certainement un code plus efficace que celui-ci.)


Objets :
Un menu déroulant dynamique, prenant en compte un choix antérieur.

Données :
Une BDD.
Deux tables en cause : doss_clt et segmentation

Actions : (par exemple dans la page profil)
Un client effectue dans une liste déroulante, un choix enregistré dans la table doss_clt.
Ultérieurement, il revient sur son profil pour apporter quelques modifs.

Objectif :
La liste de choix doit afficher son choix antérieur.

Code php

<?php

session_start();

# remonte le choix de l\'utilisateur
$Nclt = $_SESSION['idClient'];

$chx_Seg = mysql_query ("SELECT * FROM doss_clt WHERE idClient='$Nclt'");
if (mysql_num_rows($chx_Seg)){
$verif_seg = mysql_fetch_object ($chx_Seg);
$CHOIX_UTILISATEUR = $verif_seg->seg;
}

# remonte la liste segmentation en affichant le choix utilisateur
$result = mysql_query (" SELECT segment FROM segmentation ");

# boucle while construisant la liste
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

$format = ' <option value="'.$row[0].'"';
if($row[0] == $CHOIX_UTILISATEUR) $format.=" selected='selected' ";
$format .='>'.$row[0].'</option>';
echo $format;

}

?>
Messages postés
6
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
1 février 2013

Un oubli important :

Ce bout de code constitue un fichier php (menuDeroul.inc), appelé par une instruction <select> require() </select> dans votre fichier html ou php appelant :

<select name="seg" style="font-size: 12px; background-color: #FAFAFA;">
'; require('menuDeroul.inc'); echo'
</select>