liste deroulante

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 : liste deroulante

par AB » 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:

par Invité » 29 févr. 2008, 11:47

Merci beaucoup

:D

par AB » 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

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

Merci,

Va falloir que je bosse mon javascript.

par AB » 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:

par AB » 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

par Invité » 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" />

par AB » 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>

par AB » 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:

par AB » 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:

par Ryle » 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... :)

liste deroulante

par Invité » 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>