Bonjour,

Je bloque sur un problème de boucle, surtout de supprimer dynamiquement certains enregistrement du tableau après leur lecture.

Ce problème est lié à un système de validation de demande d'achat dans un laboratoire CNRS. Le système fonctionne, mais la validation ne peut se faire qu'à partir d'un @mail, je souhaite ajouter un module de validation dans l'espace personnel des responsables de crédit, car les mails sont assez souvent oubliés.

Voici un exemple de trois enregistrements de la base de donnée, Les trois enregistrements concernent la même ressource "3215" (en fait une demande d'achat).



Dans ce cas, il y a 3 actions possibles :

- details = consulter la demande d'achat
- valider_credit = accepter la demande
- refus_credit = refuser la demande

Ce n'est pas le cas pour certaine demande qui sont acceptés automatiquement et donc qui occupe une seule ligne de la base de données.

Par exemple :



Je joint dans ce message un code complet et fonctionnel avec un array qui contient des données de test.

Il suffit d'exécuter ce code pour avoir un rendu de l'existant et du résultat escompté. (c'est de l'objet, car je travaille avec Codeigniter).

Le code important se trouve entre les lignes 102 et 127

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
 
// Fonction pour transformer un array en objet
function array2object(array $array){
    $object = new stdClass();
    foreach ($array as $key => $val){
        if (is_array($val)){
            $object->$key = array2Object($val);
        } else {
            $object->$key = $val;
        }
    }
    return $object;
}
 
//array avec données de test
 
$cles = array(
    '0' => array(
		'cle' => 'cle0',
        'id_ressource' => '18',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'achats',
		'ressource_action' => 'detail',
		'id_user_connexion' => '40'
 
    ),
    '1' => array(
       'cle' => 'cle1',
        'id_ressource' => '18',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'actions',
		'ressource_action' => 'valider_credit',
		'id_user_connexion' => '40'
    ),
	'2' => array(
       'cle' => 'cle2',
        'id_ressource' => '18',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'actions',
		'ressource_action' => 'refus_credit',
		'id_user_connexion' => '40'
    ),
	'3' => array(
       'cle' => 'cle3',
        'id_ressource' => '35',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'achats',
		'ressource_action' => 'detail',
		'id_user_connexion' => '40'
    ),
	'4' => array(
       'cle' => 'cle4',
        'id_ressource' => '41',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'achats',
		'ressource_action' => 'detail',
		'id_user_connexion' => '80'
    ),
	'5' => array(
       'cle' => 'cle5',
        'id_ressource' => '50',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'achats',
		'ressource_action' => 'detail',
		'id_user_connexion' => '80'
    ),
	'6' => array(
       'cle' => 'cle6',
        'id_ressource' => '50',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'actions',
		'ressource_action' => 'valider_credit',
		'id_user_connexion' => '40'
    ),
	'7' => array(
       'cle' => 'cle7',
        'id_ressource' => '50',
        'ressource_module' => 'achats',
		'ressource_controleur' => 'actions',
		'ressource_action' => 'refus_credit',
		'id_user_connexion' => '40'
    )
);
 
//Transformation de l'array en objet
$cletab = array2object($cles);
 
/*
echo '<pre>';
print_r($cletab);
echo '</pre>';
*/
 
?>
 
<!-- Affichage des données -->
 
<p>Résultat obtenu dynamiquement</p>
 
<table>
<?php foreach($cletab AS $cle):?>
	<tr>
		<td>
		<!-- Récupération du première enregistrement -->
		<?php 	if ($cle->ressource_module == 'achats' && $cle->ressource_controleur == 'achats') {
				echo $cle->id_ressource.' - '.$cle->ressource_module.' - <a href="http://localhost/lola/stargate/dial/code/'.$cle->cle.'"><span class="consulter">Consulter</span></a>';
				}
 
				// Création d'un variable $achat pour tester les enregistrements suivant			
				$achat = $cle->id_ressource;
				$i = 0;
				// Test les enregistrements suivant dont $cle->id_ressource == $achat
				foreach ($cletab AS $cle) {
 
					if ( $cle->id_ressource == $achat && $cle->ressource_module == 'achats' && $cle->ressource_controleur == 'actions' && $cle->ressource_action == 'valider_credit') {
					echo ' - <a href="http://localhost/lola/stargate/dial/code/'.$cle->cle.'"><span class="accepter">Accepter</span></a>';
					//unset($cle[$i]);
					}
 
					if ( $cle->id_ressource == $achat && $cle->ressource_module == 'achats' && $cle->ressource_controleur == 'actions' && $cle->ressource_action == 'refus_credit') {
					echo ' - <a href="http://localhost/lola/stargate/dial/code/'.$cle->cle.'"><span class="refuser">Refuser</span></a>';
					//unset($cle[$i]);
					}
				}	
		?>			
		</td>
	</tr>
<?php endforeach;?>
</table>
 
<p>Resultat souhaité - html en dur</p>
 
<table>
	<tr>
		<td>
		18 - achats - <a href="http://localhost/lola/stargate/dial/code/cle0"><span class="consulter">Consulter</span></a> - <a href="http://localhost/lola/stargate/dial/code/cle1"><span class="accepter">Accepter</span></a> - <a href="http://localhost/lola/stargate/dial/code/cle2"><span class="refuser">Refuser</span></a>			
		</td>
	</tr>
	<tr>
		<td>
		<!-- Récupération du première enregistrement -->
		35 - achats - <a href="http://localhost/lola/stargate/dial/code/cle3"><span class="consulter">Consulter</span></a>			
		</td>
	</tr>
 
	<tr>
		<td>
		<!-- Récupération du première enregistrement -->
		41 - achats - <a href="http://localhost/lola/stargate/dial/code/cle4"><span class="consulter">Consulter</span></a>			
		</td>
	</tr>
 
	<tr>
		<td>
		<!-- Récupération du première enregistrement -->
		50 - achats - <a href="http://localhost/lola/stargate/dial/code/cle5"><span class="consulter">Consulter</span></a> - <a href="http://localhost/lola/stargate/dial/code/cle6"><span class="accepter">Accepter</span></a> - <a href="http://localhost/lola/stargate/dial/code/cle7"><span class="refuser">Refuser</span></a>			
		</td>
	</tr>
</table>
J'ai passer plusieurs jours sur ce problème et testé de nombreuses solution sans succès.

Merci d'avance pour votre aide

Patrice, développeur autodidacte !