8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un formulaire html contenant un select qui ressemble à ça :

// Valeur par défaut
if(!isset($value['ordsta'])) { $value['ordsta'] = '1,2'; }
$selected = '';

echo '----'.$value['ordsta'].'<br />';

echo '<select name="ordsta">';
if($value['ordsta'] == '1,2') {
  $selected = ' selected';
}
echo '<option value="1,2"'.$selected.'>Tout</option>';
for($i=1; $i<=2; $i++) {
  $selected = '';
  if($i == $value['ordsta']) {
    $selected = ' selected';
  }
  echo '<option value="'.$i.'"'.$selected.'>'.$this->_portailUtils->getStatus($i, 'sorder').'</option>';
}
echo '</select>';


Les valeurs possibles des options sont :
- 1,2
- 1
- 2

Mon problème est avec le selected et les if qui ont un comportement que je n'arrive pas à comprendre.

Lorsque je sélection l'option Tout (valeur 1,2) le résultat html est :

----1,2
<select name="ordsta">
  <option value="1,2" selected>Tout</option>
  <option value="1" selected>Non soldée</option>
  <option value="2">Soldée</option>
</select>


"Tout" est bien marqué selected mais aussi "Non soldée" qui correspond à 1 et non 1,2. Dans ce cas c'est l'option "Non soldée" qui est sélectionnée dans le select car c'est la dernière.

Je fais le même test en sélectionnant "Non soldée" (1) ou "Soldée" (2) et là pas de problème se sont bien les bonnes options qui sont sélectionnées.

J'ai essayé de modifier les opérateurs php de == à === mais même punition. J'imagine que c'est le 1,2 qui pose problème mais je vois pas trop comment contourner le problème sauf à mettre des valeurs bien distinctes mais ça m'impose un préalable pour faire correspondre mes valeurs en DB et celle pour le html.

Est-ce que vous auriez une idée ?
Merci d'avance.
Modifié par flipflip (29 Apr 2019 - 11:57)
Modérateur
Salut,

Pour moi le passage de == à === marche bien. il faut juste penser a convertir les $i en string dans le if :
for($i=1; $i<=2; $i++) {
	$selected = '';
	if(strval($i) === $value['ordsta']) {
		$selected = ' selected';
	}
  	echo '<option value="'.$i.'"'.$selected.'>'.$i.' - '.$value['ordsta'].'</option>';
}
Meilleure solution
Nikel merci, c'était tout bête et j'avais bien pensé à faire un var_dump sur $value['ordstat'] pour vérifier que dans tout les cas il était en string mais pas sur le $i.