Problème d'affichage pour un calendrier PHP

Résolu/Fermé
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 26 janv. 2010 à 12:01
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 27 janv. 2010 à 10:14
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
26 janv. 2010 à 14:42
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 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
26 janv. 2010 à 14:44
Oui, mais je suis débutant et je cherche à le faire moi même...

Il ne me manque pas grand chose...
0
Utilisateur anonyme
26 janv. 2010 à 14:55
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 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
26 janv. 2010 à 16:40
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
26 janv. 2010 à 19:13
voici la correction de ton module http://jeanmichel.gens.free.fr/tetu.zip
0
Utilisateur anonyme
26 janv. 2010 à 20:16
13 mois de 28 jours =364 + 1 ou 2 appelés complemendi
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
27 janv. 2010 à 09:22
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 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
27 janv. 2010 à 09:35
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 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
27 janv. 2010 à 10:14
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