Oui ça craint...
Tu pourrais me donner quelques pistes... ou je sais pas quelques exemples qui pourraient me servir...
et puis bah, je vais me faire une petite nuit blanche quoi !! :)
Version imprimable
Oui ça craint...
Tu pourrais me donner quelques pistes... ou je sais pas quelques exemples qui pourraient me servir...
et puis bah, je vais me faire une petite nuit blanche quoi !! :)
cela depends de pas mal de choses, et en particulier de ta base de données.
Peux-tu selectionner les joursà afficher en 1seule fois ?
Une piste serait d'utiliser un tableau contenant toutes les cases de ton tableau initialisé a vide (ou ), avec en index la date et heure convertie en timestamp (est ce que les dates et heures de tes evenements sont un timestamp ?).
Puis tu construis ton tableau html en lisant pour chaque cellule une case du tableau de valeur.
Z.
PS : si tu me donne les données serialisées de cette grosse requete sql, je peux tester un ou 2 trucs.
J'affiche tous les jours dans tous les cas... même ceux qui sont vides...
J'enlève seulement les week-end.
Pour l'instant seul une table (dont la structure est la suivante) est fouillée.
`_photo_evenements` (
`id` int(11) NOT NULL auto_increment,
`nom_client` varchar(50) NOT NULL,
`contact` varchar(100) NOT NULL,
`telephone` varchar(10) default NULL,
`date_debut` date NOT NULL,
`date_fin` date NOT NULL,
`heure_debut` time NOT NULL,
`heure_fin` time NOT NULL,
`type` int(11) NOT NULL,
`briefing` longtext NOT NULL,
`notes_post` longtext,
`statut` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
pq date et heure ne sont pas regroupés en un attribut soit de type datetime, soit de type timestamp ?
Pourrais tu me donner un exemple de résultat de requete ?
Z.
c'est le cas maintenant...
mon date_deb et ma date_fin sont tous les deux des timestamp...
pourquoi pourquoi... première erreur, je sais pas...
donc maintenant on à ceci...
id / nomduclient / nomducontact / telephone / date_deb / date_fin / typeprojet (relié à une table type) / briefing / postprod / valide O/N
1 -- Client 2 -- Client 2 -- 0215245874 -- 2009-03-17 16:00:00 -- 2009-03-17 18:00:00 -- 3 -- Briefing du projet -- notes sur le projet -- 0
Ca serait plus pratique si tout etait en timestamp (le temps en seconde depuis 1970 ou qq chose comme ca)
Z.Code:
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 <?php $in = unserialize('a:2:{i:0;a:14:{s:2:"id";s:1:"1";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-16";s:8:"date_fin";s:10:"2009-03-16";s:11:"heure_debut";s:8:"16:00:00";s:9:"heure_fin";s:8:"16:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"1.1";s:5:"delai";s:1:"2";}i:1;a:14:{s:2:"id";s:1:"2";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-16";s:8:"date_fin";s:10:"2009-03-16";s:11:"heure_debut";s:8:"17:00:00";s:9:"heure_fin";s:8:"17:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"1.2";s:5:"delai";s:1:"2";}}'); $in1 = unserialize('a:1:{i:0;a:14:{s:2:"id";s:1:"3";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-17";s:8:"date_fin";s:10:"2009-03-17";s:11:"heure_debut";s:8:"16:30:00";s:9:"heure_fin";s:8:"18:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"2.1";s:5:"delai";s:1:"4";}}'); $in2 = unserialize('a:1:{i:0;a:14:{s:2:"id";s:1:"4";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-18";s:8:"date_fin";s:10:"2009-03-18";s:11:"heure_debut";s:8:"08:00:00";s:9:"heure_fin";s:8:"17:00:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"3.1";s:5:"delai";s:2:"18";}}'); $heure_deb = 7; $nb_tranche_par_jour = 30; $jours = array("2009-03-16", "2009-03-17", "2009-03-18"); //periode extraite de la base de donnée //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in1 as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in2 as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //creation table //init titre date echo '<table border="1"><tr><th> </th>'; foreach ($jours as $j) { echo "<th>$j</th>"; } echo '</tr>'; $delai = 0; $id_precedent = 0; for ($i = 0; $i < $nb_tranche_par_jour; $i++) { $heure = 6 *3600 + $i * 3600/2; //heure en timestamp echo "<tr><td class='heure'>".date("y.m.d H:i", $heure)."</td>";//init titre heure foreach ($jours as $j) { $jour_heure = strtotime($j) + 7*3600 + $i * 3600/2; //heure en timestamp if ($jour_delai[$j]) { //tjrs la meme cellule tant que l'evenement dure $jour_delai[$j] --; continue; } if (!isset($planing[$jour_heure])) { //pas d'evenement echo "<td> </td>"; continue; } //evenement !! $jour_delai[$j] = $planing[$jour_heure]['delai']; echo '<td rowspan="'.$planing[$heure_debut]['id'].'"></td>'; //id pour aller rechercher l'evenement dans le tableau issue de la base de donnée $jour_delai[$j] --; //on a deja affiché pour 30 min, donc on decremente } echo "</tr>"; } print "</table><pre>"; print_r($jour_delai); print_r($planing); exit; ?>
Excuse moi Zwiter, je viens d'arriver et de voir ton message...
Sans implanter les données de ma base, j'ai déposé ton nouveau code et voilà ce qu'il me donne...
Il me fait déja une quatrième colonne bizarre...
:(
Merci de l'aide que tu m'apportes... franchement, j'en demande beaucoup :s
c'est deja bien que tu vois qq chose, car j'ai du me louper qq part, et ca ne s'affiche plus correctement ici non plus...
Z.
Code:
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 <?php $in = unserialize('a:2:{i:0;a:14:{s:2:"id";s:1:"1";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-16";s:8:"date_fin";s:10:"2009-03-16";s:11:"heure_debut";s:8:"16:00:00";s:9:"heure_fin";s:8:"16:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"1.1";s:5:"delai";s:1:"2";}i:1;a:14:{s:2:"id";s:1:"2";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-16";s:8:"date_fin";s:10:"2009-03-16";s:11:"heure_debut";s:8:"17:00:00";s:9:"heure_fin";s:8:"17:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"1.2";s:5:"delai";s:1:"2";}}'); $in1 = unserialize('a:1:{i:0;a:14:{s:2:"id";s:1:"3";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-17";s:8:"date_fin";s:10:"2009-03-17";s:11:"heure_debut";s:8:"16:30:00";s:9:"heure_fin";s:8:"18:30:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"2.1";s:5:"delai";s:1:"4";}}'); $in2 = unserialize('a:1:{i:0;a:14:{s:2:"id";s:1:"4";s:10:"nom_client";s:7:"16 mars";s:7:"contact";s:8:"Mr FINEL";s:9:"telephone";N;s:10:"date_debut";s:10:"2009-03-18";s:8:"date_fin";s:10:"2009-03-18";s:11:"heure_debut";s:8:"08:00:00";s:9:"heure_fin";s:8:"17:00:00";s:4:"type";s:1:"3";s:8:"briefing";s:0:"";s:10:"notes_post";s:0:"";s:6:"statut";s:1:"0";s:11:"designation";s:3:"3.1";s:5:"delai";s:2:"18";}}'); $heure_deb = 7; $nb_tranche_par_jour = 30; $jours = array("2009-03-16", "2009-03-17", "2009-03-18"); //periode extraite de la base de donnée //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in1 as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in2 as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //creation table //init titre date echo '<table border="1"><tr><th> </th>'; foreach ($jours as $j) { echo "<th>$j</th>"; } echo '</tr>'; $delai = 0; $id_precedent = 0; for ($i = 0; $i < $nb_tranche_par_jour; $i++) { $heure = 6 *3600 + $i * 3600/2; //heure en timestamp echo "<tr><td class='heure'>".date("H:i", $heure)."</td>";//init titre heure foreach ($jours as $j) { $jour_heure = strtotime($j) + 7*3600 + $i * 3600/2; //heure en timestamp if ($jour_delai[$j]) { //tjrs la meme cellule tant que l'evenement dure $jour_delai[$j] --; continue; } if (!isset($planing[$jour_heure])) { //pas d'evenement echo "<td> </td>"; continue; } //evenement !! $jour_delai[$j] = $planing[$jour_heure]['delai']; echo '<td rowspan="'.$planing[$jour_heure]['delai'].'">'.$planing[$heure_debut]['id'].'</td>'; //id pour aller rechercher l'evenement dans le tableau issue de la base de donnée $jour_delai[$j] --; //on a deja affiché pour 30 min, donc on decremente } echo "</tr>"; } print "</table><pre>"; //debug print_r($jour_delai); print_r($planing); exit; ?>
Désolé chef. Ayé ! Dispo... Merci. Ca fonctionne en effet mieux.
En bidouillant un peu ton unserialize(jecomprendspasdutoutcettefonction), on peut aligner plusieurs évènements dans une journée et tout sans probleme.
J'ai étendu tout ça sur 5 jours en rendant mes jours "variables". J'ai une date courante définie à l'ouverture de la page et 4 jours ouvrés qui suivent...
par contre, j'ai pas du comprendre pour la base parce qu'actuellement, je requete ceci par exemple pour la première colonne :
$exe = mysql_query("SELECT _photo_evenements.id, _photo_evenements.nom_client,
_photo_evenements.contact, _photo_evenements.telephone, _photo_evenements.date_deb,
_photo_evenements.date_fin, _photo_evenements.briefing, _photo_evenements.notes_post,
_photo_evenements.statut, _photo_typeevent.designation FROM _photo_evenements, _photo_typeevent
WHERE _photo_typeevent.id = _photo_evenements.type AND date_deb LIKE '".$date_courante."%'");
J'ai mis donc date_deb et date_fin en timestamp associé à mes heures.
Faut-il que je les re-sépare ? et le delai, on le construit comment ?
:(
la, j'ai fonctionné avec tes anciennes données, donc il te faudra un poil adapter. Mais l'idée, c'est que une une seule requete, tu recuperes les jours a afficher dans ta page (simulé par la somme de $in, $in1 et $in2), puis affiche tout ca.
Normalement, tu peux extraire tes dates en timestamp.
Puis faire : (fin - debut) / (30 * 60) = delai
Pour la requete, je pensais plus a un truc de ce genre :
Z.Code:
1
2
3
4
5SELECT _photo_evenements.id, _photo_evenements.nom_client, _photo_evenements.contact, _photo_evenements.telephone, _photo_evenements.date_deb, _photo_evenements.date_fin, _photo_evenements.briefing, _photo_evenements.notes_post, _photo_evenements.statut, _photo_typeevent.designation FROM _photo_evenements, _photo_typeevent WHERE _photo_typeevent.id = _photo_evenements.type AND date_debut >= $1er_jour_de_ta_page AND date _debut <= $dernier_jour_de_ta_page;
on est d'accord !!! :DCode:
1
2
3
4
5 $sql = "SELECT _photo_evenements.id, _photo_evenements.nom_client, _photo_evenements.contact, _photo_evenements.telephone, _photo_evenements.date_deb, _photo_evenements.date_fin, _photo_evenements.briefing, _photo_evenements.notes_post, _photo_evenements.statut, _photo_typeevent.designation FROM _photo_evenements, _photo_typeevent WHERE _photo_typeevent.id = _photo_evenements.type AND date_deb >= $date_courante AND date_deb <= $ListeJours[3]";
AND date_deb => $ListeJours[0]";
Et n'oublie pas que les tableaux commencent a l'index 0 !!
Z.
j'ai $date_courante
et ensuite $ListeJours[0], $ListeJours[1], $ListeJours[2], $ListeJours[3]
j'ai corrigé désolé
tu fais comme tu veux, mais il me semble plus logique de constitué ta liste de jour apres avoir fait ta requete, et a partir de celle ci, que le contraire.
Ca te permettra de dire : bon, je veux afficher tout entre tel jour et tel jour, qui peut etre aussi bien une durée de 30 jours que de 2 jours, et t'en sortir avec un tel code.
Z.
Je vais devoir afficher toujours plus ou moins le calendrier de la semaine...
partir sur le jour courant comme premier et trouver les 4 jours ouvrés qui suivent c'est pas bien ?
en bidouillant, encore, a tâtons...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $sql = "SELECT _photo_evenements.id, _photo_evenements.nom_client,_photo_evenements.contact, _photo_evenements.telephone, _photo_evenements.date_deb, _photo_evenements.date_fin, _photo_evenements.briefing, _photo_evenements.notes_post,_photo_evenements.statut, _photo_typeevent.designation FROM _photo_evenements, _photo_typeevent WHERE _photo_typeevent.id = _photo_evenements.type AND date_deb >= '".$date_courante."' AND date_deb < '".$ListeJours[3]."'"; $in = mysql_fetch_assoc(mysql_query($sql)); $heure_deb = 7; $nb_tranche_par_jour = 30; $jours = array($date_courante, $ListeJours[0], $ListeJours[1], $ListeJours[2], $ListeJours[3]); //periode commencant de la date courant et couvrant 5 journée ouvrées. //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : //$heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $heure_debut = strtotime($event['date_deb']); $heure_fin = strtotime($event['date_fin']); $planing[$heure_debut]['id'] = $event['id']; $delai = ($heure_fin - $heure_debut) / (30 * 60); $planing[$heure_debut]['delai'] = $delai; }
Fais comme tu le sens.
Essais de comprendre mon raisonnement, et ca ne sera plus de la bidouille a taton, mais une adaptation de mon code sur tes requetes.
Bon courage,
Z.
Merci.
Je vais tenter ça oui :)
Dis moi juste que je partais pas bien !!!! :D
ben si tu as des timestamps dans ta bdd, pq utilise tu strtotime pour reconvertir une date en timestamp ?
Z.
parce que je suis perdu... :(
je sais pas, je m'y fais pas.
alors...
Donc mon problème à ce moment là, c'est que comme j'ai réuni tous mes résultats dans une requête...Code:
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 <?php $sql = "SELECT _photo_evenements.id as id, _photo_evenements.nom_client,_photo_evenements.contact, _photo_evenements.telephone, DATE_FORMAT(_photo_evenements.date_deb, '%Y/%m/%d') as date_deb, DATE_FORMAT(_photo_evenements.date_fin, '%Y/%m/%d') as date_fin, DATE_FORMAT(_photo_evenements.date_deb, '%H:%i:%S') as heure_deb, DATE_FORMAT(_photo_evenements.date_fin, '%H:%i:%S') as heure_fin, _photo_evenements.briefing, _photo_evenements.notes_post,_photo_evenements.statut, _photo_typeevent.designation FROM _photo_evenements, _photo_typeevent WHERE _photo_typeevent.id = _photo_evenements.type AND date_deb >= '".$date_courante."' AND date_deb < '".$ListeJours[3]."' ORDER BY date_deb"; // j'extrais de ma base tous mes rendez-vous étant dans la tranche de jours que j'affiche. // par défaut donc, le jour en cours puis les 4 jours ouvrés suivant. $in = mysql_query($sql); // $in reçoit le résultat de la requête. // $heure_deb = 7; // sert à rien $nb_tranche_par_jour = 30; $jours = array($date_courante, $ListeJours[0], $ListeJours[1], $ListeJours[2], $ListeJours[3]); //on recupere les evenements while ($event = mysql_fetch_assoc($in)) { // pour chaque ligne du résultat de ma requête... // je dois récupérer le jour et l'heure de chaque évènement. // je les stock dans un tableau planning. //regex pour recuperer l'heure en seconde : //$heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']); //heure en timestamp $heure_debut = $event['heure_deb']; echo $event['date_deb']." --- "; echo $heure_debut."/"; $heure_fin = $event['heure_fin']; echo $heure_fin."/"; $planing[$heure_debut]['id'] = $event['id']; echo $planing[$heure_debut]['id']."/"; $delai_event = ($heure_fin - $heure_debut) / (30 * 60); $planing[$heure_debut]['delai'] = $delai_event; echo $planing[$heure_debut]['delai']."<br />"; } /* //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : //$heure_debut = strtotime($event['date_debut']. ' '. $event['heure_debut']);//heure en timestamp $heure_debut = strtotime($event['date_deb']); $heure_fin = strtotime($event['date_fin']); $planing[$heure_debut]['id'] = $event['id']; $delai = ($heure_fin - $heure_debut) / (30 * 60); $planing[$heure_debut]['delai'] = $delai; } //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_deb']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_deb']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } //on recupere les evenements foreach ($in as $event) { //regex pour recuperer l'heure en seconde : $heure_debut = strtotime($event['date_deb']. ' '. $event['heure_debut']);//heure en timestamp $planing[$heure_debut]['id'] = $event['id']; $planing[$heure_debut]['delai'] = $event['delai']; } */ //creation table //init titre date echo '<table><tr><th> </th>'; // pour chaque jour dans le tableau $jours de tout à l'heure foreach ($jours as $j) { //on crée notre en-tête avec la date echo "<th>$j</th>"; } echo '</tr>'; $delai = 0; $id_precedent = 0; for ($i = 0; $i < $nb_tranche_par_jour; $i++) { // on crée une boucle pour trente tours $heure = 6 *3600 + $i * 3600/2; // on initialise l'heure en timestamp echo "<tr><td class='heure'>".date("H:i", $heure)."</td>"; //on l'affiche formattée lisiblement foreach ($jours as $j) { //pour chaque jour dans notre tableau de tout à l'heure encore $jour_heure = strtotime($j) + 7*3600 + $i * 3600/2; // on initialise l'heure en timestamp if ($jour_delai[$j]) { //tjrs la meme cellule tant que l'evenement dure $jour_delai[$j] --; continue; } if (!isset($planing[$jour_heure])) { //pas d'evenement echo "<td></td>"; continue; } //evenement ! $jour_delai[$j] = $planing[$jour_heure]['delai']; echo '<td rowspan="'.$planing[$jour_heure]['delai'].'">'.$planing[$heure_debut]['id'].'</td>'; //id pour aller rechercher l'evenement dans le tableau issue de la base de donnée $jour_delai[$j] --; //on a deja affiché pour 30 min, donc on decremente } echo "</tr>"; } print "</table><pre>"; //debug print_r($jour_delai); print_r($planing); ?>