Bonjour,

J'ai 2 tables :
Etudiant(nom, prenom, statut, groupe, email, opt)
et
Options(code, nom, resp, email)

Et je souhaite réaliser un script qui permet d'afficher les étudiants selon leurs options dans un premier temps, puis ensuite de les classer selon un attribut (ORDER BY)
(exemple ici: http://www.lirmm.fr/~meynard/ArchiToile/trombino.php)

Pour cela, j'ai donc créer un formulaire comme ceci :

Code html : 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
<form action="trombi.php" method="post">
<p>
    Choisissez une option...
    <select name="choixOption" id="choixOption" size="5">
		<option value="choixBio">Bio-Informatique</option>
		<option value="choixChimie">Chimie</option>
		<option value="choixGeo">Syst. dInfo. Géo</option>
		<option value="choixWeb">Web et BD</option>
		<option value="choixLangues">Langue naturelle</option>
	</select>
</p> 
<p>
    ...puis un critère de classement
    <select name="choixClassement" id="choixClassement">
		<option value="choixNomPrenom">par nom et prénom</option>
		<option value="choixStatut">par statut</option>
		<option value="choixGroupe">par groupe</option>
		<option value="choixOpt">par option</option>
	</select>
</p>
<input type="submit" value="Valider" />
</form>

Pour éviter du code redondant, j'ai opté pour une requête préparé grace a PDO (que j'ai bien lancé au debut de mon code) et j'ai crée une fonction qui permet l'affichage.

Code php : 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
<?php
$requetePreparee = $bdd->prepare('SELECT etudiant.nom AS nomEtu, prenom, groupe, statut, numStageA, options.nom AS nomOpt
	FROM etudiant, options
	WHERE etudiant.opt = options.code
	AND etudiant.opt = :option
	ORDER BY :classement');
function afficheEtudiants() {
	global $requetePreparee;
	while ($donnees=$requetePreparee->fetch(PDO::FETCH_OBJ)) {
?>
<p>
	<strong>Nom et prénom:</strong> : <?php echo $donnees->nomEtu . " " . $donnees->prenom; ?><br />
	<strong>Groupe et statut :</strong> : <?php echo $donnees->groupe . " " . $donnees->statut; ?><br />
	<strong>Option:</strong> <?php echo $donnees->nomOpt; ?> <br />
	<strong>Stage:</strong> <?php echo $donnees->numStageA; ?> <br />
</p>
<?php
	}
	$requetePreparee->closeCursor(); 
}

... et puis je gère mes 20 cas avec des switchs qui appellent ma requete préparée, le tout dans un gros switch.
Code php : 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
if (!(isset($_POST['choixOption']))) {
}
else {
	switch ($_POST['choixOption']) { 
		case 'choixBio' :
			switch ($_POST['choixClassement']) {
				case 'choixNomPrenom':
				$requetePreparee->execute(array('option' => 'B', 'classement' => 'nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixStatut':
				$requetePreparee->execute(array('option' => 'B', 'classement' => 'statut, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixGroupe':
				$requetePreparee->execute(array('option' => 'B', 'classement' => 'groupe, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixOpt':
				$requetePreparee->execute(array('option' => 'B', 'classement' => 'nomOpt, nom, prenom'));
				afficheEtudiants();
				break;
			}
		break;
 
		case 'choixChimie':		
			switch ($_POST['choixClassement']) {
				case 'choixNomPrenom':
				$requetePreparee->execute(array('option' => 'C', 'classement' => 'nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixStatut':
				$requetePreparee->execute(array('option' => 'C', 'classement' => 'statut, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixGroupe':
				$requetePreparee->execute(array('option' => 'C', 'classement' => 'groupe, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixOpt':
				$requetePreparee->execute(array('option' => 'C', 'classement' => 'nomOpt, nom, prenom'));
				afficheEtudiants();
				break;
			}
		break;
 
		case 'choixGeo':
			switch ($_POST['choixClassement']) {
				case 'choixNomPrenom':
				$requetePreparee->execute(array('option' => 'S', 'classement' => 'nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixStatut':
				$requetePreparee->execute(array('option' => 'S', 'classement' => 'statut, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixGroupe':
				$requetePreparee->execute(array('option' => 'S', 'classement' => 'groupe, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixOpt':
				$requetePreparee->execute(array('option' => 'S', 'classement' => 'nomOpt, nom, prenom'));
				afficheEtudiants();
				break;
			}
		break;
 
		case 'choixWeb':
			switch ($_POST['choixClassement']) {
				case 'choixNomPrenom':
				$requetePreparee->execute(array('option' => 'W', 'classement' => 'nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixStatut':
				$requetePreparee->execute(array('option' => 'W', 'classement' => 'statut, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixGroupe':
				$requetePreparee->execute(array('option' => 'W', 'classement' => 'groupe, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixOpt':
				$requetePreparee->execute(array('option' => 'W', 'classement' => 'nomOpt, nom, prenom'));
				afficheEtudiants();
				break;
			}
		break;
 
		case 'choixLangues':
			switch ($_POST['choixClassement']) {
				case 'choixNomPrenom':
				$requetePreparee->execute(array('option' => 'L', 'classement' => 'nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixStatut':
				$requetePreparee->execute(array('option' => 'L', 'classement' => 'statut, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixGroupe':
				$requetePreparee->execute(array('option' => 'L', 'classement' => 'groupe, nom, prenom'));
				afficheEtudiants();
				break;
 
				case 'choixOpt':
				$requetePreparee->execute(array('option' => 'L', 'classement' => 'nomOpt, nom, prenom'));
				afficheEtudiants();
				break;
			}
		break;
	}
}	
?>

L'affichage des étudiants selon leur options (la premiere liste déroulante) à l'air de fonctionner, il ne conserve que les étudiants dont l'option a été sélectionner.
Le classement par ordre alphabétique sur les noms, prénoms aussi fonctionne.

Par contre, dès que je veux les classer par statut ou groupe, ça m'affiche quelque chose d'incorrect, ils sont mal classés
Pourtant quand je tape la requête dans la console SQL, elle, m'affiche quelque chose de correct.

Pouvez vous m'aider, svp?