listes, php et selected

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : listes, php et selected

par Invité » 03 avr. 2006, 16:05

en fait ça doit être parceque le innerHTML s'effectue après le chargement de la page...je vois pas de solution.

par Invité » 03 avr. 2006, 15:51

je m'explique:
dans une fonction, je fais une requête pour déterminer quelle valeur de la liste doit être sélectionnée.
je met le html de la liste (avec le bon selected) dans la page grâce à innerHtml=>Maliste.
ça marche car quand je fais alert(Maliste), je reçois le code html de ma liste et le "selected" au bon endroit.

Mon problème: ce selected est donc bien écrit dans la page mais il ne fonctionne qu'après une action, et pas au premier affichage de la page.

par Invité » 03 avr. 2006, 15:37

j'ai réussi à écrire un code qui permet d'insérer un 'selected' dans une liste générée par innerHTML avec l'exemple ci-dessus.

Mais un autre problème:
Le selected ne devient actif qu'après une action sur la liste...comment faire pour que ça se fasse au chargement de la page?

par Invité » 03 avr. 2006, 12:54

je crois que dans ce cas il faut écrire le "selected' dans le innerHTML...qu'en pensez-vous?

par Invité » 03 avr. 2006, 12:49

par contre ça fonctionne quand ont fait ceci:
$i=0;
while($row=mysql_fetch_array($result)) {
.....
$i++;
}
sinon encore plus dur.cette fois c'est un liste déroulante remplie par un innerHTML... la comment déterminer l'élément à sélectionner(etat)?
<div id='MaListe'>
<select id="MaListe" name='MaListe' 
<option value='-1'>_</option>
</select>
</div>

par Invité » 03 avr. 2006, 11:31

une petite erreur dans le code ci dessus à la derniere ligne:
 echo "<option " . $etat[] . "value='".$row["Champ"]."'>".$row["Champ"]."</option>"; 
il faut mettre $etat[$i] et pas $etat[]

par Invité » 03 avr. 2006, 11:22

plus d'erreur, mais la liste n'est pas remplie par les résultats de la requête.

par Tictac » 03 avr. 2006, 10:55

Voir remarque en jaune
//valeur devant être sélectionnéé (résultat venant de la bdd) 
$valeur="..." 

//création de la liste à partir d'une requête 
$query  = "SELECT Champ FROM Table ORDER BY Champ ASC";       
$result = mysql_query ($query);
$nb_result = mysql_num_rows($result);

///////////////////////////////////////////////////////// 
//Definis etat comme nouvel array avant//////////
////////////////////////////////////////////////////////

$etat = array() ;
for($i=0;$i<$nb_result;$i++)
          {
         $row=mysql_fetch_array($result) ;       
         $etat[$i]=($row["champ"]==$valeur) ? "selected" : null; 
         echo "<option " . $etat[] . "value='".$row["Champ"]."'>".$row["Champ"]."</option>"; 
           }

par Invité » 03 avr. 2006, 10:46

bonjour,
j'essaye de construire une liste avec les éléments donnés plus haut mais j'obtiens l'erreur:
Fatal error: Cannot use [] for reading in c:\
voici ma liste déroulante, avec selected placé sur le bon élément:
//valeur devant être sélectionnéé (résultat venant de la bdd)
$valeur="..."

//création de la liste à partir d'une requête
$query  = "SELECT Champ FROM Table ORDER BY Champ ASC";      
$result = mysql_query ($query);
while($row=mysql_fetch_array($result)) { 
		$etat[]=($row["champ"]==$valeur) ? "selected" : null;
		echo "<option " . $etat[] . "value='".$row["Champ"]."'>".$row["Champ"]."</option>";
}
L'erreur semble venir du tableau $etat[], le reste fonctionne
Voyez vous ce qui ne va pas?

par Lorenzo » 03 avr. 2006, 02:15

ben les gars ... :?:
vous avez completement zappé les variables dynamiques alors qu'elles seraient parfaites !

l'idée est juste de refaire ce que propose jpaul avec elles ...

par Invité » 02 avr. 2006, 22:08

oui, c'est intéressant aussi...mais la solution de cyrano reste plus facile à lire quand il y a beaucoup de code.

par jpaul » 02 avr. 2006, 21:38

Qu'est ce que tu penses de ça ?
<?php
reset($_POST);
while (list($key, $val) = each($_POST )) {
	echo "<BR>$key -> $val";
	$$key=$val;
}
echo "<FORM action=";
echo $_SERVER["PHP_SELF"];
echo " method=\"post\">";

$etat=array("bleu", "rouge", "vert");
echo "<select name='Maliste'>";
reset($etat);
foreach($etat as $key => $val) {
	echo "<option ". $val;
	if ($_POST['Maliste'] == $val) {echo " selected";} 
	echo ">".$val."</option>";
}
//echo "<option". $etat_bleu . ">bleu</option>";
//echo "<option". $etat_rouge . ">rouge</option>";
//echo "<option". $etat_rouge  . ">jaune</option>";
echo "</select>";
echo "<BR><INPUT TYPE=submit>";
echo "</form>"
?>
(La reaffectation des variables de $_POST du début n'est pas utile ici...)

et on peut simplifier le foreach :
foreach($etat as $key => $val)
en :
foreach($etat as $val)

par Cyrano » 02 avr. 2006, 21:37

Soit tu fais le test avant, soit tu devras le faire dans la balise option, mais dans un cas comme dans l'autre, tu devras tester pour chaque option.

par Invité » 02 avr. 2006, 21:27

oui, c'est pas mal ça...mais ça veut dire qu'on ne peut pas éviter le test de chaque résultat? par exemple, est-ce qu'on peut déterminer quel élément sera activé dans la balise <select>?

par Cyrano » 02 avr. 2006, 21:22

Mouais, on peut simplifier :
<?php
$etat_bleu  = ($resultat_sql=="bleu")  ? " selected" : null;
$etat_rouge = ($resultat_sql=="rouge") ? " selected" : null;
$etat_jaune = ($resultat_sql=="jaune") ? " selected" : null;
?>
<select name='Maliste'>
  <option<?php echo($etat_bleu); ?>>bleu</option>
  <option<?php echo($etat_rouge); ?>>rouge</option>
  <option<?php echo($etat_jaune); ?>>jaune</option>