Afficher des valeurs uniques dans un select

Eléphant du PHP | 80 Messages

28 oct. 2009, 14:01

Bonjour !!

Je souhaiterai intégrer des informations dans un select, que je vais chercher dans une base de donnée.

Toutefois, comment indiquer de ne pas intégrer une valeur, si celle-ci se trouve déjà dans le select ?

En vous remerciant..

Eléphanteau du PHP | 27 Messages

28 oct. 2009, 14:17

J'ai rien panné :lol: !

Sur le principe de "un petit dessin vaut mieux qu'un long discours"... un bout de code ou un exemple à nous montrer peut-être :?:

Eléphant du PHP | 80 Messages

28 oct. 2009, 14:23

Alors !!

Select, c'est un menu déroulant !! J'aurai peut-être du utiliser ce mot dés le départ :)

Donc, en fonction des infos que je vais chercher dans ma table, et que je veux afficher dans le menu déroulant, certaines infos peuvent avoir déjà été inscrite dans le menu déroulant lors d'une entrée antèrieure.

Comment faire pour que je ne trouve pas plusieurs fois la même information dans le menu déroulant !!

Vu que je cherche du code, je n'ai rien à te proposer !!

Merci encore !!

Eléphanteau du PHP | 27 Messages

28 oct. 2009, 14:42

Ha ba déjà... moi j'étais parti sur le select en SQL... ça s'éclaircit un peu ^^

Si je comprends bien tu veux ajouter dynamiquement des options à ton menu déroullant ?
Donc on parle d'Ajax ou quelquechose dans ce goût la je suppose (sinon tu repartirais à chaque fois d'une page blanche et la question se pose tout autrement...)?

Même pas un petit exemple un peu concret t'es sur(e) ?
Genre... qu'y a t'il au départ dans ton sélect ? Comment a t'il été prérempli ? Et comment tu comptes pousser les infos supplémentaires dedans (si on exclu pour le moment ton problème de doublons) ?

Eléphant du PHP | 80 Messages

28 oct. 2009, 14:52

Nan, je veux même pas que cela se fasse dynamiquement !!

Je charge ma page, dedans, y'a un menu déroulant, qui se rempli en fonction d'info dans ma table, sauf que lorsqu'une info est déjà dans le menu, ben que la requête passe à une autre info, etc ...

Ex, si dans une table, j'ai des noms, prenoms, et ages, lorsque je fais un menu déroulant listant tous les ages de toutes les entrées, ben que "21" (exemple) ne soit écrit qu'une seule fois, alors qu'il y a 15 personnes qui ont 21 ans.

On va y arriver, j'en suis sur :)

merci encore !

Eléphanteau du PHP | 27 Messages

28 oct. 2009, 15:01

Ha ba voila... a question claire, réponse claire... (mais on va quand-même extrapoler un peu ^^)

Si on suppose que tu fais une requête par select à remplir il te suffit d'utiliser l'instruction SQL DISTINCT dans ta requête.
SELECT DISTINCT prenom FROM table_utilisateurs ORDER BY prenom
De cette façon tu n'auras qu'une seule fois chaque prénom (en l'occurence) dans le retour de ta requête.

Si on suppose que tu n'as qu'une seule requête pour tout ramener (solution que je ne préfèrerais pas pour ma part, mais tout n'est qu'une question de point de vue, d'habitude et de tout un tas de trucs comme ca...), il serait plus sympa de ranger tous tes prénoms dans un tableau, tes nom pareil, et ainsi de suite... puis d'utiliser la fonction php array_unique qui fera sauter toutes les entrées en double de ton tableau, pour enfin écrire tes options à partir de ton tableau.

Voilou !

Eléphant du PHP | 80 Messages

28 oct. 2009, 15:06

Je te remercie !!

Bonne continuation, et de toute façon, à bientôt :)

Eléphant du PHP | 369 Messages

28 oct. 2009, 16:22

Salut,
Alors !!
Select, c'est un menu déroulant !! J'aurai peut-être du utiliser ce mot dés le départ :)
Donc, en fonction des infos que je vais chercher dans ma table, et que je veux afficher dans le menu déroulant, certaines infos peuvent avoir déjà été inscrite dans le menu déroulant lors d'une entrée antèrieure.
Comment faire pour que je ne trouve pas plusieurs fois la même information dans le menu déroulant !!
Vu que je cherche du code, je n'ai rien à te proposer !!
Merci encore !!
Voici un script minimaliste assez illisible mais qui marche.
Pendant, semble t'il, de ce que tu cherches. Plusieur solutions pour un même problème.
kran à posé les bases à toi d'adapter. Je pense qu'un tri interne à la base et une comparaison
en html peut être une bonne idée.
<?php

  // Gestion du tableau générique, peut être placé dans setElement mais
  // en dehors je préfère.
  //
  function & gestion()
  {
     static $array = Array();
     return $array;
  }

  // si mixed est faux renvoie tout le tableau
  // si différent de faux alors empile la donnée
  //
  // Retour: valeur ou boolean suivant échec/réussite
  //
  function setElement($strLine)
  {
     // Récupère le tableau
     //
     $array = & gestion();

     // Si déja comprise dans le tableau alors on zappe
     //
     if (in_array($strLine, $array)) return false; //die ("Clef ".$strLine." deja presente...!");

     // Assigne la valeur
     //
     array_push($array, $strLine);

     // Réussite de la fonction
     //
     return true;
  }

  // Traitement de la DB
  //
  function working()
  {
     // Récup le tableau
     //
     $array = & gestion();

     // Gestion "mini" de l'appel DB
     //
     mysql_connect("localhost", "login", "passwd") or die("Crash connect...");
     mysql_select_db("Ta_DB");

     // Appel
     //
     $result = mysql_query("SELECT Le_Sujet FROM Ta_Table");
     if ($result !== false)
     {
        while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {
           // Enregistre ou non l'élément
           //
           if (setElement($row["Le_Sujet"])) { ; };
           else { ; }
        }
     }
     mysql_close();
  }

  // Ai collé le traitement dans une fonction vu que j'aime pas les trucs qui trainent
  //
  working();

  // rendu html
  //
  $cde  = "";
  .
  .
  .
  $cde .= "<form>\n";
  $cde .= "   <select>\n";

  // Nombre d'éléments dans le tableau
  //
  $iCount = count($array);

  // Si le tableau est à : au moins 1 élément
  //
  if ($iCount > 0)
  { 
     for ($i=0; $i<=$iCount-1; $i++)
     {
        // Mettre des attributs...
        //
        $cde .= "      <option value=\"".$array[$i]."\">$array[$i]</option>\n";
     }
  }
  $cde .= "   </select>\n";
  $cde .= "</form>\n";
  .
  .
  .
  echo $cde;

  exit(0);
?>
Ce n'est rien de plus qu'un exemple. A toi de (peut-être) combiner les deux formes.
Le script est "très moche" je préfère travailler en objet mais bah... ca te donne déja
une "petite" réponse afin d'organiser tes idées.

Telle que présenté mon script gère qu'un tableau à 1 dim mais pas très difficile
de le modifier.

Si je suis à côté, désolé, suis pas loin tout de même ;)

Bon code @+ ;)