IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Calendrier : afficher événements


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 44
    Points
    44
    Par défaut [Tableaux] Calendrier : afficher événements
    Bonjour,

    Je travaille sur un calendrier/agenda. L'utilisateur peut saisir des événements et ces derniers doivent s'afficher sur le calendrier (via une case colorée par exemple).

    Je fais un select dans ma BDD pour récupérer tous les événements enregistrés et je les place dans une table.

    Mon problème ce que je n'arrive pas à faire avancé le script dans cette table pour passer en revue tous les enregistrements.

    Voici mon code (en bleu le passage qui me pose problème) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    $sql = 'SELECT * FROM agenda';
    $result = mysql_query ($sql, $cnx) or die('Erreur : '.mysql_error());
    $RsAgenda = mysql_fetch_array($result);
    
    //annee sur 4 chiffres
    if(!$_GET['y']) { $year = date('Y'); } else { $year = $_GET['y']; }
    
    //mois numerique
    if(!$_GET['m']) { $month = date('n'); } else { $month = $_GET['m']; }
    
    //jour numerique
    if(!$_GET['d']) { $day = date('d'); } else { $day = $_GET['d']; }
    
    //timestamp du mois
    $time = mktime(0,0,0,$month,1,$year);
         	
    //nombre de jours dans le mois
    $jours_mois = date('t',$time);
    
    //dernier jour du mois
    if ($day > $jours_mois) { $day = $jours_mois; }
    
    //premier jour du mois
    $firstday = (date('w',$time)+6) % 7;
    
    //liens mois precedents/suivants
    $precedent='?y='.($month<2?$year-1:$year).'&m='.($month<2?12:$month-1).'&d='.$day;
    $suivant='?y='.($month>11?$year+1:$year).'&m='.($month>11?1:$month+1).'&d='.$day;
    
    //le mois textuel en francais
    if ($month==1) { $moistextuel = "Janvier"; }
    if ($month==2) { $moistextuel = "F&eacute;vrier"; }
    if ($month==3) { $moistextuel = "Mars"; }
    if ($month==4) { $moistextuel = "Avril"; }
    if ($month==5) { $moistextuel = "Mai"; }
    if ($month==6) { $moistextuel = "Juin"; }
    if ($month==7) { $moistextuel = "Juillet"; }
    if ($month==8) { $moistextuel = "Ao&ucirc;t"; }
    if ($month==9) { $moistextuel = "Septembre"; }
    if ($month==10) { $moistextuel = "Octobre"; }
    if ($month==11) { $moistextuel = "Novembre"; }
    if ($month==12) { $moistextuel = "D&eacute;cembre"; }
    ?>
    
    <div class="entete">
    	<a href="<?PHP echo $precedent; ?>">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;
    	<?PHP echo ($moistextuel.' '.$year.'&nbsp;&nbsp;&nbsp;'); ?>
    	<a href="<?PHP echo $suivant; ?>">&gt;&gt;</a>
    </div>
    <table width="105" class="tableau" cellpadding="5" cellspacing="0">
    	<tr> 
    		<td width="15" class="jours">L</td> 
    		<td width="15" class="jours">M</td> 
    		<td width="15" class="jours">M</td> 
    		<td width="15" class="jours">J</td> 
    		<td width="15" class="jours">V</td> 
    		<td width="15" class="jours">S</td> 
    		<td width="15" class="jours">D</td> 
    	</tr> 
      <tr>
     
    <?PHP
    $case = 0; //premiere case
    
    //affiche les premiers jours a blanc
    for ($i = 0; $i < $firstday; $i++) {
    	echo ('<td width="15">&nbsp;</td>');
    	$case++; //avance d'une case
    }
    
    //mois et jour actuels
    $moisactuel = date('n');
    $jouractuel = date('d');
    
    //affiche tous les jours du mois actuel
    for ($i = 1; $i <= $jours_mois; $i++) { //de 1 a 31 jours
    	//si c'est un evenement et aujourd'hui
    	if (($RsAgenda[1]==$i) && ($$RsAgenda[2]==$month) && ($jouractuel==$i) && ($moisactuel==$month)) {
    		echo ('<td width="15" class="caseActif"><a href="?y='.$year.'&m='.$month.'&d='.$i.'">'.$i.'</a></td>');
    	} else {
    		if (($jouractuel==$i) && ($moisactuel==$month)) {
    			echo ('<td width="15" class="caseActif"><a href="?y='.$year.'&m='.$month.'&d='.$i.'">'.$i.'</a></td>');
    		} else {
    			echo '<td width="15" class="case"><a href="?y='.$year.'&m='.$month.'&d='.$i.'">'.$i.'</a></td>';
    		}//fin du else
    	}//fin du else
    	$case++;
    	if ($case%7==0){ //si on arrive a dimanche aller a la ligne
    		echo ('</tr><tr>');
    	}//fin du if
    }//fin du for
    
    
    // determine si une ligne est entamee ou non
    $i = $case % 7 ;
    
    // ajoute des cases vides pour finir la ligne
    for ($j = $i; $j < 7; $j++) {
    	echo '<td width="15">&nbsp;</td>';
    }
    Avez-avez vous une solution à me proposer ?
    Merci

  2. #2
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Salut, essai de remplacer tes && par and pour voir déjà. Et est-tu sûr de rentrer dans ta boucle for ? pour le vérifier fais un echo
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Si je comprend bien tu n'arrive pas à boucler sur le nombre du jour du mois en cour ?
    Personnellement je ne vois pas ou est le probleme j'ai juste regardé la syntaxe du for et l'initialisation du nombre de jour dans le mois en cours via date('d').
    Dans ce cas là affiche le contenu de jours_mois pour voir si c'est bien le chiffre attendu. As tu controlé ce qu'il se passe quand tu es au premier jour du mois en cour? Et si le premier jour du mois c'est un dimanche ? ...
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  4. #4
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($RsAgenda[1]==$i) && ($$RsAgenda[2]==$month)
    N'y aurait il pas un $ en trop ?
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  5. #5
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par guitou12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($RsAgenda[1]==$i) && ($$RsAgenda[2]==$month)
    N'y aurait il pas un $ en trop ?
    Bien vu , le problème pourrait venir de là effectivement.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Merci pour vos réponses

    J'ai corrigé le double $ mais ça ne change rien au problème.

    En faite, dans $RsAgenda j'ai 5 événements issus de ma BDD. Le premier est du 8 janvier, le second du 14 jullet...

    Avec ma boucle for, j'avance les jours (du 1 à la fin du mois).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= $jours_mois; $i++)
    Avec mon premier if, je gère l'affichage si le jour $i et le mois $month correspondent au jour et au mois d'un événement issu de $RsAgenda mais aussi à la date du jour ($jouractuel et $moisactuel).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($RsAgenda[1]==$i) && ($RsAgenda[2]==$month) && ($jouractuel==$i) && ($moisactuel==$month))
    Mon problème c'est qu'au démarrage, le premier enregistrement lu contient la date du 8 janvier : $RsAgenda[1] vaut 8 et $RsAgenda[2]; vaut 1.

    Comment faire pour arriver à l'enregistrement suivant soit,
    $RsAgenda[1] vaut 14 et $RsAgenda[2]; vaut 7 (pour la date du 14 juillet).

    Merci

  7. #7
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Il me semble qu'il existe une fonction pour retourner un tableau. mais perso je ne sais pas comment tu as construit ton script parce que pour moi pour chaque jour je parcour le même tableau pour faire la comparaison. Je me préocupe plus dans quel sens son les informations vu que tu parcours ton tableau .
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    ok tu aurais un exemple de code ?

  9. #9
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Un exemple de code ?
    Je vais te le faire quand même mais dans l'idée c'est.

    1 : je récupére tous les évenements pour le mois sélectionné. que je place dans un table. en sachant que l'indice du tableau correspond au numéro du jour.
    2 : Je boucle sur le nombre de jour du mois selection 1 à [28-31].
    3 : si le jour existe dans la clé du tableau des évènements alors c'est qu'il y quelque chose.
    En gros tu peux avoir ceci comme stracture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $arrEvenement[2][...] = xxxx;
    $arrEvenement[7][...] = xxxx;
    $arrEvenement[9][...] = xxxx;
    $arrEvenement[10][...] = xxxx;
    for($i=0;$i<nbJoursMois;$i++){
      if(isset($arrEvenement[$i])){
        ...
      }
    }
    C'est pas la meilleur mais c'est à froid que je trouve l'idée mais dans l'idée c'est ça
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    merci berceker, je vais essayer de travailler ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Lien affiché si fichier présent
    Par francoisch dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2008, 10h37
  2. [Tableaux] Erreur sur évènement onmouseover
    Par pat06 dans le forum Langage
    Réponses: 25
    Dernier message: 17/10/2007, 18h05
  3. Réponses: 1
    Dernier message: 14/05/2007, 15h46
  4. [Tableaux] Gestion d'évènements dans un array
    Par Mat_DZ dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2007, 17h13
  5. [Calendrier] Gérer un calendrier d'événements
    Par Pau dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/01/2007, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo