Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2007, 15h31   #1
Invité de passage
 
Inscription : mai 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 9
Points : 0
Points : 0
Par défaut [SQL] Réalisation d'un planning en PHP et Sql

Bonjour, je débute en php et je dois réaliser une interface web simple de réservation de salles de réunion.

J'ai pensé a organiser ca sous forme d'un emploi du temps, j'ai donc fait mon tableau vide en html et maintenant, je dois récupérer les données de la base de donnée MySQL puis les placer au bon endroit dans le tableau.

J'ai essayé plusieurs choses sans obtenir le résultat que je souhait. Voici le début de mon code qui génère le tableau :

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
 
<?php
require('_connect.php');
 
/* communication avec la BDD */
 
$rq = mysql_query("SELECT * FROM reservation ");
while($r = mysql_fetch_array($rq))
{
 
<table width="750" cellpadding="0" cellspacing="0" border="1">
  <tr valign="middle" bgcolor="#cccccc" style="brd"> 
    <td>&nbsp;</td>
    <td> <div align="center"><font color="#3d3e42">Lundi</font></div></td>
    <td> <div align="center"><font color="#3d3e42">Mardi</font></div></td>
    <td> <div align="center"><font color="#3d3e42">Mercredi</font></div></td>
    <td> <div align="center"><font color="#3d3e42">Jeudi</font></div></td>
    <td> <div align="center"><font color="#3d3e42">Vendredi</font></div></td>
  </tr>
  <tr> 
    <td>8</td>
   <td onMouseOver="this.style.backgroundColor='white'" onMouseOut="this.style.backgroundColor='#d3dce3'";>&nbsp;</td>
 
  </tr>
... jusqu'a 18h

j'ai crée une table contenant les champs suivant : id, jour, semaine, nom, description, duree, heure, salle.

Je ne sais pas vraiment comment continuer... j'espère que vous pourrez me conseiller.

Edit :
Temp71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 08h56   #2
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Malheureusement, je ne peux pas t'aider, mais j'ai remarqué qu'il y avais un forum dédié aux calendriers en PHP. Peut-être, y aura-t-il là des sources d'inspirations. Il n'est pas nécessaire de réinventer chaque fois la roue.
Bon courage.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 10h58   #3
Invité de passage
 
Inscription : mai 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 9
Points : 0
Points : 0
Merci beaucoup je ne connaissai pas cette partie du forum
Temp71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 12h02   #4
Invité de passage
 
Inscription : mai 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 9
Points : 0
Points : 0
Rebonjour, j'ai donc avancé dans mon code, le voici :

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
function tableau($rq,$jour, $heure)
{
 while($r = mysql_fetch_array($rq)) // ca pose probleme ca je ne sais pas ou le metre.
  {
 
 
    // S'il y a une réservation au jour et à l'heure
    if ($r['jour'] == $jour && $r['heure'] == $heure)
    {
	// Alors on l'affiche en HTML :
 
	echo '<td>'.$r['nom'].'</td>'; // on affiche le nom de celui qui réserve
    }
  else echo ' <td onMouseOver="this.style.backgroundColor=\'white\'" onMouseOut="this.style.backgroundColor=\'#d3dce3\'";>&nbsp;</td>';
  } // on rempli la case de vide.
 
} // fin de la fonction
 
// communication avec la BDD 
 
 
require('_connect.php'); 
 
$rq = mysql_query("SELECT * FROM reservation "); // Requête SQL
 
 
// La boucle principale :
 
echo ' <table width="750" cellpadding="0" cellspacing="0" border="1"> ';
 
// Pour chaque jour (+ header)
for ($i=0; $i < 11; $i++)
{
  echo '<tr >';
 
  // La première case du header est vide, le reste contient les jours :
  if ($i != 0)
    echo '<td >'.$_heures[$i-1].'</td>'; 
    else
   echo'  <td></td>';
 
  // Puis pour chaque colonne :
 
  for ($j=0; $j < 5; $j++)
  {
    // sur la première ligne on affiche les heures :
    if ($i == 0)
     echo ' <td> <div align="center"><font color="#3d3e42">'.$_jours[$j].'</font></div></td>'; 
    else
      tableau($rq, $_heures[$i-1], $_jours[$j]);
  }
 
 
}
Voila le tableau que j'obtient


Je précise que dans ma table je n'ai que deux entrée, ce doit être pour ca que la boucle ne boucle que deux fois mais je ne sais pas trop comment remédier à ce problème. Merci pour vos conseils
Temp71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 13h01   #5
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Quelques remarques, questions, propositions:
- Trier le query aidera.
- Comment sont remplies les variables $_heures et $_jours
- Avec la balise TH, il est possible d'associer un css pour mieux visualiser l'entête.
- Restructurer le programme. Enlever la fonction tableau. Parcourir dans la boucle principale tout les jours et vérifier que la date à traiter n'est pas la date fetchée. Si ce n'est pas le cas remplir la case vide et passer au jour suivant. Si c'est le cas, remplir la case avec l'événement, faire un fetch et passer à la date suivante. Attention cela ne fonctionne pas s'il y a deux événements le même jour. (Mais modifier l'analyse pour tenir compte de ce point ne devrait pas poser de problème).
Je reste persuadé que tu es en train de réinventer la roue.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 13h49   #6
Invité de passage
 
Inscription : mai 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 9
Points : 0
Points : 0
Alors tout d'abord je rempli mes variables de cette manière :

Code :
1
2
$_jours=array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi');
$_heures=array(8, 9,10, 11, 12, 14, 15,16, 17, 18);
Qu'entend tu par trier le query ?

si on parle de la même chose, j'ai pensé a

Code :
$rq = mysql_query("SELECT * FROM reservation WHERE semaine=$semaine AND salle=... ");
Je vais essayer d'enlever la fonction, mais je ne vois pas pourquoi "faire un fetch". Peux tu m'expliquer ?

Merci
Temp71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 15h14   #7
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
Plutôt quelque chose comme ça:
Code :
SELECT * FROM reservation ORDER BY heure, jour
Donc le code ressemblerait à cela: (Attention, ce code ne fonctionnera pas sans quelques aménagements):
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
$_jours=array('','lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi');
$_heures=array(8, 9,10, 11, 12, 14, 15,16, 17, 18);
<table width="750" cellpadding="0" cellspacing="0" border="1">
  <tr valign="middle" bgcolor="#cccccc" style="brd"> 
for($i = 0; $i < 7; $i++)
{
  print('<th align="center"><font color="#3d3e42">'.$_jours[$i].'</font></th>');
}
</tr>
$rq = mysql_query("SELECT * FROM reservation WHERE semaine = "$semaine" ORDER BY heure, jour");
$r = mysql_fetch_array($rq);
for($heureCourante = 8; $heureCourant < 19, $heureCourante++)
{
  print("<td>".$heureCourante"</td>\n");
  for($jourCourant = 1; $jourCourant < 6; $jourCourant++)
  {
    print("<td>");
    $nextRecord = true;
    while($nextRecord)
    {
      if($jourCourant == $r['jour_du_record'] && $heureCourant == $r['heure_du_record'])
      {
        //ici il faut faire un print du contenu du record
      }
      else
      {
        $nextRecord = false;
      }
      $r = mysql_fetch_array($rq);
      if(!$r)
      {
        $nextRecord = false;
      }
    }
    print("</td>");
  }
  print("</tr>");
}
print("</table>");
Ne l'ayant pas testé, je ne garanti pas qu'il fonctionne.
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h43.


 
 
 
 
Partenaires

Hébergement Web