Bonjour à tous,
Je dispose de deux tables : user et user_service. Chaque user est assigné à un service (dans la table user_service) par le champ 'group_id'. J'effectue donc deux requêtes, une première me permettant de récupérer tous les services dans user_service, je fais ensuite une boucle où j'appelle notamment une autre fonction qui effectue la requête récupérant les user du service courant :
Voici ensuite comment j'affiche ma liste. Les optgroup sont représentés par le nom des services, et chacune de leurs options par les utilisateurs contenu dans le service.
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 // ------------------------------------------------------------------------ /** * Fonction qui récupère tout d'abord les services existants * Appel ensuite, pour chaque service, de la fonction get_user_service(), * afin d'assigner au service tout ses utilisateurs */ public function get_services() { // On execute la requête qui récupère tout les services $this->db->select('id, description'); $lst_services = $this->db->get('user_service'); // On boucle sur la liste des services récupérés foreach($lst_services->result() as $service) { $description = $service->description; $id_service = $service->id; // On passe l'id du service en paramètre à la méthode get_user_service // On récupère le résultat de la requête de la méthode $service->lst_user = $this -> get_user_service($id_service); } /*echo "<pre>"; print_r($lst_services->result()); echo "</pre>";*/ return $lst_services->result(); } // ------------------------------------------------------------------------ /** * Fonction qui récupère tout les utilisateurs d'un service * Appelée par la fonction get_services() */ public function get_user_service($id_service) { $this -> db -> select('user.id, group_id, username'); $this -> db -> from('user'); $this -> db -> where('group_id', $id_service); $user = $this -> db -> get(); return $user->result(); }
L'affichage est niquel, l'ajout également. Mais dans mon controller, lorsque j'affiche $_POST, j'obtiens le tableau droits[] contenant uniquement les options sélectionnées.
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 <!-- Multiple select ; attribution des droits --> <div class="form-group"> <label for="optgroup" style="display: inline-block;">Attribution des droits :</label> <select name="droits[]" id='optgroup' multiple='multiple'> <?php foreach ($services_user as $service) { ?> <optgroup data="<?php echo $service -> id ?>" label="<?php echo $service -> description; ?>"> <?php foreach ($service->lst_user as $user) { ?> <option value="<?php echo $user -> id ?>"><?php echo $user -> username; ?></option> <?php } ?> </optgroup> <?php } ?> </select> </div><!-- /form-group -->
Mon but :
- Si le service entier est sélectionné, insérer dans la base de données dans le champ "droit" une chaîne de caractère avec G:[id du group(service)];U:[id premier user de ce service];U[id deuxième user de ce service];G:[id du deuxième group(service)] etc ..
- Si seul quelques utilisateur sont sélectionnés, insérer dans la bdd une chaîne de caractères avec U:[id premier user];U[id deuxième user]; etc ...
Ma question est la suivante : est-il possible de récupérer l'optgroup également afin d'atteindre mon but, par exemple dans un tableau multidimensionnel ou autre ?
En vous remerciant d'avance
Partager