problème selected liste déroulante

Par rakima, il y a 8 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

je remplis une liste déroulante avec 3 langues differentes

<td><?php _e('Séléctionner les langues maitrisées :', 'profile') ?></td> <td> <?php //get dropdown saved value $selected = get_the_author_meta( 'langue', $user->ID ); ?> <select name="langue[]" id="langue" required multiple > <option value="Francais" <?php echo ($selected == "francais")? 'selected="selected"' : '' ?>>Francais</option> <option value="Anglais" <?php echo ($selected == "anglais")? 'selected="selected"' : '' ?>>Anglais</option> <option value="Autre" <?php echo ($selected == "autre")? 'selected="selected"' : '' ?>>Autre</option> </select> </td>

le code pour l'update :

update_user_meta( $current_user->ID, 'langue', array_map( 'strip_tags', $_POST['langue'] ) );

j'essaye d'afficher le choix des users après , parce que mon formulaire est utilisé pour ajouter et modifier au même temps , mais ca ne me selectionne rien , pourtant quand je fais un echo de $selected , ca me retourne le resultat voulu, je passe à coté de quelques choses :-S

13 réponses

Guique, il y a 8 ans

Navré pour le ton qui peut paraitre brutal, je n'avai pas bu mon café ;)

Carouge10, il y a 8 ans

Bonsoir,

Le select ne te retourne pas un tableau. Donc le "name" ne doit pas être un tableau.

<select name="langue" id="langue" required>

De plus le required multiple n'est pas possible pour un select. (D'ailleurs je ne savais pas qu'il existait)

rakima, il y a 8 ans

Merci pour votre réponse,
mais je veux que ca soit un mutli select , il me faut une foreach , mais je sais pas comment l'integrer dans les optiions du select

Guique, il y a 8 ans

Hello,

La réponse de Carouge10 est totalement fausse.
Dans le cas d'un select avec le paramètre multiple, qui existe bel et bien, tu reçois un tableau et il faut effectivement ajouter [] au nom de ta balise.
Ton select est donc bon.

Peux-tu faire un var_dump de ta variable $selected et nous poster le résultat ?

rakima, il y a 8 ans

Merci pour votre réponse encore une fois Guique,
var_dump($selected)= array(2) { [0]=> string(8) "Francais" [1]=> string(7) "Anglais" }

Guique, il y a 8 ans

Et bien voilà, regarde bien tes textes ;)
Indice : F != f

rakima, il y a 8 ans

j'ai fait ca :

<select name="langue[]" id="langue" required multiple > <option value="francais" <?php echo ($selected == "francais")? 'selected="selected"' : '' ?>>francais</option> <option value="anglais" <?php echo ($selected == "anglais")? 'selected="selected"' : '' ?>>anglais</option> <option value="autre" <?php echo ($selected == "autre")? 'selected="selected"' : '' ?>>autre</option> </select>

mais ca donne rien

Guique, il y a 8 ans

Tu as lu mon message au dessus ?
Tes if renvoient false à chaque fois et c'est normal.
Deuxième indice : case sensitive

rakima, il y a 8 ans

j'ai fait ca :

<select name="langue[]" id="langue" required multiple > <option value="francais" <?php echo ($selected = "francais")? 'selected="selected"' : '' ?>>francais</option> <option value="anglais" <?php echo ($selected = "anglais")? 'selected="selected"' : '' ?>>anglais</option> <option value="autre" <?php echo ($selected = "autre")? 'selected="selected"' : '' ?>>autre</option> </select>

il me selectionne les 3 choix que j'ai même si je choisis une seule,

Guique, il y a 8 ans

Rooh dis : tu pourrais essayer de debugguer ton code avant de poster tout de même.
Indice : tu ne fais pas une comparaison dans tes if.
Je t'ai donné la solution à ton problème. Essaie de trouver par toi même et de debugguer ton code seule.
Use et abuse des var_dump pour bien comprendre les étapes de ton code.
Passer du temps à debugguer son code, ça peut paraitre pénible mais c'est ce qui te permettra de ne pas refaire l'erreur la prochaine fois et de progresser.

Pierrot01, il y a 8 ans

($selected = "francais") ---> ($selected == "francais")
($selected = "anglais") -----> ($selected == "anglais")

@plus
Pierre

Carouge10, il y a 8 ans

Autant pour moi, je ne savais pas.

rakima, il y a 8 ans

Bonjour tout le monde,
voila le code si ca peut servir :

<select name="langue[]" id="langue" required multiple> <option value="francais" <?php echo in_array('francais', $selected)? 'selected="selected"' : ''; ?>>francais</option> <option value="anglais" <?php echo in_array('anglais', $selected)? 'selected="selected"' : ''; ?>>anglais</option> <option value="autre" <?php echo in_array('autre', $selected)? 'selected="selected"' : ''; ?>>autre</option> </select>