liste deroulante

Invité
Invité n'ayant pas de compte PHPfrance

28 févr. 2008, 19:00

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>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 févr. 2008, 19:20

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... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

28 févr. 2008, 19:22

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:

ViPHP
AB
ViPHP | 5818 Messages

28 févr. 2008, 19:31

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:

ViPHP
AB
ViPHP | 5818 Messages

28 févr. 2008, 19:45

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>

Invité
Invité n'ayant pas de compte PHPfrance

28 févr. 2008, 19:52

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" />

ViPHP
AB
ViPHP | 5818 Messages

28 févr. 2008, 19:56

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

ViPHP
AB
ViPHP | 5818 Messages

28 févr. 2008, 20:37

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:

Invité
Invité n'ayant pas de compte PHPfrance

28 févr. 2008, 22:43

Merci,

Va falloir que je bosse mon javascript.

ViPHP
AB
ViPHP | 5818 Messages

29 févr. 2008, 00:48

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

Invité
Invité n'ayant pas de compte PHPfrance

29 févr. 2008, 11:47

Merci beaucoup

:D

ViPHP
AB
ViPHP | 5818 Messages

29 févr. 2008, 15:04

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: