Problème d'affichage pour un calendrier PHP [Résolu/Fermé]

Signaler
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
-
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
-
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 !

9 réponses


il y en a des tout fait moi j ai trouvé celui là je ne sais plus ou http://jeanmichel.gens.free.fr/calendrier.php j ai le source si besoin
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
31
Oui, mais je suis débutant et je cherche à le faire moi même...

Il ne me manque pas grand chose...

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
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
31
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...

voici la correction de ton module http://jeanmichel.gens.free.fr/tetu.zip

13 mois de 28 jours =364 + 1 ou 2 appelés complemendi
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
31
Je viens de voir ton message, je décortique à fond pour tout comprendre et donne suite à ton message et au post...

Merci
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
31
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>';
				}
			}
Messages postés
732
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
6 octobre 2020
31
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 !