Bonjour,

Je voudrais savoir s'il est possible de faire une liste de sélection avec 2 niveaux.
Et de récupérer les deux niveaux de sélection.

Pour essayer d'être clair, j'essaie de faire une liste de sélection avec les régions viticoles française et les appellations liées comme cela :

Alsace
---Muscat
---Riesling
Beaujolais
---Beaujolais Villages
---Julienas
---Saint Amour
Bordeaux
---Pauillac
---Médoc

Avec le formulaire, je veux récupérer le nom de la région et de l'appellation.

Cela est-il possible ? Et si oui auriez-vous un lien pour me l'expliquer.

Laurent
Modifié par LoLo-31 (10 Feb 2009 - 20:04)
Salut Laurent et bienvenue sur le forum, Smiley smile

tu pourrais essayer quelque chose comme ça :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test formulaire</title>
</head>
<body>
<?php
if (!empty($_POST)) { 
	$vin = (isset($_POST['vin'])) ? trim($_POST['vin']) : '';
	if($vin != '') {
		$vin = explode('#', $vin);
	}
	$region = $vin[0];
	$appellation = $vin[1];
	echo '<p>Région : '.$region.' / Appellation : '.$appellation.'</p>';
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<p>
		<select name="vin">
<?php
require_once('connexion.php');
$sql = 'SELECT region, appellation FROM regions, vins WHERE regions.id_region = vins.id_region ORDER BY region, appellation';
$result = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result) > 0) {
	$region_en_cours = '';
	$premier_optgroup = true;
	while($row = mysql_fetch_assoc($result)) {
		if($row['region'] != $region_en_cours) {
			$region_en_cours = $row['region'];
			if($premier_optgroup) {
				$premier_optgroup = false;
			} else {
				echo "\t\t\t</optgroup>\n";
			}
			echo "\t\t\t<optgroup label=\"".$row['region']."\">\n";
		}
		echo "\t\t\t\t<option value=\"".$row['region'].'#'.$row['appellation'].'">'.$row['appellation']."</option>\n";
	}
	echo "\t\t\t</optgroup>\n";
}
?>
		</select>
	</p>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form>
</body>
</html>
PS : j'ai supposé que les infos étaient dans une table mysql mais l'idée est d'arriver d'une manière ou d'une autre à ce code :
<select name="vin">
	<optgroup label="Alsace">
		<option value="Alsace#Muscat">Muscat</option>
		<option value="Alsace#Riesling">Riesling</option>
	</optgroup>
	<optgroup label="Beaujolais">
		<option value="Beaujolais#Beaujolais Villages">Beaujolais Villages</option>
		<option value="Beaujolais#Julienas">Julienas</option>
		<option value="Beaujolais#Saint Amour">Saint Amour</option>
	</optgroup>
	<optgroup label="Bordeaux">
		<option value="Bordeaux#Médoc">Médoc</option>
		<option value="Bordeaux#Pauillac">Pauillac</option>
	</optgroup>
</select>
Merci Heyoan.

Pour les données, je ne sais pas si encore, elles seront dans une base mysql ou dans un fichier texte.

Ton idée est intéressante. Il n'y aura pas de bouton envoyer. Cette liste de sélection sera utilisée pour remplir les caractéristiques des nouvelles bouteilles que je mettrai dans ma cave.

Dans mes recherches, j'étais arrivé à la solution avec optgroup. Le problème est que la liste risque de vite devenir illisible avec le grand nombre d'appellation qu'il peut y avoir dans une région, comme le bordelais.
Je me demande donc, s'il est possible de faire afficher une liste de sélection en fonction d'une condition. Cela reviendrai à utiliser deux listes de sélection, une pour les régions et une pour les appellations.

Un truc du style :
Si région est Beaujolais alors la seconde liste est : Beaujolais Villages, Julienas, Fleury

Laurent