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 :
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();
	}
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
<!-- 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 -->
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.

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