Hulp nodig bij array
Nou werkt dat allemaal prima, maar zit ik vast wanneer er meerdere activiteiten op 1 dag aanwezig zijn.
De resultaten uit de DB zet ik in een array, zodat je niet voor elke dag een query hoeft uit te voeren.
Per dag moet dan gekeken worden of er een of meerdere activiteiten aanwezig zijn. Wanneer je 1 activiteit per dag zou toestaan, zou je dag als key kunnen gebruiken, maar aangezien het er meerdere kunnen zijn wordt dat een getal van 0 tot x.
Het steeds moeten loopen om te controleren of er een item bij die dag hoort en er voor zien te zorgen dat sommige dingen maar 1x gedaan worden (als tonen van de dag en link etc) is ook weer niet het meest efficiënte.
Nou er is ongetwijfeld wel een makkelijke manier, om bij het tonen van de dagen onnodig veel te hoeven loopen.
In onderstaand script heb ik dan ook nog even 0 ingevuld, ipv een loop te gebruiken. Bij 8 mei horen 2 items, bij 10 mei hoort ook nog een item (die nu dus nog niet aangeduid kan worden).
Iemand die een goede oplossing weet?
PS: Let nog niet op de opmaak/weergave, moet nog allemaal netjes gemaakt worden, maar is nu puur voor de werking.
Het script:
Code (php)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<?php
// Script from PHP Hulp (http://phphulp.nl/php/scripts/7/690/) by Arjan Kapteijn (http://www.arjaninkenia.nl).
// Script updated with DB functionality by Vincent Groenewegen (http://www.vincentg.nl).
// Defineren van de maanden
$maanden = array(1 => 'januari', 2 => 'februari', 3 => 'maart', 4 => 'april', 5 => 'mei', 6 => 'juni', 7 => 'juli', 8 => 'augustus', 9 => 'september', 10 => 'oktober', 11 => 'november', 12 => 'december');
// Defineren van de weekdagen
$weekdagen = array('zondag', 'maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag');
// Defineren beschikbare jaren
$jaren = range(2006,2010);
// Controleren of er een maand in de URL is meegegeven, anders huidige maand defineren
if (isset($_GET['maand'])) {
// Controleren of opgegeven maand bestaat
if (array_key_exists($_GET['maand'], $maanden)) {
$maand = $_GET['maand'];
} else {
$maand = date('n');
}
} else {
$maand = date('n');
}
// Controleren of er een jaar in de URL is meegegeven, anders huidige jaar defineren
if (isset($_GET['jaar'])) {
// Controleren of opgegeven jaar bestaat
if (in_array($_GET['jaar'],$jaren)) {
$jaar = htmlentities($_GET['jaar']);
} else {
$jaar = date('Y');
}
} else {
$jaar = date('Y');
}
// Defineren welke dagen zijn toegestaan in opgevraagde of huidige maand en jaar
$dagen = range(1,date('t', mktime(0,0,0,$maand,1,$jaar)));
// Controleren of er een dag in de URL is meegegeven, anders huidige dag of dag 1 defineren
if (isset($_GET['dag'])) {
// Controleren of opgegeven dag bestaat
if (in_array($_GET['dag'], $dagen)) {
$dag = htmlentities($_GET['dag']);
} else {
$dag = 1;
}
} else {
// Als er geen dag opgegeven is, controleren of opgegeven maand gelijk is aan huidige maand en indien waar vandaag selecteren
if ($maand == date('n')) {
$dag = date('j');
} else {
$dag = 1;
}
}
/*
// Formulier om maand en jaar op te geven
echo '<form action="" method="GET">';
// We maken een selectbox met daarin een foreach met alle maanden
echo '<select name="maand" onchange="this.form.submit()">';
foreach ($maanden as $maandnummer => $maandnaam) {
if($maandnummer == $maand) {
echo '<option selected value="'.$maandnummer.'">'.$maandnaam.'</option>';
} else {
echo '<option value="'.$maandnummer.'">'.$maandnaam.'</option>';
}
}
echo '</select> ';
// Vervolgens maken we een selectbox voor alle jaren
echo '<select name="jaar" onchange="this.form.submit()">';
foreach ($jaren as $jaarnummer) {
if($jaarnummer == $jaar) {
echo '<option selected value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
} else {
echo '<option value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
}
}
echo '</select></form><hr>';
*/
// Creëren van de tabel
echo '<table>';
// Tonen eerste rij met beginletters van de weekdagen
echo '<tr></tr><tr><th>M</th><th>D</th><th>W</th><th>D</th><th>V</th><th>Z</th><th>Z</th></tr><tr>';
// Defineren eerste dag van de maand
$eerstedag = date('w', mktime(0,0,0,$maand,1,$jaar));
// Lege ruimte creëren wanneer eerste dag van de maand niet op maandag valt
for ($nummer = 1; $nummer <= 6; $nummer += 1) {
if ($nummer != $eerstedag) {
echo '<td></td>';
} else {
$nummer = 7;
}
}
// Maandnummers 1 t/m 9 voorzien van een nul
$month = str_pad($maand, 2, '0', STR_PAD_LEFT);
$i = 0;
// Kijken of er activiteiten in de database staan voor opgegeven of huidige maand en jaar
mysql_connect("localhost","beachvol","gwqPtKnE");
mysql_select_db("beachvol");
$sql = mysql_query("SELECT * FROM kalender WHERE datum LIKE '".$jaar."-".$month."-%'") or die ('<b>Database error:</b><br />' . mysql_error());
// Gevonden items in een array zetten
if (mysql_num_rows($sql) > 0) {
while ($row = mysql_fetch_array($sql)) {
$date = explode('-', $row['datum']);
$dayContains[$i]['dag'] = $date[2];
$dayContains[$i]['begintijd'] = $row['begintijd'];
$dayContains[$i]['eindtijd'] = $row['eindtijd'];
$dayContains[$i]['activiteit'] = $row['activiteit'];
$dayContains[$i]['frequentie'] = $row['frequentie'];
$i++;
}
}
// Aantal gevonden activiteiten tellen
$count = count($dayContains);
// Loop creëren voor elke dag in de week
foreach ($dagen as $dag2) {
// Dagen 1 t/m 9 voorzien van een nul
$day = str_pad($dag2, 2, '0', STR_PAD_LEFT);
// Defineren weekdag
$dagindeweek = date('w', mktime(0,0,0,$maand,$dag2,$jaar));
// Nieuew rij beginnen wanneer de dag '1' (maandag) is
if ($dagindeweek == 1) {
echo '<tr>';
}
// Controleren of deze dag de datum van vandaag is en deze aanduiden door middel van een rode rand
if (($dag2 == date('j')) && ($maand == date('n')) && ($jaar == date('Y'))) {
// Controleren of deze dag activiteiten bevat en indien van toepassing dag rood kleuren
if ($day == $dayContains[0]['dag']) {
echo '<td style="border: 1px solid red; color:FF0000;"><a href="?day='.$day.'">';
} else {
echo '<td style="border: 1px solid red;">';
}
} else {
// Controleren of deze dag activiteiten bevat en indien van toepassing dag rood kleuren
if ($day == $dayContains[0]['dag']) {
echo '<td style="color:FF0000;"><a href="?day='.$day.'">';
} else {
echo '<td>';
}
}
// Opgegeven dag dikgedrukt aanduiden
if ($dag2 == $dag) {
echo '<b>'.$dag2.'</b>';
} else {
echo $dag2;
}
// Cel en indien van toepassing link afsluiten
if ($day == $dayContains[0]['dag']) {
echo '</a></td>';
} else {
echo '</td>';
}
// De rij op zondag (dag is nul) eindigen
if ($dagindeweek == 0) {
echo '</tr>';
}
}
// Tabel afsluiten
echo '</table>';
// Activiteiten weergeven
if(is_numeric($_GET['day'])) {
for ($j = 0; $j < $count; $j++) {
if ($dayContains[$j]['dag'] == $_GET['day']) {
echo $dayContains[$j]['dag'] . $dayContains[$j]['activiteit'] . ' <br />';
}
}
}
// Creëren blader mogelijkheid naar vorige maand, wordt niet gecontroleerd op toegestane jaren
if ($maand == 1) {
echo '<a href="?maand=12&jaar='.($jaar-1).'"><< Vorige</a>';
} else {
echo '<a href="?maand='.($maand-1).'&jaar='.$jaar.'"><< Vorige</a>';
}
// Creëren blader mogelijkheid naar volgende maand, wordt niet gecontroleerd op toegestane jaren
if ($maand == 12) {
echo ' | <a href="?maand=1&jaar='.($jaar+1).'">Volgende >></a>';
} else {
echo ' | <a href="?maand='.($maand+1).'&jaar='.$jaar.'">Volgende >></a>';
}
?>
// Script from PHP Hulp (http://phphulp.nl/php/scripts/7/690/) by Arjan Kapteijn (http://www.arjaninkenia.nl).
// Script updated with DB functionality by Vincent Groenewegen (http://www.vincentg.nl).
// Defineren van de maanden
$maanden = array(1 => 'januari', 2 => 'februari', 3 => 'maart', 4 => 'april', 5 => 'mei', 6 => 'juni', 7 => 'juli', 8 => 'augustus', 9 => 'september', 10 => 'oktober', 11 => 'november', 12 => 'december');
// Defineren van de weekdagen
$weekdagen = array('zondag', 'maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag');
// Defineren beschikbare jaren
$jaren = range(2006,2010);
// Controleren of er een maand in de URL is meegegeven, anders huidige maand defineren
if (isset($_GET['maand'])) {
// Controleren of opgegeven maand bestaat
if (array_key_exists($_GET['maand'], $maanden)) {
$maand = $_GET['maand'];
} else {
$maand = date('n');
}
} else {
$maand = date('n');
}
// Controleren of er een jaar in de URL is meegegeven, anders huidige jaar defineren
if (isset($_GET['jaar'])) {
// Controleren of opgegeven jaar bestaat
if (in_array($_GET['jaar'],$jaren)) {
$jaar = htmlentities($_GET['jaar']);
} else {
$jaar = date('Y');
}
} else {
$jaar = date('Y');
}
// Defineren welke dagen zijn toegestaan in opgevraagde of huidige maand en jaar
$dagen = range(1,date('t', mktime(0,0,0,$maand,1,$jaar)));
// Controleren of er een dag in de URL is meegegeven, anders huidige dag of dag 1 defineren
if (isset($_GET['dag'])) {
// Controleren of opgegeven dag bestaat
if (in_array($_GET['dag'], $dagen)) {
$dag = htmlentities($_GET['dag']);
} else {
$dag = 1;
}
} else {
// Als er geen dag opgegeven is, controleren of opgegeven maand gelijk is aan huidige maand en indien waar vandaag selecteren
if ($maand == date('n')) {
$dag = date('j');
} else {
$dag = 1;
}
}
/*
// Formulier om maand en jaar op te geven
echo '<form action="" method="GET">';
// We maken een selectbox met daarin een foreach met alle maanden
echo '<select name="maand" onchange="this.form.submit()">';
foreach ($maanden as $maandnummer => $maandnaam) {
if($maandnummer == $maand) {
echo '<option selected value="'.$maandnummer.'">'.$maandnaam.'</option>';
} else {
echo '<option value="'.$maandnummer.'">'.$maandnaam.'</option>';
}
}
echo '</select> ';
// Vervolgens maken we een selectbox voor alle jaren
echo '<select name="jaar" onchange="this.form.submit()">';
foreach ($jaren as $jaarnummer) {
if($jaarnummer == $jaar) {
echo '<option selected value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
} else {
echo '<option value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
}
}
echo '</select></form><hr>';
*/
// Creëren van de tabel
echo '<table>';
// Tonen eerste rij met beginletters van de weekdagen
echo '<tr></tr><tr><th>M</th><th>D</th><th>W</th><th>D</th><th>V</th><th>Z</th><th>Z</th></tr><tr>';
// Defineren eerste dag van de maand
$eerstedag = date('w', mktime(0,0,0,$maand,1,$jaar));
// Lege ruimte creëren wanneer eerste dag van de maand niet op maandag valt
for ($nummer = 1; $nummer <= 6; $nummer += 1) {
if ($nummer != $eerstedag) {
echo '<td></td>';
} else {
$nummer = 7;
}
}
// Maandnummers 1 t/m 9 voorzien van een nul
$month = str_pad($maand, 2, '0', STR_PAD_LEFT);
$i = 0;
// Kijken of er activiteiten in de database staan voor opgegeven of huidige maand en jaar
mysql_connect("localhost","beachvol","gwqPtKnE");
mysql_select_db("beachvol");
$sql = mysql_query("SELECT * FROM kalender WHERE datum LIKE '".$jaar."-".$month."-%'") or die ('<b>Database error:</b><br />' . mysql_error());
// Gevonden items in een array zetten
if (mysql_num_rows($sql) > 0) {
while ($row = mysql_fetch_array($sql)) {
$date = explode('-', $row['datum']);
$dayContains[$i]['dag'] = $date[2];
$dayContains[$i]['begintijd'] = $row['begintijd'];
$dayContains[$i]['eindtijd'] = $row['eindtijd'];
$dayContains[$i]['activiteit'] = $row['activiteit'];
$dayContains[$i]['frequentie'] = $row['frequentie'];
$i++;
}
}
// Aantal gevonden activiteiten tellen
$count = count($dayContains);
// Loop creëren voor elke dag in de week
foreach ($dagen as $dag2) {
// Dagen 1 t/m 9 voorzien van een nul
$day = str_pad($dag2, 2, '0', STR_PAD_LEFT);
// Defineren weekdag
$dagindeweek = date('w', mktime(0,0,0,$maand,$dag2,$jaar));
// Nieuew rij beginnen wanneer de dag '1' (maandag) is
if ($dagindeweek == 1) {
echo '<tr>';
}
// Controleren of deze dag de datum van vandaag is en deze aanduiden door middel van een rode rand
if (($dag2 == date('j')) && ($maand == date('n')) && ($jaar == date('Y'))) {
// Controleren of deze dag activiteiten bevat en indien van toepassing dag rood kleuren
if ($day == $dayContains[0]['dag']) {
echo '<td style="border: 1px solid red; color:FF0000;"><a href="?day='.$day.'">';
} else {
echo '<td style="border: 1px solid red;">';
}
} else {
// Controleren of deze dag activiteiten bevat en indien van toepassing dag rood kleuren
if ($day == $dayContains[0]['dag']) {
echo '<td style="color:FF0000;"><a href="?day='.$day.'">';
} else {
echo '<td>';
}
}
// Opgegeven dag dikgedrukt aanduiden
if ($dag2 == $dag) {
echo '<b>'.$dag2.'</b>';
} else {
echo $dag2;
}
// Cel en indien van toepassing link afsluiten
if ($day == $dayContains[0]['dag']) {
echo '</a></td>';
} else {
echo '</td>';
}
// De rij op zondag (dag is nul) eindigen
if ($dagindeweek == 0) {
echo '</tr>';
}
}
// Tabel afsluiten
echo '</table>';
// Activiteiten weergeven
if(is_numeric($_GET['day'])) {
for ($j = 0; $j < $count; $j++) {
if ($dayContains[$j]['dag'] == $_GET['day']) {
echo $dayContains[$j]['dag'] . $dayContains[$j]['activiteit'] . ' <br />';
}
}
}
// Creëren blader mogelijkheid naar vorige maand, wordt niet gecontroleerd op toegestane jaren
if ($maand == 1) {
echo '<a href="?maand=12&jaar='.($jaar-1).'"><< Vorige</a>';
} else {
echo '<a href="?maand='.($maand-1).'&jaar='.$jaar.'"><< Vorige</a>';
}
// Creëren blader mogelijkheid naar volgende maand, wordt niet gecontroleerd op toegestane jaren
if ($maand == 12) {
echo ' | <a href="?maand=1&jaar='.($jaar+1).'">Volgende >></a>';
} else {
echo ' | <a href="?maand='.($maand+1).'&jaar='.$jaar.'">Volgende >></a>';
}
?>
Ik zie overigens bij jou 1 selectiequery staan, die kan ook nog anders. (WHERE MONTH(datum) = $maandnummer AND YEAR(datum) = $jaarnummer) Dat is de manier zoals het eigenlijk hoort.
Je selecteerd een hele maand, maar waarom groepeer je het dan niet op dag, dat zou volgens mij al moeten werken.
De GROUP BY functie.
ik gebruik bij arjans kalender wel voor elke dag een select, en ik heb er niet echt problemen mee verder.....
Men mag meerdere dingen per dag inplannen. Kan bijv. zijn dat ze 's avonds training geven en er die dag ook een belangrijke verjaardag is, om maar wat te noemen.
Ga die query ook nog wel even aanpassen met MONTH() en YEAR().
Edit:
Het is inmiddels gelukt.
Gewijzigd op 01/01/1970 01:00:00 door Vincent