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
Réponse acceptée

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 ?

Guique
Réponse acceptée

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

rakima
Auteur
Réponse acceptée

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>

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
Auteur

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

rakima
Auteur

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

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

rakima
Auteur

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

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

rakima
Auteur

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,

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.

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

@plus
Pierre

Autant pour moi, je ne savais pas.