select et option, garder la dernière valeur

Eléphant du PHP | 227 Messages

05 oct. 2005, 19:32

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
Modifié en dernier par gesualda le 05 oct. 2005, 20:23, modifié 1 fois.

Mammouth du PHP | 19672 Messages

05 oct. 2005, 19:40

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 227 Messages

05 oct. 2005, 19:53

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 oct. 2005, 20:03

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 227 Messages

05 oct. 2005, 20:08

Whoua !! alors la c'est plus que clair, ca devrait coller pour la suite.

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

@++

:D

Mammouth du PHP | 19672 Messages

05 oct. 2005, 20:08

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 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 227 Messages

05 oct. 2005, 20:23

Je pense que la c'est plus que piger.

Un grand merci à tous les deux.


@++ :D