Trier une liste déroulante selon une table adjacente

Résolu
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

  1. 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;
    
    0
    1. Salut Nhay,

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

      Merci
      0
      1. 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;

        }

        ?>
        0
        1. 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>
          0