Problémes calendrier dynamique

cs_tiara Messages postés 2 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 25 juillet 2006 - 25 juil. 2006 à 10:20
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 25 juil. 2006 à 12:10
Bonjour!
 J'ai un soucis au niveau d'un code permettant d'afficher un calendrier année par année (dans différentes pages) les mois et de colorer une zone prédéfinie par un utilisateur au moyen d'un formulaire.
Le petit soucis :
Si le premier jour du mois est un dimanche, le 1 s'affiche lundi et le 2 au lundi suivant au lieu de dimanche 1 lundi 2
Lun, Mar, Mer, Jeu, Ven, Sam, Dim, ----
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

Au mois de Mars aussi la derniére ligne du mois ne se ferme pas et affiche sur une ligne 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
au lieu de : 21, 22, 23, 24, 25, 26, 27
28, 29, 30, 31

Voici le code. Merci encore si vous pouvez m'aider ça fait 2 jours que je me prend la tête dessus je suis perdue ... :'(

<?php
$anneeSuiv=$choixAnnee+1;
$anneePrec=$choixAnnee-1;
echo \"
    ,
    ,
   
    ----
    ";

/**************
* CALENDRIER *
***************/

$choixAnnee = $_GET['choixAnnee'];

echo $choixAnnee;

for($k=1; $k <13; $k++)//mois
{
        $numberofday=date("t", mktime(0, 0, 0, $k+1, 0, $choixAnnee));
        $now=date("j", mktime(0, 0, 0, $k+1, 0, $choixAnnee));
        $timespamp=date("U", mktime(0, 0, 0, $k+1, 0, $choixAnnee));
        $nplus=$now*24*3600;
        $firstday=mktime(0, 0, 0, $k+1, 0, $choixAnnee)-$nplus+24*3600;
        //$firsttest=date("j",$firstday);
       
       
       
        //LE NOMS DES SEMAINES
        $semaine=array(" Lun ", " Mar ", " Mer ", " Jeu ", " Ven ", " Sam ", " Dim ");
        //LE NOM DES MOIS
        $mois=array("", " janvier ", " fevrier ", " mars ", " avril ", " mai ", " juin ", " juillet ", " aout ", " septembre ", " octobre ", " novembre ", " decembre ");

        /* propriete calendrier */
        $bgcolor="#CCFFFF"; //Couleur de fond du calendrier peut aussi contenir none pour un fond transparent
        $text="#000000"; //Couleur du texte. Peur ne rien contenir pour la couleure par défaut
        $thedaybgcolor="#ff0000"; //Couleur de fond du jour.
        $thedaytext="#ffffff"; //Couleur du texte du jour.
        $textfamily="Verdana,Arial"; //Police
        $textsize="10px"; //Taille du texte
       
   
       
        echo"<table style=\"font:";
        echo ($textsize=="") ? "":$textsize;?> <?php echo $textfamily; ?>;text-align:center;<?php
        echo ($bgcolor=="")?"":"background:$bgcolor;";
        echo ($text=="")?"":"color:$text;";
        ?>">
       
       
        <?php
        echo "
        ----

       , $mois[$k] </td>
       
        ----

           {$semaine[0]},
           {$semaine[1]},
           {$semaine[2]},
           {$semaine[3]},
           {$semaine[4]},
           {$semaine[5]},
           {$semaine[6]},
         
         \";

        $j=1;
        echo \"----
\";
        while($j<date(\"w\",$firstday))
        {
          echo \"    &nbsp, \";
          $j++;   
        }
        $i=1;

        while($i<=$numberofday)  
        {
            if(date(\"w\",$firstday+$i*24*3600-24*3600*2) == \"0\")
            { echo \"----
\"; }
         
         
             /*COLORER LES PERIODES DE CONGES*/
            $sql = \"SELECT * FROM planning WHERE id_users= $_SESSION[id_users];\";
              // on envoie la requête
            $req2 = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
             
             // Si la requete retourne au moins une donnée on retourne la valeur vrai et on analyse sinon on affiche les dates
              if (mysql_num_rows($req2) > 0)
                {
                    $data = mysql_fetch_array($req2);
                    $dateDebut = $data['date_debut'];
                    $dateFin = $data['date_fin'];
           
           
                    list($a,$m,$j)=explode(\"-\",$dateDebut);
                    $dateDebutJour=\"$j\";
                    $dateDebutMois=\"$m\";
                    $dateDebutAnnee=\"$a\";
                   
                    list($a,$m,$j)=explode(\"-\",$dateFin);
                    $dateFinJour=\"$j\";
                    $dateFinMois=\"$m\";
                    $dateFinAnnee=\"$a\";   

                     /*ANALYSE DES DATES DE DEPART ET FIN DE CONGE*/
                    if( $choixAnnee==$dateDebutAnnee && $choixAnnee==$dateFinAnnee)
                    {
                        if($k == $dateDebutMois && $i >= $dateDebutJour)
                        {
                            $thedaybgcolor = \"red\";
                            $thedaytext = \"#cccccc\";
                            echo \"$i, \n\";
                        }
                        if($k == $dateFinMois && $i <= $dateFinJour)
                        {
                            $thedaybgcolor = \"red\";
                            $thedaytext = \"#cccccc\";
                        echo \"$i, \n\";
                        }
                        if($k > $dateDebutMois && $k < $dateFinMois)
                        {
                            $thedaybgcolor = \"red\";
                            $thedaytext = \"#cccccc\";
                            echo \"$i, \n\";
                        }
                       
       
                    }

                    if($dateDebutAnnee!=$dateFinAnnee)
                    {
                           
                        if ($dateDebutMois < $dateFinMois)
                        {
                            if($k == $dateDebutMois && $i >= $dateDebutJour && $choixAnnee==$dateDebutAnnee)
                            {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                            }
                            if($k == $dateDebutMois && $i < $dateDebutJour && $choixAnnee==$dateDebutAnnee)
                            {
                                echo \"    $i, \n\";
                            }
                            if($k == $dateFinMois && $i <= $dateFinJour && $choixAnnee==$dateFinAnnee)
                            {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                            }
                            if($k == $dateFinMois && $i > $dateFinJour && $choixAnnee==$dateFinAnnee)
                            {
                                    echo \"    $i, \n\";
                            }
                            if($k < $dateFinMois && $choixAnnee!=$dateDebutAnnee && $choixAnnee==$dateFinAnnee)
                            {
                                        $thedaybgcolor = \"red\";
                                        $thedaytext = \"#cccccc\";
                                        echo \"$i, \n\";
                            }
                            if($k > $dateDebutMois && $choixAnnee==$dateDebutAnnee && $choixAnnee!=$dateFinAnnee)
                            {
                                        $thedaybgcolor = \"red\";
                                        $thedaytext = \"#cccccc\";
                                        echo \"$i, \n\";
                            }
                                   
                            if($k > $dateFinMois && $choixAnnee!=$dateDebutAnnee && $choixAnnee==$dateFinAnnee)
                            {
                                    echo \"    $i, \n\";
                            }
                                       
                            if($k < $dateDebutMois && $choixAnnee==$dateDebutAnnee && $choixAnnee!=$dateFinAnnee)
                            {
                                    echo \"    $i, \n\";
                            }
                        }
                           
                        if ($dateDebutMois > $dateFinMois)
                        {
                           
                            if($k == $dateDebutMois && $i >= $dateDebutJour && $choixAnnee==$dateDebutAnnee)
                                {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                                }
                                if($k == $dateDebutMois && $i < $dateDebutJour && $choixAnnee==$dateDebutAnnee)
                                {
                                    echo \"    $i, \n\";
                                }
                                if($k == $dateFinMois && $i <= $dateFinJour && $choixAnnee==$dateFinAnnee)
                                {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                                }
                                if($k == $dateFinMois && $i > $dateFinJour && $choixAnnee==$dateFinAnnee)
                                {
                                    echo \"    $i, \n\";
                                }
                                if($k > $dateDebutMois && $choixAnnee==$dateDebutAnnee && $choixAnnee!=$dateFinAnnee)
                                {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                                }
                                if($k < $dateFinMois && $choixAnnee!=$dateDebutAnnee && $choixAnnee==$dateFinAnnee)
                                {
                                    $thedaybgcolor = \"red\";
                                    $thedaytext = \"#cccccc\";
                                    echo \"$i, \n\";
                                }
                                   
                                if($k > $dateFinMois && $choixAnnee!=$dateDebutAnnee && $choixAnnee==$dateFinAnnee)
                                    {
                                        echo \"    $i, \n\";
                                    }
                                   
                                if($k < $dateDebutMois && $choixAnnee==$dateDebutAnnee && $choixAnnee!=$dateFinAnnee)
                                    {
                                        echo \"    $i, \n\";
                                    }   
                           
                        }
                    }
                    else
                    {
                    if ($choixAnnee==$dateDebutAnnee && $choixAnnee==$dateFinAnnee && $k > $dateDebutMois && $k < $dateFinMois)
                        {
                        echo \"\";
                        }
                        else
                        echo \"    $i, \n\";
                    }     
                       
                }
                   
                if (mysql_num_rows($req2) == 0)
                    {
                        echo \"    $i, \n\";
                       
                    }     
                   
              $i++;

        }
        echo "
";
}

?></td>
  </tr>
</table>

</tr>
</table>

3 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
25 juil. 2006 à 10:41
Salut!
Le meilleur moyen est de définir une variable $tr ; en raccourci:

$tr = 0;
while( ... ) // boucle pour afficher les jours
{
  if( $tr == 0 ) // début de ligne?
    echo '<tr>';

  // affichage du jour
  // fin affichage jour

  $tr++; // on augmente d'un

  // si on a affiché 7 jrs
  if( $tr == 6 )
  {
    echo '</tr>'; // fin de ligne
    $tr = 0; // remise à 0
  }
}

Voilà,

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
cs_tiara Messages postés 2 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 11:42
Bonjour,
Merci pour la réponse mais cette façon de faire ne prend pas en compte si c'est une année bisextile ou et ça prend pas en compte lorsque le premier jour du mois ne tombe pas un lundi.

:/
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
25 juil. 2006 à 12:10
Salut!
Je comprends pas...

L'astuce que je t'ai donné n'intervient que pour gérer les retours à la ligne... C'est à toi de prévoir ta boucle pour qu'elle aille du jusqu'au 28 ou 29 février...

Et si le premier jour du mois est un jeudi, tu ouvre la ligne, et tu met $tr à 3

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
Rejoignez-nous