Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2011, 13h32   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 63
Points : 16
Points : 16
Par défaut Récupérer des événements pour les afficher dans le calendrier

Bonjour,
j'essaye de créer un calendrier mais j'ai un petit souci au niveau de la récupération des événements à afficher dans mon calendrier.
Le calendrier s'affiche correctement, il n'y a aucun souci de ce côté-là.
En revanche, j'ai plusieurs événements qui devraient être marqués dans mon calendrier mais seul le premier est pris en compte ( celui avec l'id 1 ). Voici mon code :
Code :
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
101
102
103
 
<?php
$req_recup_events = mysql_query('SELECT * FROM events');
$recup_events = mysql_fetch_assoc($req_recup_events);
$date_events = $recup_events['date'];
$date_format =  date('d-n-Y', $date_events);
$date = explode('-', $date_format);
 
// Boucle pour générer le calendrier
for($i=1;$i<40;$i++)
{
if($i < $premierdumois)
{	
if($jour == $date[0] && $mois == $date[1] && $annee == $date[2])
{
// Si la variable $jour correspond à l'événement d'aujourd'hui,
// la case est en lien
echo '<td class="calendrier_td_non_actif"><a href="#contenu"
class="info">'.$joursmoisavant.'</a></td>';
}
else
{
// Tant que la variable i ne correspond pas au premier jour du mois,
// on fait des cellules de tableau avec les derniers jours du mois précédent
echo '<td class="calendrier_td_non_actif">'.$joursmoisavant.'</td>';
}
$joursmoisavant++;
}
else
{
if($jour == date("d") && $mois == date("n"))
{
if($jour == $date[0] && $mois == $date[1] && $annee == $date[2])
{
// Si la variable $jour correspond à l'événement d'aujourd'hui,
// la case est en lien
echo '<td class="calendrier_td_aujourdhui"><a href="#contenu"
class="info">'.$jour.'</a></td>';
}
else
{
// Si la variable $jour correspond à la date d'aujourd'hui,
// la case est d'une couleur différente
echo '<td class="calendrier_td_aujourdhui">'.$jour.'</td>';
}
}
 
else
{
if($jour == $date[0] && $mois == $date[1] && $annee == $date[2])
{
// Si la variable $jour correspond à l'événement d'aujourd'hui,
// la case est en lien
echo '<td class="calendrier_td_actif"><a href="#contenu"
class="info">'.$jour.'<span>'.htmlspecialchars($recup_events['evenement'],
ENT_QUOTES).'</span></a></td>';
}
else
{
// Si la variable $jour correspond à la date d'aujourd'hui,
// la case est d'une couleur différente
echo '<td class="calendrier_td_actif">'.$jour.'</td>';
}
}
$jour++;	//On passe au lendemain
 
/*Si la variable $jour est plus élevée que le nombre de jours du mois,
c'est que c'est la fin du mois! 
On remplit les cases vides avec les premiers jours des mois suivants
Hop on ferme le tableau, 
et on met la variable $i à 41 pour sortir de la boucle */
if($jour > ($nbrjour[$mois])){
while($i % 7 != 0)
{
if($jour == $date[0] && $mois == $date[1] && $annee == $date[2])
{
// Si la variable $jour correspond à l'événement d'aujourd'hui,
// la case est en lien
echo '<td class="calendrier_td_non_actif"><a href="#contenu"
class="info">'.$jourmoissuivant.'</a></td>';
}
else
{
// Tant que la variable i ne correspond pas au premier jour du mois,
// on fait des cellules de tableau avec les derniers jours du mois précédent
echo '<td class="calendrier_td_non_actif">'.$jourmoissuivant.'</td>';
}
$i++;
$jourmoissuivant++;
}
echo '</tr></table>';
$i=41;
}
}	
// Si la variable i correspond à un dimanche (multiple de 7), 
// on passe à la ligne suivante dans le tableau
if($i % 7 == 0)
{
echo '</tr><tr>';
}
 
}
?>
Le problème vient, je pense, des premières lignes, avec la requête SQL. Mais je ne sais pas comment m'y prendre, j'suis saturé
Merci d'avance à tous ceux qui m'aideront

PS : la date enregistrée dans ma bdd est sous forme de timestamp alors je le formate pour faire des comparaisons correctes dans le calendrier.
De plus, j'ai également essayé ceci :
Code :
1
2
3
4
5
6
7
8
 
$req_recup_events = mysql_query('SELECT * FROM events');
while($recup_events = mysql_fetch_assoc($req_recup_events))
{
$date_events = $recup_events['date'];
$date_format =  date('d-n-Y', $date_events);
$date = explode('-', $date_format);
}
Mais ça ne m'a pas aidé énormément.
beji15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 15h51   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Déjà dans tous les cas, n'appelle pas ton champ mysql "date".
Utilise plutot un champ DATE mais sinon tu as déja tout en mysql pour faire des conversions et du formatage de date.
Tu places tes données d’événement dans un tableau classé par jour :
Code :
1
2
3
4
5
$req_recup_events = mysql_query('SELECT FROM_UNIXTIME(`date`) as event_date, event_description FROM events');
while($row = mysql_fetch_assoc($req_recup_events))
{
$tblEvenements[$row['event_date']][] = [$row['event_description']
}
Pour la suite, tu as juste a regarder dans le tableau, si tu as quelque chose pour le jour que tu affiches.

Ta construction du calendrier me parait cependant inutilement compliqué.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 15h51   #3
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
le problème vient de la façon dont tu récupère le résultat de ta requête, tu ne récupère que la première ligne alors que tu devrais parcourir tout le résultat avec une boucle while et éventuellement créer un tableau dans lequel tu rangerais chaque ligne...
sabotage à été plus rapide que moi...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 16h20   #4
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 63
Points : 16
Points : 16
Merci pour votre aide.
J'ai essayé de comprendre votre code, sabotage mais sans succès, je ne saisis toujours pas...

vorace, d'après vous, dois - je prendre les valeurs de la boucle dans un array() ?
beji15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 17h55   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
je ne saisis toujours pas
il n'y a que 3 lignes dont 2 pour la requête, qu'est ce qui te pose problème ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 18h30   #6
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 63
Points : 16
Points : 16
Je voudrais savoir à quoi sert le UNIXTIME dans la requête ?
Ensuite, comment exploiter correctement la boucle ?
Car je reçois des erreurs lors des tentatives de comparaison de date dans le calendrier...
beji15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 19h52   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
Je voudrais savoir à quoi sert le UNIXTIME dans la requête ?
as-tu consulté la documentation ?

Par exemple si tu veux controler s'il y a un evenement aujourd'hui :
Code :
1
2
3
4
5
6
if (isset($tblEvenements['2011-03-05'])) {
    foreach($tblEvenements['2011-03-05'] as $description) {
      echo $description . '<br/>';
    }
}
]
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h28.


 
 
 
 
Partenaires

Hébergement Web