Trier une liste déroulante selon une table adjacente

Résolu
DGDB Messages postés 6 Statut Membre -  
DGDB Messages postés 6 Statut Membre -
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. Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   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;
    
    0
  2. DGDB Messages postés 6 Statut Membre
     
    Salut Nhay,

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

    Merci
    0
  3. DGDB Messages postés 6 Statut Membre
     
    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
  4. DGDB Messages postés 6 Statut Membre
     
    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