Valeur par défaut dans une liste déroulante

ydu
Petit nouveau ! | 2 Messages

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

Eléphant du PHP | 445 Messages

01 nov. 2007, 20:46

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

Mammouth du PHP | 514 Messages

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.

ViPHP
AB
ViPHP | 5818 Messages

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.
Modifié en dernier par AB le 02 nov. 2007, 02:19, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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

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

Mammouth du PHP | 881 Messages

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.
Soyez artisans de paix

Eléphant du PHP | 185 Messages

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>

Eléphant du PHP | 61 Messages

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 :/
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 185 Messages

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
}

Eléphant du PHP | 445 Messages

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

ViPHP
AB
ViPHP | 5818 Messages

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.

Eléphant du PHP | 185 Messages

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 ?

Eléphant du PHP | 445 Messages

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.

Eléphant du PHP | 61 Messages

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.
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.