Valeur par défaut dans une liste déroulante

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 : Valeur par défaut dans une liste déroulante

par Power Web » 05 nov. 2007, 03:08

Je viens de découvrir qu'il y avait aussi disabled=disabled mais même problème ça s'affiche que si l'on a affiché la liste déroulante =/

Dans ce cas soit tu trouves un code JavaScript ou tu utilises les exemples avec $value qui semble être les meilleurs :wink:

J'ai corrigé ton code car il y avait quelques erreurs ;)
<select name="menugroupe" id="menugroupe">
<option value="choix">-- Selectionnez votre choix --</option>
<?php
$resultat = mysql_query("select nom_groupe from groupe order by nom_groupe") or die ("Erreur requête : requète non executé");
if (!$resultat) { echo "Erreur requete"; exit; } 

while ($ligne = mysql_fetch_array($resultat))
{
?>
<option value="<?php echo $ligne['nom_groupe']; ?>"><?php echo $ligne['nom_groupe']; ?></option>
<?php
}
mysql_close($connexion);
?>
</select>
<?php
$menu_groupe = htmlentities($_POST['menugroupe'], ENT_QUOTES);

if($menu_groupe == "choix")
{
	echo "Veuillez faire votre selection.";
}

else
{
	// Ton script 
}
?>
Bon courage.

par h0_noMan » 04 nov. 2007, 00:36

Concernant le booléen "false", j'ignorais qu'il serait considéré comme une chaîne, surtout dans la mesure où dans le code que j'ai proposé je ne l'ai pas encapsulé entre guillemets lors de la déclaration de la variable "choix". Je viens d'en apprendre encore une ! :
Autant pour moi.
si $value=false alors tu affichera une chaine vide
<option value="">Faites votre choix</option>'
Et en testant cette valeur en la recevant elle sera egale a false.

Dans ce cas la, pas la peine de mettre une value dans le select.

par Kaoteknik » 04 nov. 2007, 00:16

Petite précision, il me semble que selected="selected" n'est pas nécessaire dans ce cas de figure puisque par défaut les navigateurs affichent le premier élément de la liste.
En effet, cet argument ne se justifie que si l'élément "faites votre choix" n'est pas le premier de la liste déroulante, ce qui serait dans le cas de figure présent assez aberrant ! :oops:

Concernant le booléen "false", j'ignorais qu'il serait considéré comme une chaîne, surtout dans la mesure où dans le code que j'ai proposé je ne l'ai pas encapsulé entre guillemets lors de la déclaration de la variable "choix". Je viens d'en apprendre encore une ! :P

Est-ce encore vrai si on initialise la variable $choix à zéro et qu'on la teste lors de l'instruction conditionnelle ?

par AB » 03 nov. 2007, 18:56

Ouais, on en revient donc à la soluce que j'ai donnée en même temps que mcorgnet :wink:

Petite précision, il me semble que selected="selected" n'est pas nécessaire dans ce cas de figure puisque par défaut les navigateurs affichent le premier élément de la liste.

par h0_noMan » 03 nov. 2007, 18:45

En effet... Je ne vois plus qu'une solution alors : mettre en premier élément d'option "Faites votre choix" avec l'argument selected="selected" et, pourquoi pas, en valeur indiquer un booléen.
$value = false;

echo '<option value="'.$value.'">Faites votre choix</option>';
Par la suite il suffira de tester si l'option retenue est égale à "vraie" ou "faux" pour autoriser l'enregistrement en base de données.
if ($value == false) {
// message d'erreur et retour au formulaire
}
else {
// enregistrement des paramètres dans la BDD
}
Tu recevras alors false sous la forme d'une chaine de caractere et non d'un booleen.
Tu devras alors verifier si $value=="false" et non $value==false

par Kaoteknik » 03 nov. 2007, 18:31

En effet... Je ne vois plus qu'une solution alors : mettre en premier élément d'option "Faites votre choix" avec l'argument selected="selected" et, pourquoi pas, en valeur indiquer un booléen.
$value = false;

echo '<option value="'.$value.'">Faites votre choix</option>';
Par la suite il suffira de tester si l'option retenue est égale à "vraie" ou "faux" pour autoriser l'enregistrement en base de données.
if ($value == false) {
// message d'erreur et retour au formulaire
}
else {
// enregistrement des paramètres dans la BDD
}

par Power Web » 03 nov. 2007, 17:40

C'est que j'utilise, mais le blem avec optgroup c'est que ça s'affiche que si on a cliqué sur la liste déroulante :/

par Kaoteknik » 02 nov. 2007, 19:33

Ne serait-il pas plus simple d'utiliser la balise <optgroup> ?

Ton code pourrait ainsi ressembler à ceci :
<select name="choix">
<optgroup label="Faites votre choix">

<?php
while ($ligne=mysql_fetch_array($resultat)) 
{ 
    echo "<option value='".$ligne['nom_groupe']."'>".$ligne['nom_groupe']."</option>";
}
?>

</optgroup>
</select>

par Patriboom » 02 nov. 2007, 03:10

Pour ma part, je couperais pas ton code de programmation PHP.
Je ferais ainsi
while ($ligne=mysql_fetch_array($resultat)) 
{ 
    echo "<option>''.$ligne['nom_groupe'].'' </option> ";
    if ( Inscrit ta condition) { echo " selected "; }
    echo ">''.$ligne['nom_groupe'].'' </option> ";
} 
Je trouve étonnant, aussi, que tes options ne contiennent aucune valeur.
Comment feras-tu pour différencier les options retenues?

Il faudrait donc que ce soit ainsi:
while ($ligne=mysql_fetch_array($resultat)) 
{ 
    echo "<option value=\"".$ligne['valeur_a_transmettre'].""\">''.$ligne['nom_groupe'].'' </option> ";
    if ( Inscrit ta condition) { echo " selected "; }
    echo ">''.$ligne['nom_groupe'].'' </option> ";
} 
Pour arriver à cela, peut-être te faudra-t-il choisir plus d'un champ dans ta requête.

par Truc » 01 nov. 2007, 23:23

Modération :
ydu, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

par AB » 01 nov. 2007, 21:17

Non, sous réserve (jamais vu), c'est pas possible. Si la valeur est dans la liste, alors elle est dans la liste. Eventuellement tu peux la mettre en gras ou en italique pour la différencier des autres valeurs.

En reprenant ton code :

Code : Tout sélectionner

<select name="menugroupe" id="menugroupe"> <option value = "choix" style="font-style:italic">Choisissez</option> <?php $resultat=mysql_query("select nom_groupe from groupe order by nom_groupe") or die ("requète non executé"); if (! $resultat) { echo "Erreur requete"; exit;} while ($ligne=mysql_fetch_array($resultat)) { ?> <option><?php echo ''.$ligne['nom_groupe'].'';?> </option> <?php } mysql_close($connexion); ?>

Quant'au fait que cette valeur ne soit pas dans ta bdd ce n'est pas un pb. Eventuellement si tu ne veux pas faire une requête pour rien tu peux faire un test php avant :
if (isset($_POST['menugroupe']) && $_POST['menugroupe'] != 'choix')
{
//traitement de la requête
}
Attention il manque une balise fermante </select> et une autre </p> dans ton code.

Note : utilises les balises adéquates (Code ou PHP) pour formater ton code dans le forum, il n'en sera que plus lisible.

par mcorgnet » 01 nov. 2007, 21:17

avant de traiter ta boucle, tu rajoutes :

Code : Tout sélectionner

<option value="">Faites votre choix</option>
Et dans ton code php, quand tu récupères la valeur envoyée :
if isset($_POST['menugroupe'] && $_POST['menugroupe']!="") {
// traiter le code
}
else {
echo "choisissez une option";
}
ps : effectivement, ça serait plus lisible en utilisant le bouton "code" du forum.

par h0_noMan » 01 nov. 2007, 20:46

Utilises la balise code ou php car la c'est illisible.

Valeur par défaut dans une liste déroulante

par ydu » 01 nov. 2007, 20:44

Bonjour,

Me voici lancé depuis quelques semaine dans la grande aventure du PHP.

J'ai reussi (péniblement) a créer une liste déroulante dont voici le code ci-dessous.

****************************
<html>

<head>
<meta http-equiv="Content-Language" content="fr">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Nouvelle page 1</title>
<?php
$connexion=mysql_connect('localhost','root',"") or die ("connexion impossible.");
$db=mysql_select_db('conquete',$connexion) or die ("base de données non accessible");
?>
</head>

<body>

<p>
<img border="0" src="mes%20images/bandeau.JPG" width="100%" height="65"></p>


<p align="center"><font size="6">CONQUETE 2008</font></p>
<p align="center"><font size="5">

	<?php
	echo "Reporting : <b>" . $_POST['reporting'] . "</b><br>";
	?>
</font></p>


 <p align="center">
 <select name="menugroupe" id="menugroupe">
<?php
$resultat=mysql_query("select nom_groupe from groupe order by nom_groupe") or die ("requète non executé");
if (! $resultat) { echo "Erreur requete"; exit;} 
while ($ligne=mysql_fetch_array($resultat))
{
?>
<option><?php echo ''.$ligne['nom_groupe'].'';?> </option>
<?php
}
mysql_close($connexion);
?>

</body>

</html>
****************************

Je cherche a mettre une valeur par défaut a cette liste je m'explique. Lorsque l'utilisateur arrive sur cette page, je voudrai que figure dans la liste déroulante soit la veleur "FAITE VOTRE CHOIX...." mais que cette valeur ne soit pas reprise dans ma liste du fait qu'elle ne figure pas dans ma base SQL.

Cela est il possible ?

Par avance merci beaucoup

@+
YDU