Listes déroulantes à choix multiple

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 sept. 2005, 15:53

moi je parle au niveau de la pré-sélection

tu dois faire les tests avec in_array sur un tableau de valeurs récupérées de la base de données, par un tableau que tu initialises toi-même avec toutes les valeurs dedans, sinon ça ne sert à rien

(une chose à la fois ce sera mieux je pense... :lol:)

Invité
Invité n'ayant pas de compte PHPfrance

23 sept. 2005, 16:15

Mais je parlais bien de la pré-sélection :? . Je pense que je mélange un peu les deux car ça fait appel au même SET (enfin si j'ai bien compris :-k ).

Je reprends (parfois ça m'aide à y voir plus clair). Dis-moi si j'ai bien compris et si je ne fais pas d'erreurs de raisonnement.

J'ai une liste déroulante "Spécialité", définie dans ma base comme un champ de type SET.

1. Lorsque je veux effectuer une action sur ce champ (enregistrement, modification), j'utilise la fonction "implode" qui appelle une chaîne de caractère (celle enregistrée dans le champ SET de ma base).

2. Lorsque je veux modifier un enregistrement, je voudrais que les items que j'ai choisis précédemment soient encore sélectionnés. Dans ce cas là, j'utilise la fonction "in_array" qui retourne l'item sélectionné si la condition est vraie. Les items soumis à condition sont les mêmes que ceux du champ SET dans ma base.

Et c'est là que ça bloque: il ne reconnaît pas "in_array". J'ai cherché la cause de l'erreur et j'ai supposé que c'était parce que je n'avais pas défini "array" mais c'est peut-être autre chose et je fais fausse route?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 sept. 2005, 16:50

J'ai une liste déroulante "Spécialité", définie dans ma base comme un champ de type SET.

1. Lorsque je veux effectuer une action sur ce champ (enregistrement, modification), j'utilise la fonction "implode" qui appelle une chaîne de caractère (celle enregistrée dans le champ SET de ma base).
implode() reconstitue une chaine, depuis un tableau
comme tu récupères un tableau, qui correspond à la liste déroulante, implode() te sert à formater la chaine pour créer la valeur du SET => OK
2. Lorsque je veux modifier un enregistrement, je voudrais que les items que j'ai choisis précédemment soient encore sélectionnés. Dans ce cas là, j'utilise la fonction "in_array" qui retourne l'item sélectionné si la condition est vraie. Les items soumis à condition sont les mêmes que ceux du champ SET dans ma base.
Non, in_array renvoie vrai, ou faux
donc ce que tu dois faire, c'est récupérer les valeurs du champ SET, les mettre dans un tableau (avec explode() par exemple) et avec in_array, vérifier pour chaque valeur de <option> si elle est dans ce tableau. Si elle l'est, on positionne la liste déroulante dessus
Et c'est là que ça bloque: il ne reconnaît pas "in_array". J'ai cherché la cause de l'erreur et j'ai supposé que c'était parce que je n'avais pas défini "array" mais c'est peut-être autre chose et je fais fausse route?
Le problème venait déjà du fait que tu définissais toi-même le tableau, or il doit contenir les valeurs contenu dans la base de données

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 sept. 2005, 16:53

en faite le in_array a besoin d'un tableau, hors avec ce que je t montré il n'y en a pas, glisse cette ligne avant le <select> pour que la ligne de la base de donnée donne un tableau:
$Specialite=explode (",",$Specialite);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

28 sept. 2005, 11:50

Bonjour,

Eh bien j'ai testé. Tout fonctionne correctement. Merci beaucoup à tous les deux: j'ai encore beaucoup appris, et un peu mieux compris.

Pour nos lecteurs assidus ( :wink: ), voici comment se présente le formulaire (avec les items qui étaient sélectionnés avant modification):
<td><h4>Spécialité de la société : </h4></td>
	<td><?php $Specialite=explode (",",$Specialite);?>
	<select name="Specialite[]" size="3" multiple>
    <option value="Editeur" <? if(in_array("Editeur",$Specialite)) echo "selected" ?>>Editeur</option>
    <option value="Diffuseur-Distributeur" <? if(in_array("Diffuseur-Distributeur",$Specialite)) echo "selected" ?>>Diffuseur-Distributeur</option>
    <option value="Producteur" <? if(in_array("Producteur",$Specialite)) echo "selected" ?>>Producteur</option>
	</select></td>
Voici la requête de mise à jour:
$requete="UPDATE societes SET
NomSociete='".$NomSociete."',
AutreNomSociete='".$AutreNomSociete."',
RefGroupe='".$IdGroupe."',
Specialite= '".implode(',',$_POST['Specialite'])."', 
Presentation='".$Presentation."',
InfCompl='".$InfCompl."',
PaysOrigine='".$PaysOrigine."',
Adresse='".$Adresse."',
Tel='".$Tel."',
Fax='".$Fax."',
SiteSociete='".$SiteSociete."',
NomReprFr='".$NomReprFr."',
AdresseReprFr='".$AdresseReprFr."',
TelReprFr='".$TelReprFr."',
FaxReprFr='".$FaxReprFr."',
MAJ='".$MAJ."'
WHERE IdSociete='".$IdSociete."'";