Page 1 sur 1

liste deroulante

Posté : 28 févr. 2008, 19:00
par Invité
bonjour,

le code ci-dessous fonctionne, mais serait il possible de se passer de la fonction, en utilisant un opérateur ternaire ?

Merci

Code : Tout sélectionner

<?php function choixParDefaut($couleur) // Création de la fonction { $par_defaut = ''; // On crée une variable (vide par défaut) que l'on retournera à la fin if (isset($_POST['couleur'])) // Si le visiteur a choisi une couleur { if ($_POST['couleur'] == $couleur) // Si cette couleur correspond à la couleur que l'on est en train de traiter { $par_defaut='selected="selected"'; // Alors on modifie la variable que l'on retournera et on lui met selected } } return $par_defaut; // On ne retourne rien si ce n'était pas la couleur choisie, selected si c'était la bonne couleur } // -------------- Fin de la fonction --------------- if (isset($_POST['couleur'])) // On vérifie si le visiteur a déjà choisi une couleur { echo '<p>Votre couleur préférée est le : ' . htmlspecialchars($_POST['couleur']) . '</p>'; } ?> <p>Quelle est votre couleur préférée ?</p> <form method="post"> <p> <select name="couleur"> <option value="Bleu" <?php echo choixParDefaut('Bleu'); ?>>Le Bleu</option> <option value="Marron" <?php echo choixParDefaut('Marron'); ?>>Le Marron</option> <option value="Vert" <?php echo choixParDefaut('Vert'); ?>>Le Vert</option> <option value="Rose" <?php echo choixParDefaut('Rose'); ?>>Le Rose</option> </select> <input type="submit" value="OK" /> </p> </form>

Posté : 28 févr. 2008, 19:20
par Ryle
A la question "c'est possible", la réponse est oui :)

Maintenant, l'opérateur ternaire remplace la syntaxe habituelle d'un if() et n'a absolument rien à voir avec le fait d'utiliser ou pas une fonction. La fonction te permet de mutualiser un bout de code fréquement solicité.

Tu peux donc effectivement virer la fonction et remplacer son appel par un if() ou un opértaeur ternaire (voire plusieurs en cascade au besoin), mais tu vas devoir le répéter sur chaque ligne au lieu de simplement répéter l'appel à la fonction, quitte à utiliser l'opérateur ternaire dans celle-ci... :)

Posté : 28 févr. 2008, 19:22
par AB
Tu peux aussi faire ta fonction plus simple
<?php
function choixParDefaut($couleur) // Création de la fonction
{
$par_defaut = (isset($_POST['couleur']) && $_POST['couleur'] == $couleur) ? 'selected="selected"':'';

return $par_defaut;
}
?>
EDIT ça va dans le même sens que Ryle :wink:

Posté : 28 févr. 2008, 19:31
par AB
Le code précedent respecte ta syntaxe mais l'on peut faire encore plus simple
<?php
function choixParDefaut($couleur) // Création de la fonction
{
echo (isset($_POST['couleur']) && $_POST['couleur'] == $couleur) ? 'selected="selected"':'';

}
?>
et

Code : Tout sélectionner

<option value="Bleu" <?php choixParDefaut('Bleu'); ?>>Le Bleu</option>
EDIT ce qui fait que le code de la fonction te montre ce qu'il faudrait répéter dans chaque option pour te passer de cette fonction

Code : Tout sélectionner

<option value="Bleu" <?php echo (isset($_POST['couleur']) && $_POST['couleur'] == 'Bleu) ? 'selected="selected"':''; ?>>Le Bleu</option>
Mais ça te fais moins d'écriture répétitive avec la fonction et c'est une meilleure façon de procéder
:wink:

Posté : 28 févr. 2008, 19:45
par AB
C'était pour l'utilisation d'un opérateur ternaire mais tu pourrais t'en passer avantageusement ici en faisant
<?php
function choixParDefaut($couleur) // Création de la fonction
{
if (isset($_POST['couleur']) && $_POST['couleur'] == $couleur) echo 'selected="selected"';
}
?>
ainsi l'echo ne se fait que lorsqu'il est nécessaire (pas besoin d'afficher du vide)

html

Code : Tout sélectionner

<option value="Bleu" <?php choixParDefaut('Bleu'); ?>>Le Bleu</option>

Posté : 28 févr. 2008, 19:52
par Invité
Est 'il possible de s'affranchir de cette ligne de code, pour que ça réagisse dès qu'on a choisi une couleur.

Code : Tout sélectionner

<input type="submit" value="OK" />

Posté : 28 févr. 2008, 19:56
par AB
En utilisant du javascript avec onchange mais cela ne fonctionnera pas si JS est désactivé donc il faudrait additionner les deux syntaxes et mettre ton <input type="submit" value="OK" /> entre balises noscript

Posté : 28 févr. 2008, 20:37
par AB
Alors t'en es où?

Bon je te donne la syntaxe onchange à mettre dans ta balise select

onchange="this.form.submit();"

pour le reste faudrait que tu bosses un peu (c'est quasiment fini). montre nous ton code terminé.

Ah oui souviens toi que le formulaire sera envoyé UNIQUEMENT si la valeur du select change :wink:

Posté : 28 févr. 2008, 22:43
par Invité
Merci,

Va falloir que je bosse mon javascript.

Posté : 29 févr. 2008, 00:48
par AB
Dans le futur certainement, mais pour ce qui est de ton script, je t'avais tout donné. Si tu suis ce que je t'ai dit précédemment il suffisait de faire...

Voilà la bonne syntaxe pour la page complète avec du javascript non obstrusif
<?php
function choixParDefaut($couleur) 
{
if (isset($_POST['couleur']) && $_POST['couleur'] == $couleur) echo 'selected="selected"';
}
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Choix des couleurs</title>

<style type="text/css">
#choix_couleur p {float:left}
</style>

</head>

<body>

<?php if (isset($_POST['couleur'])) // On vérifie si le visiteur a déjà choisi une couleur
{
echo '<p>Votre couleur préférée est le : ' . htmlspecialchars($_POST['couleur']) . '</p>';
} ?>

<div>
<form id="choix_couleur" action="<?php $_SERVER['PHP_SELF']?>" method="post">
<p>
    <select name="couleur" onchange="this.form.submit();">
		<option>Coisissez</option>
        <option value="Bleu" <?php choixParDefaut('Bleu'); ?>>Le Bleu</option>
        <option value="Marron" <?php choixParDefaut('Marron'); ?>>Le Marron</option>
        <option value="Vert" <?php choixParDefaut('Vert'); ?>>Le Vert</option>
        <option value="Rose" <?php choixParDefaut('Rose'); ?>>Le Rose</option>
    </select>
</p>
	
<noscript><p><input type="submit" value="OK" /></p></noscript>
	
</form>
</div>

</body>
</html>
Comme tu n'avais pas compris comment insérer le code que je t'avais indiqué précédemment j'en conclu que tu es débutant.
Voilà donc deux bonnes adresses : phpdebutant.org et siteduzero.com (commences par les tutos du premier). Bon courage et à bientôt
:wink:

EDIT Tu verras qu'avec ce code, si tu désactive javascript dans ton navigateur le bouton Ok apparaît pour confirmer le choix du formulaire

Posté : 29 févr. 2008, 11:47
par Invité
Merci beaucoup

:D

Posté : 29 févr. 2008, 15:04
par AB
De rien, la prochaine fois inscrits-toi cela te permettras d'éditer tes messages et de mettre résolu pour indiquer que ce sujet contient une solution :wink: