begin process at 2010 02 09 22:29:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > GÉNÉRATEUR DE LISTE DÉROULANTE

GÉNÉRATEUR DE LISTE DÉROULANTE


 Information sur la source

Note :
8,6 / 10 - par 5 personnes
8,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :liste, déroulante, générer, html Niveau :Débutant Date de création :06/07/2006 Date de mise à jour :06/07/2006 17:06:30 Vu :21 742

Auteur : Vince66

Ecrire un message privé
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

 Description

Voici une petite fonction sans prétention mais qui peut rendre des services :)
Elle permet, à partir d'une requête SQL, de retourner le code HTML d'une liste déroulante (<select><option>...).
On peut également définir une valeur par défaut lors de l'affichage de la liste déroulante (selected="selected") grâce au paramètre $selected auquel vous attribuez l'identifiant de l'élément à afficher. L'élément 0 est l'élément affiché par defaut.
Le paramètre $nom correspond à l'attribut "name" de la liste.

Voilà, simple comme "bonjour" :)

Source

  • /**
  • * Fonction creer_select
  • * Renvoi le code HTML d'une liste déroulante en fonction de la requête
  • * SQL ($sql). La liste déroulante portera le nom $nom et sélectionnera
  • * par défaut l'élément portant l'id $selected
  • **/
  • function creer_select ($sql, $nom, $selected = 0, $defautSelected = 'Cliquez ici pour sélectionner') {
  • // On execute la requête
  • if (false != ($query = mysql_query ($sql)))
  • {
  • // On vérifie que la requête retourne quelque chose
  • if (mysql_num_rows ($query) != 0) {
  • // Variable $html contenant le code HTML à renvoyer
  • $html = '<select name="'.$nom.'">
  • <option value="0"'.(($selected == 0)?' selected="selected"':'').'>'.$defautSelected.'</option>';
  • // Boucle parcourant le résultat de la requête
  • while ($value = mysql_fetch_row ($query)) {
  • // Pour chaque enregistrement on ajoute une option dans la liste
  • $html .= '
  • <option value="'.$value[0].'"'.(($selected == $value[0])?' selected="selected"':'').'>'.$value[1].'</option>';
  • }
  • // Fin de la liste déroulante
  • $html .= '</select>';
  • // On renvoi le code HTML
  • return $html;
  • // Sinon, si la requête ne retourne rien
  • } else {
  • // On renvoi false
  • return false;
  • }
  • // Sinon la requête est fausse
  • } else {
  • // On renvoi false
  • return false;
  • }
  • }
/**
* Fonction creer_select
* Renvoi le code HTML d'une liste déroulante en fonction de la requête
* SQL ($sql). La liste déroulante portera le nom $nom et sélectionnera
* par défaut l'élément portant l'id $selected
**/      
function creer_select ($sql, $nom, $selected = 0, $defautSelected = 'Cliquez ici pour sélectionner') {
  // On execute la requête
  if (false != ($query = mysql_query ($sql)))
  {
    // On vérifie que la requête retourne quelque chose
    if (mysql_num_rows ($query) != 0) {
      // Variable $html contenant le code HTML à renvoyer
      $html = '<select name="'.$nom.'">
<option value="0"'.(($selected == 0)?' selected="selected"':'').'>'.$defautSelected.'</option>';
      // Boucle parcourant le résultat de la requête
      while ($value = mysql_fetch_row ($query)) {
        // Pour chaque enregistrement on ajoute une option dans la liste
        $html .= '
<option value="'.$value[0].'"'.(($selected == $value[0])?' selected="selected"':'').'>'.$value[1].'</option>';
      }
      // Fin de la liste déroulante
      $html .= '</select>';
      // On renvoi le code HTML
      return $html;
    // Sinon, si la requête ne retourne rien
    } else {
      // On renvoi false
      return false;
    }
  // Sinon la requête est fausse
  } else {
    // On renvoi false
    return false;
  }
}

 Conclusion

Je n'ai pas constaté de bug mais je n'ai pas non plus tester ma fonction dans tous les sens.
Donc si vous voyez des corrections ou des améliorations à apporter, je suis à l'écoute :)


 Historique

06 juillet 2006 12:05:57 :
Modification de la mise en page du code pour une meilleur lisibilité.
06 juillet 2006 17:06:30 :
Prise en compte des remarques faites par Kankrelune. Merci ;)

 Sources du même auteur

AFFICHAGE D'UN TABLEAU HTML À PARTIR D'UN ARRAY

 Sources de la même categorie

CALCUL D'UNE DISTANCE ORTHONORMIQUE par bossfoot
Source avec Zip ESPACE ADMIN SIMPLE par mousaid_88
Source avec Zip IMAGINE-CMS V2.20 par djack69
Source avec Zip AFFICHAGE ET GESTION DE DIAPORAMA EN PHP SANS BASE DE DONNÉE... par mldvb
Source avec Zip Source avec une capture PARSER ALLOCINE par cyrhades

 Sources en rapport avec celle ci

Source avec Zip GÉNÉRER UN MOT DE PASS ALÉATOIRE par narkos2
UNICODE TO HTML ENTITIES par CrazyShooter
SEARCH QUERY COMPOSER par Centauriel
Source avec Zip CHAINER 3 LISTES DÉROULANTES EN AJAHT par CARATGOLD2004
Source avec Zip LISTE DÉROULANTE AVEC TOUS LES PAYS par Arafat Le Sorcier

Commentaires et avis

Commentaire de kankrelune le 06/07/2006 14:57:35

bien... perso je rajouterais un paramètre pour personaliser le descriptif de la valeur par défaut... .. .

Sinon utilise les simples quotes plutot que les doubles quotes... c'est toujours ça de gagné... .. . ;o)

(($selected == 0)?" selected=\"selected\"":"")

=>

((empty($selected)) ? ' selected="selected"' : '')

Mais c'est du détail... .. .

Le die c'est un peu crade pour de la prod... .. .

function creer_select ($sql, $nom, $selected = 0, $defautSelected = 'Cliquez ici pour sélectionner')
{
  if(false != ($result = mysql_query ($sql)))
  {
    if (mysql_num_rows($result) != 0)
    {
      $html = '<select name="'.$nom.'">
      <option value="0"'.((empty($selected)) ? ' selected="selected"' : '').'>'.$defautSelected.'</option>';
      
      while($value = mysql_fetch_row ($result))
        $html .= '
        <option value="'.$value[0].'"'.(($selected == $value[0]) ? ' selected="selected"' : '').'>'.$value[1].'</option>';
      
      $html .= '</select>';
      
      return $html;
    }
    else return false;
  }
  else return false;
}

Je met 8/10... .. .

@ tchaOo°

Commentaire de Vince66 le 06/07/2006 16:40:51

Merci pour tes conseils que je note avec interêt :)
Pour les quotes, tu as raison. Je n'y avais pas pensé même si j'essaye de les utiliser le plus souvent possible.
Ensuite, tester la requête pour vérifier si elle renvoit "false", j'étais à cent lieux d'y penser.
C'est une logique que je n'avais jamais imaginé mais en effet, c'est plus propre que d'arrêter le script pour afficher un message d'erreur MySQL.

Je m'en vais modifier la source en conséquence. :)

Commentaire de malalam le 07/07/2006 07:45:37 administrateur CS

Hello,

pas gd chose à ajouter, si ce n'est que quand c'est possible, j'utiliserais la comparaison typée :
  if(false !== ($result = mysql_query ($sql)))

if (mysql_num_rows($result) !== 0)

mais toujours
(($selected == $value[0]) ? ' selected="selected"' : '')
(on ne sait jamais, selon le type renvoyé par la requête)

Un exemple de requête ne serait pas de trop, pour bien montrer ce que ta fonction va utiliser.
Parce que : SELECT nom, prenom, id FROM users
risque de surprendre quelques débutants peu attentifs :
SELECT id, CONCAT(nom, ' ', prenom) as nom_prenom FROM users
(par exemple).

Et enfin, je ferais quelques vérifications sur les arguments passés, histoire d'éviter les mauvaises surprises.

Ah, et si la requête ne retourne rien, j'aurais tendance à afficher une liste vide, mais bon...ça, c'est une question de préférence ;-)

C'est pas mal, plutôt propre, et très certainement utile à beaucoup.

8 aussi.

Commentaire de stepibou le 08/07/2006 12:01:27

A si un truc :
Ton parametre $selected = 0 , y sert a rien :

tu laisse juste (en param):
$selected = '' si il est vide pas de selected ="selected"
et si il est rempli dans l'utilisation de ta fonction par
'default' :
$defautSelected = 'Cliquez ici pour sélectionner'
et si autre text , ben autre texte...

Sinon, par contre y te manquerai un parametre, pour ajouter des evenements javascript ou des styles.

bon code , a+

Commentaire de malalam le 10/07/2006 09:39:33 administrateur CS

Stepibou => quelle différence tu fais entre $selected = 0, et $selected = '', dans les paramètres d'une fonction...?
Et tu te trompes sur son utilisation, je pense. Il prend pour valeur un entier, l'id dans la bdd correspondant à la valeur d'une option, pour que ce soit celle-ci qui soit sélectionnée par défaut.
Le defaultSelected n'a rien à voir : c'est juste un texte pour mettre une 1ère option à blanc, indiquant à l'utilisateur ce qu'il faut faire.

Commentaire de stepibou le 10/07/2006 14:00:19

salut!

ouai, ok, oué, j'y avais plus ou moins pensé apres coup... donc en effet tu a bien besoin des deux parametres distincts , (ce que je proposais était un bidouillage..)

Mais il faudra eventuellement rajouter l'autre paramètre dont je parlais!

Sinon, malalam, ta classe de formulaire est beaucoup plus complète, et presque plus simple.. lol

bye

Commentaire de malalam le 10/07/2006 14:29:24 administrateur CS

Presque... ;-)

Commentaire de mdupras le 23/02/2007 16:43:20

Je suis débutant avec PHP. Je trouve cette fonction très intéressante mais effectivement il serait très intéressant d'avoir un exemple complet afin de nous permettre de l'utiliser plus rapidement. Je dois créer une lsite déroulante à partir de données lues d'une Table de Base de données Mysql.
Merci à l'avance. Je cherche encore a intégrer tout cela.

Commentaire de fafakart le 01/06/2007 15:42:24

Bonjour,

je voudrais savoir comment on fait pour générer une liste déroulante à partir d'une table de la base de donnée en php.

merci d'avance pour vos reponse

Commentaire de elodie77 le 10/07/2007 21:59:30

Bonjour,

J'ai fait une liste déroulante lié à une table qui marche nikel..
Mais coment faire pour supprimer les doublons lors de la selection ou de l'affichage???

Merci...

Commentaire de Vince66 le 11/07/2007 08:50:42

Bonjour,
>Fafakart :
Voir le script plus haut... :)

>Elodie77
Pour éviter les doublons, tu peux utiliser la fonction DISTINCT dans ta requête SQL. :)

Commentaire de fatatra le 14/09/2007 16:32:38

Bonjour;
Parfait ce code, seule une petite question subsite pour moi qui débute.
Comment diable fait t'onb pour executer du code html contenu dans une variable php??

en gros qd j'utilise cette fonction ca passe puisque je ne génére pas d'erreur mais rien ne s'affiche, aucune liste déroulante a l'horizon!!

Merci de votre aide.

Commentaire de fatatra le 14/09/2007 16:48:27

en faite g trouver tout seul, je fait echo creer_select(les parametres...) et j'ai une liste qui s'affiche,

dernier probleme les valeur qu'a recuperer la fonction dans la tables font des lignes blanches dans la liste déroulante??? en gros ca cette fonction me genere ce code:

<select name="liste joueurs">
<option value="0" selected="selected">Cliquez ici pour sélectionner</option>
<option value="med" selected="selected"></option>
<option value="reg" selected="selected"></option>
<option value="seb" selected="selected"></option></select>    </body>

Une idée du pourquoi??

Commentaire de Vince66 le 14/09/2007 16:48:43

un simple "echo" pour afficher le résultat.
Exemple :
echo creer_select('SELECT `id`, `libelle` FROM `ma_table`', 'ma_liste');

Commentaire de Vince66 le 14/09/2007 16:51:23

Le premier champ de ta requête doit être l'identifiant et le deuxième doit être le texte à afficher dans la liste.
Voir l'exemple que j'ai donné ci-dessus qui est, je pense, le plus simple à comprendre. :)

Commentaire de fatatra le 14/09/2007 17:03:00

ok g compris tout seul merci!

Commentaire de fatatra le 14/09/2007 17:04:42

merci pour tout vince66, j'avais pas vu tes commentaires mais c'est exactement ca, coool.

Commentaire de jphilippev le 14/01/2008 11:07:39

bonjour c'est à peu près ca que je cherchais
juste une question comment fait t'on si on veut effacer des champs qui sont identiques
genre il y a 5 rouges 3 bleus et 8 jaunes et avoir seulement une liste qui reprend rouge, bleu et jaune???

Commentaire de Vince66 le 14/01/2008 11:14:08

Ca se joue au niveau de ta requête SQL ça. Je ne connais pas la structure de ta table mais un DISTINCT pourrait faire l'affaire :)

Commentaire de jphilippev le 14/01/2008 11:41:06

merci vince après recherche j'ai vu aussi le GROUP BY

Commentaire de Cko4 le 19/02/2008 15:19:54 8/10

Merci beaucoup pour cette source, après avoir appliquer quelques modifications pour combler certains de mes besoins, cette fonction m'est très utile.

Commentaire de Santana123451 le 19/03/2008 08:22:48

Bonjour a tous,
svp, je veux faire apparaitre une liste déroulante a partir d'une autre liste...
voici l'astuce :
<< On choisissons un champ de la liste une autre liste apparait devant cette liste, et on peut choisir a partir
de la nouvelle liste un champ qui va selectionner untableau de la base de donnée >>

Commentaire de Vince66 le 19/03/2008 08:54:40

Avec de l'AJAX pourquoi pas.

Commentaire de Louis13 le 12/04/2008 11:18:37

Comment récupérer la valeur sélectionnée dans la liste déroulante
merci

Commentaire de Vince66 le 14/04/2008 09:05:42

Bonjour,
En mettant la liste déroulante dans un formulaire et en validant celui-ci peut-être ? :-)

Commentaire de Louis13 le 14/04/2008 09:39:36

c'est fait mais selon l'exemple en ecrivant echo creer_select(...), je n'arrive pas à retrouver la valeur du select choisi

Commentaire de Vince66 le 14/04/2008 14:29:13

J'avoue que je ne comprends pas bien la question...
echo creer_select() te permet de générer le code HTML d'une liste déroulante, rien d'autre.

Si tu veux récupérer la valeur de la liste déroulante, il te faut la mettre entre des balises <form></form> et récupérer la valeur via $_POST sur la page suivante.

Commentaire de programmeurjs le 27/10/2008 09:12:17

Bonjour
J'ai copié la fonction que vous avez écris en haut, j'ai ajouté quelques instructions(en dehors de la fonction) pour me connecter à la base de données puis j'ai appelé la fonction mais la liste ne s'est pas affichée.
est ce que vouus avez une idée pourquoi elle ne s'est pas affichée ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Liste déroulante (html) [ par Dede35 ] Bonjour, J'ai une liste déroulante et lorsque je clike le bouton ok pour valider la sélection, la liste déroulante se remets à la 1ère item. Or moi j Formulaire avec plusieurs actions [ par PsyCaDi ] Bonjour,J'ai un pb sur un formulaire.J'ai une liste déroulante et 2 boutons.Je voudrais qu'un bouton execute une requête SQL d' INSERT et que l'autre Liste déroulante MAJ???? [ par rich25200 ] Bonjour,J'ai une liste déroulante alimenter par une table prenons par exemple la table famille ou dans ma liste il y a tout les noms de famille..Je ve liste déroulante / popup [ par CC24 ] bonjour à tous !je fais appel à vous car j'ai un problème que je n'arrive pas à résoudre. je m'explique : sur ma 1ère page, j'ai une liste déroulante. premiere ligne liste déroulante [ par robinou ] Bonjour,Avec ce script, aucun problème pour le passage de la variable et la re-direction. Le seul problème est qu'il ne sélectionne pas la première li Liste déroulante en php [ par iomega ] Bonjour à tous!!!J'ai une liste déroulant ou je séléctionne une dateavec un form action et lorsque je sélectionne cette date le problème c'est que cel systeme de panier de selection... [ par h2h ] voila sur mon appli lutilisateur a la possibilité de selectionné plusieurs critere et selon ses choix une liste est générer ( une liste de bien presen Liste déroulante [ par iomega ] Bonjour à tous,voici mon p'tit problème qui me casse la tete de puis hier je suis en train de faire un moteur de recherche multi-critères et j'ai une Liste déroulante lié a une base MySQL [ par pi0up51 ] Je sais faire ça en asp mais pas en php, ça doit pas être bien compliqué mais si qqn peut m'aider ;)@tte et bonn' prog'pi0up51http://www.progotop.ht.s Liste déroulante mettre en couleur la sélection [ par thedentiste ] Bonjour tlmvoila mon probleme j'essaye d'affecter différentes couleurs à chaque ligne sélectionner dans ma liste déroulante à sélection multiple.par e


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales