[PHP/MYSQL]Planning

Planning [PHP/MYSQL] - PHP - Programmation

Marsh Posté le 29-02-2008 à 00:17:17    

bonsoir,
 
j'essaye de mettre au point un script PHP permettant d'afficher un planning dont les données proviennent de MySQL
 
Le planning est un tableau ayant comme en-tête les jours de la semaine :
 

Code :
  1. LUNDI   MARDI  MERCREDI   JEUDI VENDREDI
  2. MATIN                x             x                   
  3. MATIN                               x           
  4. MIDI        x          x
  5. MIDI         x


 
mon problème est le suivant, je n'arrive pas à créer les lignes qui permettront de dessiner le planning.
j'ai réussi pour la première ligne, mais pas pour les autre.
 
comment isoler les événements superposés, créer les nouvelles ligne et les intégrer
 
exemple :

Code :
  1. $rq2 = mysql_query("select * from  planning  WHERE plagehoraire = 1  ORDER BY jour " );
  2. //plagehoraire = 1 : matin ; jour : jour de la semaine
  3. //résultat :  
  4. 1 1
  5. 1 3
  6. 1 3
  7. 1 5
  8. 1 5
  9. 1 5

Reply

Marsh Posté le 29-02-2008 à 00:17:17   

Reply

Marsh Posté le 29-02-2008 à 01:31:00    

Je comprends pas la deuxième partie.
 
J'ai il y a pas mal d'années essayé un truc dans le genre. Je me suis heurté à des grands maux. Surtout pour une raison avec le recul: je suis borné et parfois la vérité est ailleurs :D
 
Grande difficulté aussi d'arriver à pondre un code accessible et ayant du sens. C'est là que ça a bloqué en fait en essayant d'utiliser un tableau, la logique de formation d'un tableau ne colle pas aux besoins. Faut-il donc se borner à chercher dans cette direction? Ou alors est ce le stockage et la récupération qui n'est pas adaptée au tableau html?
 
Voilà, je fais pas avancer le smilblick mais des pistes ;)
 
 
Et surtout une interrogation: comment peut-on avoir 2 évènements superposés? On est dans le supra conceptuel, là y'a un hic ;)

Reply

Marsh Posté le 29-02-2008 à 10:28:59    

je m'arrache également les cheveux... j'ai passé toute la nuit dessus, et je me dis même que je dois être une grosse m... bref !

 

je vais essayer d'expliquer au mieux :

 

la première colonne est la plage horaire
la deuxième colonne jusqu'à la sixième sont les jours de la semaine

 

les plages horaires se découpent en matin et après-midi

 

je fais une première requête pour déterminer le nombre maximum de ligne nécessaire dans chaque tranche

Code :
  1. // pour le matin
  2. $reqMatin = mysql_query( "select COUNT(id) as tot from  planning  WHERE plagehoraire = 1 GROUP BY jour ORDER BY tot DESC LIMIT 1  " );
  3. $count1 = mysql_result($reqMatin,0,0);
  4. //résultat de mon précédent exemple : 3
  5. //je sais  qu'il me faudre 3 <tr> , donc 3 lignes
 


une fois ceci fait, j'effectue donc ma requête principale

 
Code :
  1. $rq2 = mysql_query("select * from  planning  WHERE plagehoraire = 1  ORDER BY jour " );
  2. //plagehoraire = 1 : matin ;
  3. //jour = 1 ou 2 ou 3 ou 4 ou 5 : jour de la semaine
  4. //résultat :
  5. 1 1
  6. 1 3
  7. 1 3
  8. 1 5
  9. 1 5
  10. 1 5
 

Explications :

 

la première colonne est la tranche horaire, ici c'est le matin
la deuxième colonne représente les jours dans lesquels il y a une info à afficher

 

l'affichage que je souhaite avoir est le suivant :

 
Code :
  1. <table>
  2. <tr><td></td><td>lundi</td><td>mardi</td><td>mercredi</td><td>jeudi</td><td>vendredi</td></tr>
  3. <tr><td>matin</td><td>1</td><td></td><td>3</td><td></td><td>5</td></tr>
  4. <tr><td>matin</td><td></td><td></td><td>3</td><td></td><td>5</td></tr>
  5. <tr><td>matin</td><td>1</td><td></td><td></td><td></td><td>5</td></tr>
  6. </table>
  7. //dans une version plus visuelle :
  8. | | lundi | mardi | mercredi | jeudi | vendredi |
  9. |m|   1   |       |     3    |       |     5    |
  10. |m|       |       |     3    |       |     5    |
  11. |m|       |       |          |       |     5    |
 


Message édité par cakay le 29-02-2008 à 10:30:08
Reply

Marsh Posté le 29-02-2008 à 13:30:59    

Comme par chance les jours de la semaine sont toujours les mêmes et qu'ils ne varient pas, on peux faire un peu de dur...

Code :
  1. print '<table>
  2. <tr><td></td><td>lundi</td><td>mardi</td><td>mercredi</td><td>jeudi</td><td>vendredi</td></tr>';
  3. $rq2 = mysql_blabla;
  4. while ($row = mysql_blabla2($rq2))
  5. {
  6. print '<tr>';
  7. switch ($row['jour'])
  8. {
  9.  case 1:
  10.   print '<td>X</td>'; break;
  11.  case 2:
  12.   print '<td>X</td>'; break;
  13.  ....
  14.  default:
  15.   print '<td></td>'; break;
  16. print '</tr>';
  17. }


Le code est un peu fait à l'arrache, tu comprends mon idée ?

 

Edit : En fait, je me rends compte que mon truc est un peu bancal car il me manque une info. Pourquoi dans ton exemple y-a-t'il plusieurs chiffres pour une même plage horaire ? la semaine ?

 


Message édité par babasss le 29-02-2008 à 13:36:28

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 29-02-2008 à 14:34:52    

parce que la plage horaire dans ce cas là est matin ou après-midi. 1 indique que c'est le matin. la même chose se produit en suite pour l'après-midi, à ce moment la réf est 2

 

les chiffres 1,3,5 sont les numéros des jours où il y a une info à afficher dans la case du jour, à la place viens par exemple un nom...


Message édité par cakay le 29-02-2008 à 14:36:27
Reply

Marsh Posté le 29-02-2008 à 14:50:20    

Si je comprends ton explication, cela veut dire que plusieurs personnes ont un creneau sur la matinée ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 29-02-2008 à 17:03:24    

oui c'est ça

Reply

Marsh Posté le 29-02-2008 à 17:12:36    

cakay a écrit :

oui c'est ça


Donc la solution ci-dessous doit fonctionner, en remplacant les X par le nom de la personne.

Code :
  1. print '<table>
  2. <tr><td></td><td>lundi</td><td>mardi</td><td>mercredi</td><td>jeudi</td><td>vendredi</td></tr>';
  3. $rq2 = mysql_blabla;
  4. while ($row = mysql_blabla2($rq2))
  5.  {
  6.   print '<tr>';
  7.   switch ($row['jour'])
  8.   {
  9.    case 1:
  10.     print '<td>X</td><td></td><td></td><td></td><td></td>'; break;
  11.    case 2:
  12.     print '<td></td><td>X</td><td></td><td></td><td></td>'; break;
  13.    ....
  14.    default:
  15.     print '<td></td><td></td><td></td><td></td><td></td>'; break;
  16.    }
  17.    print '</tr>';
  18. }


Message édité par babasss le 29-02-2008 à 17:15:14

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 29-02-2008 à 18:47:20    

je te remercie pour tes recherches et ton aide...
 
je vais tester cette solution, je te tiens au courant.
 
pour juste détailler un peu plus, sur la première ligne, j'ai trois personnes. ensuite sur la deuxième, j'en ai deux. et enfin sur la troisième, une
 
mais évidemment cela n'est pas fixé à l'avance, ni figé. il peut y avoir sur une colonne 4, 5 ou plus de lignes. c'est la colonne ayant le plus de ligne qui va définir le tableau pour le matin lorsque c'est le matin. la chose se répète pour l'autre tranche horaire
 
merci de ton aide, je vais tester ça

Reply

Marsh Posté le 02-03-2008 à 19:06:39    

hello !
je me suis débrouillé autrement.
 
je me suis dit qu'il fallait mieux afficher les infos du jour et de la période, jour par jour.
le module ressemble donc à ça :
 

Code :
  1. $jourTexte=array('','lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi');
  2. $plageH=array(1=>'Matin','Apr&egrave; midi');
  3. print('<table>');
  4. // en tête de colonne
  5. print('<tr>');
  6. for($k = 0; $k < 6; $k++)
  7. {
  8.  print('<th>'.$jourTexte[$k].'</th>');
  9. }
  10. print('</tr>');
  11. // les 2 plages horaires : matin - midi
  12. for($h = 1; $h < 3; $h++)
  13. {
  14. print('<tr><th>'.$plageH[$h].'</th>');
  15. // les infos pour chaque jour
  16. for($j = 1; $j < 6; $j++)
  17. {
  18.  print('<td>');
  19.  $rq = mysql_query("select * from  matable  WHERE plagehoraire = '$h'  AND jour = '$j' " );
  20.  print('<table>');
  21.  while ($r = @mysql_fetch_array($rq)) {
  22.    print('<tr><td >'.$r[nom].'</td></tr>');
  23.  }
  24.  print('</table></td>');
  25. }
  26. print('</td></tr>');
  27. }
  28. print('</table>');


merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed