web-dev-qa-db-fra.com

Sélectionnez la liste déroulante n'affichant pas la valeur sélectionnée php

J'utilise Wordpress Settings API. Tout fonctionne comme il se doit sauf cette liste déroulante select. Lorsque je sélectionne une option, la valeur en écho est correcte mais dans le menu déroulant, elle affiche la première valeur par défaut, i.e 6, et non celle sélectionnée. Où vais-je mal?

 public function someplugin_select() {
            $options = get_option( 'plugin_252calc');
            echo $options; //shows the correct value selected
            $items = array();
            for ($i=6; $i <=10; $i+= 0.1) 
            { 
                $items[] = $i;
            }

            echo '<select id="cf-nb" name="cf-nb">';
            foreach ( $items as $item )
            {
                echo '<option value="'. $item .'"';
                if ( $item == $options ) echo' selected="selected"';
                echo '>'. $item .'</option>';
            }

            echo '</select>';           

        }
2
input

La raison pour laquelle votre condition $item == $option échoue toujours est à cause de la manière dont PHP compare les flottants!

Essayez plutôt ce qui suit:

echo "<option value='$item'" . selected (abs ($item - $options) <= 0.01, true, false) . ">$item</option>" ;

Voir Comparaison de flotteurs pour plus d'informations.

2

J'ai parcouru cela et je peux dire qu'il existe une fonction WP appelée selected, que vous pouvez voir dans ce link . Utilisez cette fonction au lieu de: if ( $item == $options ). Et votre code pourrait ressembler à ceci:

foreach ( $seconds as $second => $time ) {
   ?>
      <option value="<?php echo $second; ?>" <?php selected( $browser_cache_ttl, $second ); ?>><?php echo $time; ?></option>
   <?php
}

Donc, cette fonction parcourt le $seconds et obtient le $second et le $time, met te $second comme valeur, puis appelle la fonction sélectionnée dont le premier paramètre est la valeur à comparer et le second est la valeur actuelle. Si ces valeurs sont identiques, il Je serai sélectionné.

Je pense que c'est ce que vous recherchez. Dis-moi si ça a marché.

0
Roel Magdaleno

Remplacez votre sélection par ceci ... J'espère que cela fonctionne ...

        echo '<select id="cf-nb" name="cf-nb">';
        foreach ( $items as $item ){
            $if_selected = $item == $options ? "selected='selected'" : "";
            echo "<option value='{$item}' {$if_selected}>$item</option>";

        }

        echo '</select>'; 
0
Vishal Kumar Sahu