8791 sujets

Développement web côté serveur, CMS

Bonjour, je travaille sur un calendrier où l'on peut ajouter divers évènements.

A l'affichage des évenements sur le calendrier tout s'affiche niquel, MAIS si on ajoute 2 évenements sur le même jour, il n'y en a qu'un seul qui s'affiche, normal en voyant mon code, mais ça fait 1h que je cherche une solution pour contourner le problème, je vois pas, je m'en remet à vous Smiley cligne

Voici le code qui nous intéresse :


$mois = array(
"01" =>"Janvier",
"02" =>"Février",
"03" =>"Mars",
"04" =>"Avril",
"05" =>"Mai",
"06" =>"Juin",
"07" =>"Juillet",
"08" =>"Août",
"09" =>"Septembre",
"10" =>"Octobre",
"11" =>"Novembre",
"12" =>"Décembre");

$nb_jour = array(
"01" =>"31",
"02" =>"28",
"03" =>"31",
"04" =>"30",
"05" =>"31",
"06" =>"30",
"07" =>"31",
"08" =>"31",
"09" =>"30",
"10" =>"31",
"11" =>"30",
"12" =>"31");


//$new_date est équivalent au mois actuel : 07


if(isset($_SESSION['team'])&&$_SESSION['team']==1)
{
	$kik = mysql_query("select * from calendrier_event where id_team='".$_SESSION['team_id']."' and mois='$new_date'");
}
$nom = array();
$jour = array();
$id = array();
for($e=1; $affichage_match=mysql_fetch_array($kik); $e++)
{
	$jour[$e] = $affichage_match['jour'];
	$fucku = $jour[$e];
	$nom[$fucku] = $affichage_match['nom'];
	$id[$e] = $affichage_match['id'];
}
for($i=1; $i<=$nb_jour[$new_date]; $i++) 
{
	echo'
		<div class="cadre">
			<div class="entete">
				'.$i.'
			</div>';
	if(in_array($i,$jour))
	{
		if($i<10) //obligé de rajouter un 0 car php juge 01 et 1 comme deux nombres différents
		{
			echo '<a href="#">-'.$nom['0'.$i.''].'-</a>';
		}
		else
		{
			echo '<a href="#">-'.$nom[$i].'-</a>';
		}
	}


Je vous joins une image du projet au cas ou ça peut vous aider à comprendre le truc :

upload/22674-Sanstitre.PNG


Un grand merci à ceux qui prendront de leur temp pour au moins me donner la pioche pour que je puisse creuser seul Smiley cligne (c'est ce que je préfère dans la programmation Smiley lol )


P.S: je ne vous ai pas collé tout le code pour pas vous encombrer, dites moi si il vous manque quelque chose
Modifié par Neossj24 (07 Jul 2009 - 05:14)
Salut Neossj24 et bienvenue, Smiley smile

d'abord quelques remarques :
* puisqu'il s'agit de jours et de mois il serait plus logique de travailler avec des numériques qu'avec de l'alpha... et d'ailleurs ça règlerait par la même occasion ton besoin de rajouter le 0 pour les jours inférieurs à 10.
* en bonus cela permet de se débarrasser également de ton array $nb_jour qui devient inutile et qui pose d'ailleurs problème pour les années bissextiles puiqu'il ne gère pas les 29 jours de février.
* au passage il faudrait également mettre ces champs en numérique dans ta table si ce n'est pas déjà le cas.
* tu pourras en profiter pour rajouter un champ annee de type year qui devrait également t'être bien utile un jour ou l'autre (disons à partir du 1er janvier 2010). Smiley cligne
* il me semble que id_team devrait être numérique.
* on pourrait aussi se passer du premier array puisqu'en utilisant setlocale et strftime on peut facilement récupérer le libellé du mois...
* il est recommandé de ne pas utiliser * dans un SELECT mais de spécifier les champs pour optimiser les requêtes.
* ...

En gros je ferais donc quelque chose comme ça :
$today = getdate();
$mois_en_cours = $today['mon']; // Pour le premier affichage mais à gérer en fonction des défilements suivant / précédent
$annee_en_cours = $today['year']; // Pour le premier affichage mais à gérer en fonction des défilements suivant / précédent

$events = array();

if(!empty($_SESSION['team'])) {
	$result = mysql_query("select id, jour, nom from calendrier_event where id_team = ".$_SESSION['team']." and mois = $mois_en_cours and annee = $annee_en_cours");
	while($event = mysql_fetch_assoc($result)) {
		$events[$event['jour']][$event['id']]=$event['nom'];
	}
}

for($jour = 1; $jour <= 31; $jour++) {
	if($jour > 28 && !checkdate($mois_en_cours, $jour, $annee_en_cours)) { // Cette date est-elle valide ?
		break; // Si non -> on sort de la boucle
	}
	echo'<div class="cadre"><p class="entete">'.$jour.'</p>';
	if(count($events[$jour]) > 0) { // S'il existe-un (ou des) évènement(s) pour cette date...
		echo '<ul>';
		foreach($events[$jour] as $id => $nom) { 
			echo '<li><a href="event.php?id='.$id.'">-'.$nom.'-</a></li>';
		}
		echo '</ul>';
	}
	echo'</div>';
}


Edit: pour AC/DC ce n'est pas en juillet : c'était le 12 juin au stade de France et j'y étais !!! Smiley diablo
Modifié par Heyoan (09 Aug 2009 - 19:09)
Bonjour,
merci pour tout ces renseignements ! ça va beaucoup m'aider dans ma manière d'approche Smiley cligne

Ton code comparé au miens n'a rien à voir x) inutile de dire lequel est le plus correct.
Je vais tenter d'intégrer ton code et voir ce que ça donne Smiley cligne

Je vous tient au courant merci !

P.S : Pour faire mes tests j'ai mis le groupe que j'écoutais sur le moment (en l'occurence AC/DC) pour ça que la date n'a rien à voir Smiley langue (et qu'il y est écrit 3 fois) Smiley langue sinon moi aussi j'étais à leur concert mais au Stade vélodrome Smiley lol c'était le feu Smiley lol
Neossj24 a écrit :
c'était le feu Smiley lol
C'est clair ! Et ce bon vieux Angus a toujours la forme ! Smiley guitare
Modifié par Heyoan (06 Jul 2009 - 07:07)
C'est impécable, ton code marche à merveille, ça ma permis d'en apprendre un peu plus par la suite, et ce grace à toi (j'aurais jamais trouver tout seul)

Un grand merci à toi, t'es Zebest Smiley smile et qui sait, on se reverra peut-être à un futur concert l'index et l'auriculaire levé Smiley lol Smiley winner Smiley wingol
Neossj24 a écrit :
et qui sait, on se reverra peut-être à un futur concert l'index et l'auriculaire levé
Ça marche ! Tu me reconnaîtras facilement : j'aurai 2 cornes rouges clignotantes ! Smiley ravi