Problème d'affichage pour un calendrier PHP

Résolu
Bonjour,

J'essaie de faire tout seul un calendrier en PHP !

Un seul détail ne fonctionne pas, chaque mois commence un lundi comme ceci pour janvier:

L M M J V S D
1 2 3
4 5 6 7 8 9 10...

Le 4 est bien un lundi mais le premier, est un vendredi... J'essaie de trouver une condition pour afficher
 '<td>&nbsp;</td>' 
si le jour ne correspond pas mais je ne vois pas... :

Voici mon code :

<span class="location">
	<form method="post" id="dates">
		<select name="mois" id="mois" onchange="document.getElementById('dates').submit();">
			<?php 
				$mois = array ('','Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre');
				$jours = array ('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
				
				$selected_month = Securite::bdd($_POST['mois']);
				
				for ($mm=1;$mm<=12;$mm++) {
					if ($mm != $selected_month) {
						echo '<option value="'.$mm.'">'.$mois[$mm].'</option>';
					}
					else {
						echo '<option value="'.$mm.'" selected>'.$mois[$mm].'</option>';
					}
				}
			?>
		</select>
		<select name="annee" id="annee" onchange="document.getElementById('dates_foyer').submit();">
			<?php 
				$annee_courante = date('Y',time());
				$annee_suivante = date('Y',time())+1;
				
				$selected_year = Securite::bdd($_POST['annee']);
				
				if ($selected_year == $annee_suivante) {
					echo '<option value="'.$annee_courante.'">'.$annee_courante.'</option>';
					echo '<option value="'.$annee_suivante.'" selected>'.$annee_suivante.'</option>';
				}
				else {
					$selected_year = date('Y',time());
					echo '<option value="'.$annee_courante.'" selected>'.$annee_courante.'</option>';
					echo '<option value="'.$annee_suivante.'">'.$annee_suivante.'</option>';
				}
			?>
		</select>
	</form>
</span>
<?php
		if ($selected_month != '' && $selected_year != '') {
			$month = $selected_month;
			$year = $selected_year;
			echo $mois[$month].' '.$year;
		}
		else {
			$month = date ('n',time());
			$year = date ('Y',time());
			echo $mois[$month].' '.$year;
		}

		// date choisie en timestamp
		$selected_date = strtotime('01-'.$month.'-'.$year);
		// nombre de jour pour le mois et de l'année choisie
		$nombre_de_jour = date ('t',$selected_date);

		echo '<br><br>';
		
		
		echo '<br><br>';
		
		echo '<table class="calendrier" style="margin: auto; width: 420px;">';
		echo '<tr class="entete"><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td class="weekend">S</td><td class="weekend">D</td></tr>';
			for ($day=1; $day<=$nombre_de_jour; $day++) {
				$date_du_day = strtotime($day.'-'.$month.'-'.$year);
				
				$jours_semaine = Array("0", "1", "2", "3", "4", "5", "6", "0");
				
				$jour_de_la_semaine = date('w',$date_du_day);
				
				if ($jour_de_la_semaine==1) {
					echo '<tr>';
				}

				echo '<td>'.$day.'</td>'; 

				if ($jour_de_la_semaine==0) {
					echo '</tr>';
				}
			
			}
		echo '</table>';
?>


Merci !
Configuration: Windows Vista
Firefox 3.5.7

9 réponses

  1. Oui, mais je suis débutant et je cherche à le faire moi même...

    Il ne me manque pas grand chose...
    0
    1. la plupart des gens ici ne vont pas lire le code fourni c est mieux de donner un lien d abord
      de cette manière les gens concrétisent le problème et seront plus enclins à lire le code
      0
      1. En clair, mon problème est le suivant :
        http://membres.multimania.fr/killmicht/calendrier/

        Si au moins tous les mois commençaient par un vendredi ou un semedi... mais pas un lundi...

        J'ai encore ce compte lycos mais le php semble être capricieux...
        0
        1. 13 mois de 28 jours =364 + 1 ou 2 appelés complemendi
          0
          1. Je viens de voir ton message, je décortique à fond pour tout comprendre et donne suite à ton message et au post...

            Merci
            0
            1. Merci beaucoup,

              J'ai tenté de faire ma propre boucle en m'inspirant de la tienne que j'ai bien compris (mais comme c'est un exercice, je tiens à m'entraîner avec sérieux). Le problème c'est que ça fonctionne en local mais pas en ligne...

              http://www.membres.lycos.fr/killmicht/calendrier/

              Voici mon code qui fonctionne aussi (juste pour la boucle) :
              			for ($day=1; $day<=$nombre_de_jour; $day++) {
              				// Conversion des dates en timestamp
              				$date_du_day = strtotime($day.'-'.$month.'-'.$year);
              				$position_jour = Array(0,1,2,3,4,5,6,0);
              				$jour_de_la_semaine = date('w',$date_du_day);
              				$jour_du_mois = date('j',$date_du_day);
              				
              				if ($jour_de_la_semaine==1 || $jour_du_mois==1) {
              					echo '<tr>';
              					if ($jour_du_mois==1) {
              						$i=1;
              						while ($i != $position_jour[$jour_de_la_semaine]) {
              							echo '<td>&nbsp;</td>';
              							$i++;
              						}
              					}
              				}
              				
              				if ($date_du_day > time()) {
              					echo '<td><a href="?c=infos&p=foyer&r='.$date_du_day.'">'.$day.'</a></td>'; 
              				}
              				else {
              					echo '<td>'.$day.'</td>'; 
              				}
              				
              				if ($jour_de_la_semaine==0) {
              					echo '</tr>';
              				}
              			}
              
              0
              1. J'ai compris...

                Moi j'ai fait un echo des td et toi tu as mis les td dans $m et tu echo $m quand tu en as besoin...

                Merci !
                0