Bonjour,

je souhaite réaliser un formulaire liste qui affiche les données d'une tables (jusqu'ici pas de problème !) mais qui les classe au sein de cette même liste en sous catégorie en fonction d'un autre champ de la table.

Ca sera plus clair avec mon exemple:

J ai 2 tables :

CLASSE:
-id_classe (INT)
-classe (TEXT)

OBJET:
-id_objet (INT)
-objet (TEXT)
-id_classe (INT)

Et je voudrais que mon formulaire liste affiche :

classe1
objet (dont id_classe=1)
objet (dont id_classe=1)
...
classe2
objet (dont id_classe=2)
objet (dont id_classe=2)
...
...

c'est à dire que la liste va afficher tous les objets (de la table objet), mais classés dans des sous-catégories (issue de la table classe) correspondant à leur id_classe.
Je sais qu'il faut utiliser <optgroup>, pour afficher des sous-catégories dans une liste, avec la syntaxe suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
<select>
  <optgroup label="">
    <option value=""</option>
    <option value=""</option>
  </optgroup>
  <optgroup label="">
    <option value=""</option>
    <option value=""i</option>
  </optgroup>
</select>
Mais je ne vois pas comment procéder pour utiliser ce <optgroup> de façon dynamique !

La seul solution que j ai trouvé est d'écrire une requête pour chaque cas et pour chaque <optgroup> !
Mais cette solution ne me convient pas car elle a un ENORME inconvénient, c'est que si je rajoute une classe dans ma table "classes", je serais obligé de rajouter du code sur ma page !!!
voici ce que j ai fait pour 2 sous-catégorie (j'ai pas coller le début du code sur la connexion à la BDD):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
mysql_select_db($database_Local_PHP2, $Local_PHP2);
$query_objet = "SELECT * FROM objet WHERE id_classe=2 ORDER BY id_classe ASC";
$objet = mysql_query($query_objet, $Local_PHP2) or die(mysql_error());
$row_objet = mysql_fetch_assoc($objet);
$totalRows_objet = mysql_num_rows($objet);
 
mysql_select_db($database_Local_PHP2, $Local_PHP2);
$query_classe = "SELECT * FROM classe WHERE id_classe =2 ORDER BY classe ASC";
$classe = mysql_query($query_classe, $Local_PHP2) or die(mysql_error());
$row_classe = mysql_fetch_assoc($classe);
$totalRows_classe = mysql_num_rows($classe);
mysql_select_db($database_Local_PHP2, $Local_PHP2);
$query_objet2 = "SELECT * FROM objet WHERE id_classe=3 ORDER BY id_classe ASC";
$objet2 = mysql_query($query_objet2, $Local_PHP2) or die(mysql_error());
$row_objet2 = mysql_fetch_assoc($objet2);
$totalRows_objet2 = mysql_num_rows($objet2);
 
mysql_select_db($database_Local_PHP2, $Local_PHP2);
$query_classe2 = "SELECT * FROM classe WHERE id_classe =3 ORDER BY classe ASC";
$classe2 = mysql_query($query_classe2, $Local_PHP2) or die(mysql_error());
$row_classe2 = mysql_fetch_assoc($classe2);
$totalRows_classe2 = mysql_num_rows($classe2);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
 
<body>
<select name="objet">
  <?php
do {  
?>
 
   <optgroup label="<?php echo $row_classe['classe']?>">
  <?php
} while ($row_classe = mysql_fetch_assoc($classe));
  $rows = mysql_num_rows($classe);
  if($rows > 0) {
      mysql_data_seek($classe, 0);
	  $row_classe = mysql_fetch_assoc($classe);
  }
 
?>
 
  <?php
do {  
?>
 
  <option value="<?php echo $row_objet['id_objet']?>"><?php echo $row_objet['objet']?></option>
  <?php
} while ($row_objet = mysql_fetch_assoc($objet));
  $rows = mysql_num_rows($objet);
  if($rows > 0) {
      mysql_data_seek($objet, 0);
	  $row_objet = mysql_fetch_assoc($objet);
  }
 
?>
</optgroup>
  <?php
do {  
?>
 
   <optgroup label="<?php echo $row_classe2['classe']?>">
  <?php
} while ($row_classe2 = mysql_fetch_assoc($classe2));
  $rows = mysql_num_rows($classe2);
  if($rows > 0) {
      mysql_data_seek($classe2, 0);
	  $row_classe2 = mysql_fetch_assoc($classe2);
  }
 
?>
 
  <?php
do {  
?>
 
  <option value="<?php echo $row_objet2['id_objet']?>"><?php echo $row_objet2['objet']?></option>
  <?php
} while ($row_objet2 = mysql_fetch_assoc($objet2));
  $rows = mysql_num_rows($objet2);
  if($rows > 0) {
      mysql_data_seek($objet2, 0);
	  $row_objet2 = mysql_fetch_assoc($objet2);
  }
 
?>
</optgroup>
 
 
</select>
</body>
</html>
<?php
mysql_free_result($objet);
 
mysql_free_result($classe);
?>
Je souhaiterais trouver une solution pour ne pas avoir cet inconvénient !
Si quelqu'un à une idée ?
Merci d'avance pour votre aide !