Problème d'affichage pour un calendrier PHP

Résolu
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   -  
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

9 réponses

Utilisateur anonyme
 
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
0
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   32
 
Oui, mais je suis débutant et je cherche à le faire moi même...

Il ne me manque pas grand chose...
0
Utilisateur anonyme
 
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
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   32
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
voici la correction de ton module http://jeanmichel.gens.free.fr/tetu.zip
0
Utilisateur anonyme
 
13 mois de 28 jours =364 + 1 ou 2 appelés complemendi
0
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   32
 
Je viens de voir ton message, je décortique à fond pour tout comprendre et donne suite à ton message et au post...

Merci
0
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   32
 
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
Fetide68 Messages postés 745 Date d'inscription   Statut Membre Dernière intervention   32
 
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