Creation d'un tableau mysql type agenda

renaudgarn Messages postés 5 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 21 janvier 2011 - 13 janv. 2009 à 12:20
renaudgarn Messages postés 5 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 21 janvier 2011 - 13 janv. 2009 à 13:15
Bonjour,
Je viens vers vous car je planche sur un problème depuis quelques jours et mon code se tord dans tous les sens sans que je m'en sorte vraiment.
Je cherche à réaliser un tableau créé à partir de requêtes multiples, les colonnes correspondent à des jours et chaque ligne correspond à une requête particulière (1-->séquences 2-->décor 3-->lieu 4-->horaires de travail ...etc...)
Mon premier problème était de faire correspondre le nombre de colonnes pour chaque ligne, je fais donc une requête pour le nombre de jour à chaque fois (çà me parait lourd et optimisable, mais je ne vois pas trop comment faire)que je fais un </tr> en html.
Ensuite je place une requête pour les événements et si le jour du calendrier créé correspond au jour de l'événement, j'affiche l'événement dans la case correspondante.
Je m'en étais à peu près sorti en donnant un n° à chaque colonne, mais je me rend compte que si l'utilisateur change les dates, le n°des colonnes changera aussi et tout va se décaler. De plus, lorsque je fais ma requête d'événements, si j'ai plus d'un événement, le nombre de colonnes double et déforme mon tableau, en affichant sur la première série de colonnes l'événement 1 au jour dit (colonne n°5 sur 10 jours par ex), et sur la deuxième série de colonnes(qui dépasse sur la droite donc, et me fait 20 colonnes au lieu de 10) l'événement 2 à la colonne qui corresponderait(colonne 15 sur 20).

Je vous envoie une partie de mon code en exemple, chaque ligne est à peu près constituée de la même façon, et je pense que vous saurez m'indiquer un moyen de compresser chaque requête(ligne de tableau) en une si c'est possible, car ma page finale va depasser la vingtaine de requêtes au final...
Mais surtout comment comment afficher dans la même case les infos qui correspondent au même jour.

Merci beaucoup d'avance, je ne suis dans le php que depuis quinze jours, soyez indulgents sur mes erreurs de code, je ne demande qu'à apprendre.

2 réponses

renaudgarn Messages postés 5 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 21 janvier 2011
13 janv. 2009 à 12:30
$sql_lt = "SELECT periodes.*,rel_jour_seq.*
                                    FROM periodes,rel_jour_seq
                                    WHERE periodes.id_film=47
                                    AND
                                    rel_jour_seq.id_film=47
                                    " ;
                                     $req = mysql_query($sql_lt) or die('Erreur SQL !
'.$sql_lt.'
'.mysql_error());
                                     while($data = mysql_fetch_array($req))
                                    
                                    {
                                        list($date_deb_tour_Year,$date_deb_tour_Month,$date_deb_tour_Day)=explode('-',$data['date_deb']);
                                        list($date_fin_tour_Year,$date_fin_Month,$date_fin_tour_Day)=explode('-',$data['date_fin']);
                                        $debut_date = mktime(0, 0, 0, $date_deb_tour_Month, $date_deb_tour_Day, $date_deb_tour_Year);
                                          $fin_date = mktime(0, 0, 0, $date_fin_Month, $date_fin_tour_Day, $date_fin_tour_Year);
                                        for($i = $debut_date; $i <= $fin_date; $i+=86400)
                                               {
                                                echo '<td bgcolor="#ddd">';
                                                if ($jour_t==$data['id_jour']) {echo '
',$data['seq'],'
';}
                                                echo '</td>';$jour_t++;
                                            }
                                    }
0
renaudgarn Messages postés 5 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 21 janvier 2011
13 janv. 2009 à 13:15
J'ai modifié mon code pour que l'événement soit affiché en fonction du jour et non de la colonne, mais j'ai toujours ce problème de double série de colonnes au lieu d'avoir une seule série avec tous les événement dans la même case correspondant à un même jour.

Dois-je faire une requête dans la boucle pour éviter d'avoir plusieurs résultats avant de créer les colonnes ?
J'ai lu qu'il fallait éviter ce genre de choses, je comprends bien qu'il est abusé de faire une requête par colonne, mais je ne trouve pas comment associer les résultats de la requête pour qu'ils ne créent pas deux séries de colonnes (ou plus)

Voici le nouveau code ( pardon pour la présentation du premier !! ).

mysql_select_db('ifilms',$db);
 $sql_lt = "SELECT periodes.*,rel_jour_seq.*
FROM periodes,rel_jour_seq
WHERE periodes.id_film=47
 AND
rel_jour_seq.id_film=47
" ;
$req = mysql_query($sql_lt) or die('Erreur SQL !
'.$sql_lt.'
'.mysql_error());
while($data = mysql_fetch_array($req))
{
 list($date_deb_tour_Year,$date_deb_tour_Month,$date_deb_tour_Day)=explode('-',$data['date_deb']);
 list($date_fin_tour_Year,$date_fin_Month,$date_fin_tour_Day)=explode('-',$data['date_fin']);
 list($date_Year,$date_Month,$date_Day)=explode('-',$data['id_jour']);
 $date_even =  mktime(0, 0, 0,$date_even_Month,$date_even_Day,$date_even_Year);
 $debut_date = mktime(0, 0, 0, $date_deb_tour_Month, $date_deb_tour_Day, $date_deb_tour_Year);
 $fin_date = mktime(0, 0, 0, $date_fin_Month, $date_fin_tour_Day, $date_fin_tour_Year);
 for($i = $debut_date; $i <= $fin_date; $i+=86400)
     {
             echo '<td bgcolor="#ddd">';
             if ($i==$date_even_jour){echo '
',$data['seq'],'
';}
             echo '</td>';$jour_t++;
      }
}
0