Problème de liste

Résolu/Fermé
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 - 13 juil. 2008 à 11:30
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 13 juil. 2008 à 14:10
Bonjour,
J'ai fait une liste à l'aide d'un tableau en php. Quand un internaute ouvre la page, il y a une valeur par défaut qui est différente (dans notre cas je l'ai mis fixe a 20). Mon problème c'est que je vois dans ma liste que la valeur par défaut. Par contre, si je clique sur envoyer, la bonne valeur est prise en compte.
Je vous fournis une partie du code afin de trouver mon erreur.
form action="page2.php"  method="POST">
<?php
	$liste=Array("0","10","20","30","40","50","60","70","80","90","100");
	$defaut = 20;
	echo '<select name="pourc">';
	
    for($i=0;$i<sizeof($liste);$i++)
   { 
      echo '<option value='.$liste[$i]; 
	  if ($liste[$i] = $defaut)
	  {
		echo ' selected';
	  }
	  echo '>';
	  echo $liste[$i].' %';
	  echo'</option>';
    }
	?>
</select>



Merci de votre aide !

1 réponse

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
13 juil. 2008 à 12:01
Bonjour

Ha l'éternelle erreur entre "=" (opérateur binaire) et "==" (opérateur de comparaison)

Donc si tu remplaces
if ($liste[$i] = $defaut)


par (note les 2 signes "égal")
if ($liste[$i] == $defaut)


ca fonctionne déjà mieux

Autrement une autre version en utilisant printf que je trouve plus propre

<?php
	$liste=Array("0","10","20","30","40","50","60","70","80","90","100");
	$defaut = 20;
	echo '<select name="pourc">'."\n";
	for($i=0;$i<count($liste);$i++)
	{ 
		printf("\t<option value=\"%s\" %s>%s</option>\n",
			$liste[$i], ($liste[$i] == $defaut) ? 'selected="selected"' : "", $liste[$i]." %");
    }
?>	
</select>



0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
13 juil. 2008 à 12:06
A chaque fois je tombe dans le pano !!

Je vais essayer sinon ta méthode plus clean
Merci pour ton aide PhP
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
13 juil. 2008 à 12:11
Par contre j'ai un peu de mal a comprendre la fonction printf malgré https://www.php.net/printf
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606 > ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013
13 juil. 2008 à 14:10
printf("\t<option value=\"%s\" %s>%s</option>\n",
	$liste[$i], 
	($liste[$i] == $defaut) ? 'selected="selected"' : "", 
	$liste[$i]." %");


printf va remplacer les séquences qui commence par % ici suivi d'un petit "s" minuscule pour indiquer que je passe une chaîne de caractères.

En quelque sorte on cherche à faire un truc comme ceci :

printf("\t<option value=\"%param1\" %param2>%param3</option>\n",
	$param1, 
	$param2, 
	$param3);


On fait je veux écrire <option value="xxx" [selected="selected"]>yyy</option>
xxx est variable
selected="selected" est optionnel c'est pourquoi j'ai mis des crochets
yyy est variable

En utilisant le syntaxe attendue par printf
<option value="xxx" [selected="selected"]>yyy</option>
devient
<option value="%s" %s>%s</option>
je dois donc fournir 3 paramètres à la fonction printf
et ces paramètres sont respectivement
$liste[$i]
($liste[$i] == $defaut) ? 'selected="selected"' : "" qui retourne selected="selected" ou ""
$liste[$i]." %"
0