Page 1 sur 1

select et option, garder la dernière valeur

Posté : 05 oct. 2005, 19:32
par gesualda
Bonjour à tous,

J'aimerai savoir comment faire pour garder l'option selectec après la validation d'un formulaire. voici un bout de code:
<?php 
$tab_nom = array("choisir..","toto","tata","titi","moi","toi","ton père","ta mère");
?>
<form method="post">
<select name="nom">
<?php 
for($i=0;$i<count($tab_nom);$i++)
{
echo "<option value=\"$tab_nom[$i]\">$tab_nom[$i]</option>\n";
}
?>
</select>
<input type="submit" nmame="ok">
</form>
Jusqu'a présent je faisais cela et je n 'appelai pas le script par le biais d'un tableau.
<option value="toto"<?php  if(isset($_POST['nom']) && (strcmp($_POST['nom'],"toto")   == 0 )) {echo 'selected="selected"';}?>>toto</option>
etc...

Cela fonctionnait, mais faisait écrire beaucoup de ligne de code sans nécéssité, je pense.

Comment puisje proceder.? Pourrait avoir quelques explications avec un correctif si c'est possible ?

Merci d'avance

Posté : 05 oct. 2005, 19:40
par Cyrano
Comme ceci peut-être ?
<?php
$tab_nom = array("choisir..","toto","tata","titi","moi","toi","ton père","ta mère");
?>
<form method="post">
<select name="nom">
<?php
$nom = isset($_POST['nom']) ? $_POST['nom'] : "";
for($i = 0; $i < count($tab_nom); $i++)
{
    $selected = $nom == $tab_nom[$i] ? " selected = \"selected\"" : null;
    echo "<option value=\"". $tab_nom[$i] ."\"". $selected .">". $tab_nom[$i] ."</option>\n";
}
?>
</select>
<input type="submit" nmame="ok">
</form>

Posté : 05 oct. 2005, 19:53
par gesualda
Merci Cyrano,

en effet, c'est cela que je voulais faire, mais pourrait bien sur sans que j'abuse, juste m'expliquer un peu, car je crois pas avoir tout piger.

en fait c'est de ca que je parle:
 $selected = $nom == $tab_nom[$i] ? " selected = \"selected\"" : null; 
Que signifie le " ? "
merci

Posté : 05 oct. 2005, 20:03
par Truc
Salut, je me permet de te répondre (c'est dans mes cordes :lol: )
$selected = $nom == $tab_nom[$i] ? " selected = \"selected\"" : null;
Le " ? " fait une "sorte" de " if ", enfaite il y a comparaison entre $nom et $tab_nom[$i] si les 2 variables sont iden tiques alors la 3eme variables ( $selected ) vaut " selected = \"selected\"" (donc le 1er terme avant les deux points ( : ) et si elles sont différentes alors $selected vaut NULL (le 2eme terme)
c'est assez claire ? :wink:

Posté : 05 oct. 2005, 20:08
par gesualda
Whoua !! alors la c'est plus que clair, ca devrait coller pour la suite.

Merci à tous les deux, c'est fort et instructif

@++

:D

Posté : 05 oct. 2005, 20:08
par Cyrano
On appelle ça un opérateur ternaire qui revient strictement au même que de faire:
if($nom == $tab_nom[$i])
{
    $selected =  " selected = \"selected\"";
}
else
{
    $selected = null;
}
Mais sur une seule ligne :)

Posté : 05 oct. 2005, 20:23
par gesualda
Je pense que la c'est plus que piger.

Un grand merci à tous les deux.


@++ :D