Bonjour à tous,
Je suis bloqué pour un problème d'affichage de données dans un planning. Je vais essayer d'être clair et précis et je compte sur vous pour m'aider.
- J'ai une base "stages", avec deux tables "events" et "vacances", qui se présente comme ça :
Je souhaite afficher les stages dans un planning mensuel horizontal pour visualiser le prévisionnel.
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 -- -- Structure de la table `events` -- CREATE TABLE IF NOT EXISTS `events` ( `id` int(11) NOT NULL AUTO_INCREMENT, `Stage` varchar(255) NOT NULL, `Formation` varchar(10) NOT NULL, `title` varchar(255) NOT NULL, `start` date NOT NULL, `end` date DEFAULT NULL, `Nb_Stagiaires` smallint(6) NOT NULL, `Nb_Internes` smallint(6) NOT NULL, `Jours_ouvres` smallint(6) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Contenu de la table `events` -- INSERT INTO `events` (`id`, `Stage`, `Formation`, `title`, `start`, `end`, `Nb_Stagiaires`, `Nb_Internes`, `Jours_ouvres`) VALUES (1, 'Poney', 'Initiale', 'Poney (27 stagiaires - 25 internes)', '2017-02-06', '2017-02-10', 27, 25, 5), (2, 'Poney', 'Initiale', 'Poney (25 stagiaires - 20 internes)', '2017-02-20', '2017-02-23', 25, 20, 4), (3, 'Cheval', 'Initiale', 'Cheval (25 stagiaires - 20 internes)', '2017-02-13', '2017-02-17', 25, 20, 5), (4, 'Cheval', 'Initiale', 'Cheval (25 stagiaires - 20 internes)', '2017-02-01', '2017-02-10', 25, 20, 8); -- -------------------------------------------------------- -- -- Structure de la table `vacances` -- CREATE TABLE IF NOT EXISTS `vacances` ( `id` int(11) NOT NULL AUTO_INCREMENT, `vacances` varchar(40) NOT NULL, `debut` date NOT NULL, `fin` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Contenu de la table `vacances` -- INSERT INTO `vacances` (`id`, `vacances`, `debut`, `fin`) VALUES (1, 'Hiver 2017', '2017-02-04', '2017-02-19'), (2, 'Printemps 2017', '2017-04-01', '2017-04-17');
Voici le code que j'ai fait (fichier "index.php) : Soyez indulgent, ce n'est peut-être pas très propre mais je suis vraiment un amateur.
Voici le fichier "cnx_previsions.php" qui permet la connexion à la BDD :
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215 <head> <style> a{ text-decoration:none; } </style> <style type="text/css" media="print"> input.imprimer { display:none; } </style> </head> <?php include("cnx_previsions.php"); // connexion bdd if(isset($_GET['m']) && isset($_GET['y']) && is_numeric($_GET['m']) && is_numeric($_GET['y'])) { // recuperation champs si changement de mois $mois = $_GET['m']; $annee = $_GET['y']; } else { // Si on ne récupère rien dans l'url, on prends la date du jour $mois = date('m'); $annee = date('Y'); } // TRADUCTION DES MOIS EN FRANCAIS if($mois==1){$moiscourant = 'janvier';} if($mois==2){$moiscourant = 'février';} if($mois==3){$moiscourant = 'mars';} if($mois==4){$moiscourant = 'avril';} if($mois==5){$moiscourant = 'mai';} if($mois==6){$moiscourant = 'juin';} if($mois==7){$moiscourant = 'juillet';} if($mois==8){$moiscourant = 'août';} if($mois==9){$moiscourant = 'septembre';} if($mois==10){$moiscourant = 'octobre';} if($mois==11){$moiscourant = 'novembre';} if($mois==12){$moiscourant = 'décembre';} if($moisnow==1){$moiscourant = 'janvier';} if($moisnow==2){$moiscourant = 'février';} if($moisnow==3){$moiscourant = 'mars';} if($moisnow==4){$moiscourant = 'avril';} if($moisnow==5){$moiscourant = 'mai';} if($moisnow==6){$moiscourant = 'juin';} if($moisnow==7){$moiscourant = 'juillet';} if($moisnow==8){$moiscourant = 'août';} if($moisnow==9){$moiscourant = 'septembre';} if($moisnow==10){$moiscourant = 'octobre';} if($moisnow==11){$moiscourant = 'novembre';} if($moisnow==12){$moiscourant = 'décembre';} $datedepart = date("$annee-$mois-01"); $datefin = date("$annee-$mois-31"); $moisnow = date('m'); $anneenow = date('Y'); if($mois == 12) { $annee_avant = $annee; $annee_apres = $annee + 1; $mois_avant = $mois - 1; $mois_apres = 01; } elseif($mois == 01) { $annee_avant = $annee - 1; $annee_apres = $annee; $mois_avant = 12; $mois_apres = $mois + 1; } else { $annee_avant = $annee; $annee_apres = $annee; $mois_avant = $mois - 1; $mois_apres = $mois + 1; } //TITRE ET BOUTONS echo '<h2 align="center"><a href="?m='.$mois_avant.'&y='.$annee_avant.'"><input type="button"" class="imprimer" value="MOIS PRECEDENT"></a><img src="img/transition.gif" width="10" height="5"><a href="?m='.$mois_apres.'&y='.$annee_apres.'"><input type="button"" class="imprimer" value="MOIS SUIVANT"></a><img src="img/transition.gif" width="80" height="5">PREVISIONS DE STAGES<img src="img/transition.gif" width="100" height="5"><a href="?m='.$moisnow.'&y='.$anneenow.'"><input type="button"" class="imprimer" value="MOIS EN COURS"></a></h2>'; //on commences le tableau : echo '<TABLE border="0" bgcolor="grey" align="center" class="tableau">'; //on crée la ligne des dates $start = new DateTime("$datedepart"); // Premier jour du mois en cours $end= new DateTime("last day of $datedepart"); // Dernier jour du mois en cours $end->modify('+ 1 day'); //Rajout 1 jour pour afficher réellement le dernier jour. Je ne sais pas pourquoi !!!! echo '<tr><td style="font-size:22" align="center" bgcolor="#FFFFFF"> '.strtoupper(utf8_decode($moiscourant)).' '.$annee.' </td>'; foreach (new DatePeriod($start,new DateInterval('P1D')/*pas de 1 jour*/ , $end)as $dt){ //AFFICHAGE DES JOURS SOUS DIFFERENTES COULEURS $lejour = $dt->format('D'); $lejournum = $dt->format('d'); $lemois = $dt->format('m'); $lannee = $dt->format('Y'); $jourcomplet = date("$lannee-$lemois-$lejournum"); $datedujour = date('Y-m-d'); if ($jourcomplet == $datedujour ){ if($lejour=='Mon'){$lejour = 'Lun '.$lejournum; echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Tue'){$lejour = 'Mar '.$lejournum.'' ;echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Wed'){$lejour = 'Mer '.$lejournum.'';echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Thu'){$lejour = 'Jeu '.$lejournum.'';echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Fri'){$lejour = 'Ven '.$lejournum.'';echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Sat'){$lejour = 'Sam '.$lejournum.'';echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } if($lejour=='Sun'){$lejour = 'Dim '.$lejournum.'';echo '<td align="center" width="30" bgcolor="red">'.$lejour.'</td>'; } } else { if($lejour=='Mon'){$lejour = 'Lun '.$lejournum; echo '<td align="center" width="30" bgcolor=#CCFFCC>'.$lejour.'</td>'; } if($lejour=='Tue'){$lejour = 'Mar '.$lejournum.'' ;echo '<td align="center" width="30" bgcolor=#CCFFCC>'.$lejour.'</td>'; } if($lejour=='Wed'){$lejour = 'Mer '.$lejournum.'';echo '<td align="center" width="30" bgcolor=#CCFFCC>'.$lejour.'</td>'; } if($lejour=='Thu'){$lejour = 'Jeu '.$lejournum.'';echo '<td align="center" width="30" bgcolor=#CCFFCC>'.$lejour.'</td>'; } if($lejour=='Fri'){$lejour = 'Ven '.$lejournum.'';echo '<td align="center" width="30" bgcolor=#CCFFCC>'.$lejour.'</td>'; } if($lejour=='Sat'){$lejour = 'Sam '.$lejournum.'';echo '<td align="center" width="30" bgcolor=#fffccc>'.$lejour.'</td>'; } if($lejour=='Sun'){$lejour = 'Dim '.$lejournum.'';echo '<td align="center" width="30" bgcolor=#fffccc>'.$lejour.'</td>'; } } } echo'</td>' ; echo '</tr>'; //Ligne spéciales pour les vacances scolaires $sqlvac = mysql_query ("SELECT * from vacances where ((debut between '".$datedepart."' and '".$datefin."') or (fin between '".$datedepart."' and '".$datefin."') or ( debut <= '".$datedepart."' and fin >= '".$datefin."')) ") or die (mysql_error()); while($rowvac = mysql_fetch_array($sqlvac)) { $vacances = $rowvac['vacances']; echo '<tr style="font-size:11">'; echo '<td align="center" bgcolor="#FFC4FF">Vacances '.$vacances.'</td>'; foreach (new DatePeriod($start,new DateInterval('P1D')/*pas de 1 jour*/ , $end)as $dt){ $lejour = $dt->format('D'); $lejournum = $dt->format('d'); $lemois = $dt->format('m'); $lannee = $dt->format('Y'); $jourcomplet = date("$lannee-$lemois-$lejournum"); if ($rowvac['debut'] < $jourcomplet && $rowvac['fin'] > $jourcomplet){ echo'<td align="center" bgcolor="#FFC4FF">'; } else if ($rowvac['debut'] == $jourcomplet){ echo'<td align="center" bgcolor="#FFC4FF">'; } else if ($rowvac['fin'] == $jourcomplet){ echo'<td align="center" bgcolor="#FFC4FF">'; } else {echo'<td align="center" bgcolor="#ffffff">';} } echo'</td>' ; echo '</tr>'; } //FIN INSERTION VACANCES //RECUPERATION DES TITRES DE STAGES ET INSERTION DANS LA PREMIERE COLONNE $sqlst = mysql_query ("SELECT * from events where ((start between '".$datedepart."' and '".$datefin."') or (end between '".$datedepart."' and '".$datefin."') or ( start <= '".$datedepart."' and end >= '".$datefin."')) order by Formation desc, Stage asc") or die (mysql_error()); while($rowst = mysql_fetch_array($sqlst)) { $nomstage = $rowst["Stage"] ; echo '<tr style="font-size:11">'; echo '<td align="left" bgcolor="#CCCCFF">'.$rowst["Stage"].'</td>'; // Fin d'insertin des titres de stages foreach (new DatePeriod($start,new DateInterval('P1D')/*pas de 1 jour*/ , $end)as $dt2){ //Affichage des jours de stages $lejour2 = $dt2->format('D'); $lejournum2 = $dt2->format('d'); $lemois2 = $dt2->format('m'); $lannee2 = $dt2->format('Y'); $jourcomplet2 = date("$lannee2-$lemois2-$lejournum2"); // CONDITIONS POUR AFFICHAGE DES COULEURS ET DE CERTAINS RENSEIGNEMENTS COMME LE NOMBRE DE STAGIAIRES if ($lejour2 == 'Sat'){ echo'<td align="center" bgcolor="#ffffcc"></td>'; } else if ($lejour2 == 'Sun'){ echo'<td align="center" bgcolor="#fffccc"></td>'; } else if ($rowst['start'] < $jourcomplet2 && $rowst['end'] > $jourcomplet2){ echo'<td align="center" bgcolor="#cccccc">'; if ($lejour2 == 'Mon'){echo '<b>'.$rowst['Nb_Stagiaires'].'</b></td>';} if ($lejournum2 == '01'&& $lejour2 != 'Mon'){echo '<b>'.$rowst['Nb_Stagiaires'].'</b></td>';} } else if ($rowst['start'] == $jourcomplet2){ echo'<td align="center" bgcolor="#cccccc">'; echo '<b>'.$rowst['Nb_Stagiaires'].'</b></td>'; } else if ($rowst['end'] == $jourcomplet2){ echo'<td align="center" bgcolor="#cccccc"></td>'; } else {echo'<td align="center" bgcolor="#ffffff"></td>';} } //Fin d'affichage des jours de stages echo '</tr>'; } echo '</tbody>'; echo '</table>'; ?>
Le problème est que je n'arrive pas à regrouper les stages identiques sur une même ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?php $serveur="localhost"; $user="stages"; $password="stages"; $base="stages"; $connexion = mysql_connect($serveur,$user,$password); $db = mysql_select_db($base, $connexion); ?>
Voici ce que me donne mon code. Les chiffres dans certaines cases représente le nombre de stagiaires
Voilà ce que je voudrais
Je me torture l'esprit depuis deux jours là dessus et je ne suis pas loin du burn out !
Celui ou celle qui me trouve la solution bénéficiera de ma reconnaissance éternelle.
Je compte sur vous.
Partager