Page 1 sur 1

Champ select et valeurs multiples prédéfinies

Posté : 01 déc. 2008, 11:27
par Alain78
Bonjour. C'est simple et pourtant cela ne fonctionne pas...
:evil:

Je souhaite afficher dans un champ select une liste de valeurs dont certaines sont récupérées d'une table.
L'affichage doit présenter les valeurs 'selected'.

1ère phase : récupération des valeurs (du client) dans un tableau
:

Code : Tout sélectionner

$sql="SELECT nom FROM equipements WHERE `type_equipement` =4 and `ref_salle` = '$ref_salle' "; $result0=mysql_query($sql); $services_immobiliers= mysql_fetch_assoc($result0);
le résultat (certain car vérifié) est 3 occurences trouvées


2ème phase : affichage du champ select
- Je récupère la liste de référence (table =$table)
- Je vérifie à chaque occurence de la liste de référence si elle existe dans le tableau du client. Si oui je la marque selected.
$sql="SELECT * FROM $table WHERE `objet` = 'services immobiliers'";
$resultat=mysql_query($sql);
	echo "<select name='services_immobiliers[]' size='5' multiple='multiple' >";
		while ($row = mysql_fetch_assoc($resultat)) {
			$tt=$row[ref_referentiel];
			if (isset($services_immobiliers) and in_array($tt,$services_immobiliers)) {
				echo "<option value= {$row[ref_referentiel]} selected='selected' > {$row[libelle]} </option>"; 
			}else{
				echo "<option value= {$row[ref_referentiel]} > {$row[libelle]} </option>"; 
                        }
               }
        echo '</select><br>';
Le constat :
1° la phase 1 m'annonce récupérer 3 valeurs mais la phase 2 n'en teste que 2 ????
2° le selected fonctionne bien mais uniquement pour la 1ère valeur qui satisfait la condition. Les autres, bien qu'elles soient bien testées ne sont pas marquées comme selected.

Si vous avez une explication, je suis preneur car dans un autre script cela fonctionne bien mais la différence est que le tableau testé ne provient pas d'une table externe mais d'un array interne au script. A mon avis cela n'est pas la cause du problème.
Merci à vous et bonne journée.


:wink:

Posté : 01 déc. 2008, 11:39
par yaug
Hum.
Pour t'aider à déboguer, pourrait tu faire un print_r() de ton tableau renvoyé par la requete ?

Ensuite..
Le selected, tu le fais pour un champ multi select ?

Posté : 01 déc. 2008, 11:57
par Alain78
J'utilise une table temporaire (debug) pour debuger.
La commande à l'issue de ma requete (phase 1) est :
$nbuser = mysql_num_rows($result0);
while ($sim = mysql_fetch_assoc($result0)) {
       $sql_temp="INSERT into debug (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) VALUES (NULL, 'ref ','$sim[nom]','sm289','$ref_salle', 'nbuser=', '$nbuser', '', '','')";
mysql_query($sql_temp);
}
Lorsque je lis le contenu de la table debug il m'indique qu'il y a 3 occurences dans le résultat de la requete select ($nbuser). mais il n'en écrit dans la table que 2 ($sim[nom]. Le while n'aurait joué que 2 fois ????

Je fais bien un selected sur un champ select multiple


EN FAIT je pense que le problème vient de la ligne
$services_immobiliers= mysql_fetch_assoc($result0);
qui n'est pas utilisée dans une boucle while donc le tableau ne comporte que la dernière ligne.
Existe il une fonction qui permette de créer un tableau à partir d'une requete sans utiliser mysql_fetch_assoc ?

---------------------------------
EUREKA :idea: :idea:

J'étais sur la bonne voie.
En fait il faut creer un tableau de toutes les valeurs. Donc il suffit de placer les lignes
		while($tt = mysql_fetch_assoc($result)) {
		$services_immobiliers[]=$tt[nom];
		} 

qui crée le tableau en provenance de la table des valeurs du client.

:lol: :lol: :lol: