[PHP] Boucle qui pose problème

Fermé
Koutei - 7 nov. 2008 à 16:37
 Koutei - 10 nov. 2008 à 08:33
Bonjour,

J'ai un petit problème avec une boucle. Enfin, en réalité, la boucle marche parfaitement, sauf que c'est pas le résultat qu'il me faut ! Donc si vous avez la solution, ce serait chouette de "modeler" mon petit bout de code ^^

Alors voilà, j'ai un panneau d'administration où je peux gérer les associations entre différents éléments : les menus et les sous-menus par exemple. Dans le cas présent, ce sont des "UE" et des "modules". J'ai un formulaire avec un SELECT où dedans je liste tous les modules (pour pouvoir ajouter le module sélectionné dans l'UE). Sauf que c'est un peu naze, ça liste aussi les modules qui sont DEJA dans l'UE (du coup ça va créer 2x la même relation... je pourrais mettre un IF sur le $_POST mais c'est bof).

L'idéal serait donc de lister tous les modules SAUF ceux qui sont déjà liés avec l'UE. J'ai donc bidouillé 2 WHILE mais voilà ce que ça donne : http://img391.imageshack.us/img391/7075/erfhq2.jpg

Comme vous le voyez, il liste les modules restants mais au cas par cas, alors que moi je voudrais que ce soit fait de manière globale. Donc dans cet exemple, le SELECT devrait être vide vu que les 3 modules sont sélectionnés. Voici mon code :

$requete_ue_mod = mysql_query("SELECT id_modules FROM ue_modules WHERE id_ue=$_GET['modifier_ue']");
while ($donnees_ue_mod = mysql_fetch_array($requete_ue_mod))
{

$requete_modules = mysql_query('SELECT * FROM modules WHERE id_modules!=' . $donnees_ue_mod['id_modules'] . '');

while ($donnees_modules = mysql_fetch_array($requete_modules))
{
echo '<option value="' . $donnees_modules['id_modules'] . '">' . $donnees_modules['nom_fr'] .'</option>';
}
}

Quelqu'un aurait une alternative aux WHILE pour faire ma liste ?

2 réponses

Bonjour,

Il existe dans le "select" une option "distinct" qui evite de reselectionner des doublons. Creusez ce chemin, cela devrait aller mieux...
0
Bonjour à tous en ce lundi matin ensoleillé (du moins chez moi^^) !

Je réponds à ma propre question : Pour faire une liste d'une table en fonction d'une autre, par exemple afficher tous les modules de la table "MODULES" sauf ceux qui sont dans une autre table, je n'avais pas trouvé mieux que faire des WHILE. En réalité il existait une méthode beaucoup plus pratique : NOT IN.

$requete = mysql_query('SELECT * FROM modules WHERE id_modules
NOT IN (SELECT id_modules FROM ue_modules WHERE id_ue=' . $_GET['modifier_ue'] . ')');

while ($donnees = mysql_fetch_array($requete)) // On fait une boucle pour lister les modules
{
echo '<option value="' . $donnees['id_modules'] . '">' . $donnees['nom_fr'] . '</option>';
}


Voilà voilà.
0