Agenda
Ik ben bezig met een agenda te maken in PHP, nu werkt inprincipe alles, geeft de juiste dagen weer en lege ruimtes als de eerste dag van de maand op een andere dag valt, etc.
Maar nu wil ik ook een optie om bij een bepaalde dag een afspraak neer te zetten.
Ik heb voor het testen even een DB en tabel aangemaakt, die wat gevuld met gegevens, alleen nu heb ik het probleem bij het laten zien van de afspraken op de dagen.
Als ik bijvoorbeeld, op de 17de in Januari een afspraak heb, moet dat worden laten zien.
Nu lukt het mij wel om 1 afspraak te laten zien, alleen zodra er meerder afspraken zijn, gaat dit mis.
Misschien is het verhaal niet helemaal duidelijk, ik zal voor de duidelijkheid ook wat PHP code mee sturen.
PHP:
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
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
<?php
//alle maanden in array zetten
//wordt later gebruikt
$maanden = array("Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","October","November","December");
//pak de maand en datum uit de get global
//maar eerst kijken of ze wel bestaan
if(!isset($_GET['maand']) && !isset($_GET['jaar'])){
$_GET['maand'] = date('n');
$_GET['jaar'] = date('Y');
}
//stukje beveiliging, globale get variabeles moeten int zijn
if(is_numeric($_GET['maand']) && is_numeric($_GET['jaar'])){
//volgende en vorige berekeningen maken
$maand = $_GET['maand'];
$jaar = $_GET['jaar'];
//geef maand volgende en vorige
$volgende_maand = $maand + 1;
$vorige_maand = $maand - 1;
//geef jaar volgende en vorige, NIET BEREKENEN
$volgende_jaar = $jaar;
$vorige_jaar = $jaar;
//als de maand 0 is dan wordt maand 12 en jaar -1
if($vorige_maand == 0){
$vorige_maand = 12;
$vorige_jaar = $jaar-1;
}
//kijk waar maand op is, dit beinvloed jaar variabele
if($volgende_maand == 13){
$volgende_maand = 1;
$volgende_jaar = $jaar + 1;
}
//echo maand en jaar, $maand komt uit de array $maanden, $maanden telt 11, $maand telt 12, dus -1
echo '
<center><h1>' . $maanden[$maand - 1] . ' ' . $jaar .'</h1></center>
<table colspan=7 align="center" height=500 width=800 border=1>
<tr>
<td><b>Zondag</b></td>
<td><b>Maandag</b></td>
<td><b>Dinsdag</b></td>
<td><b>Woensdag</b></td>
<td><b>Donderdag</b></td>
<td><b>Vrijdag</b></td>
<td><b>Zaterdag</b></td>
</tr>
';
//geef de unix timestamp voor de maand en jaar van nu
$tijdnu = mktime(0,0,0,$maand,1,$jaar);
//kijk hoeveel dagen er maximaal in de maand zitten (bijv; 31,30)
$max_aantal_dagen = date('t', $tijdnu);
//geef de maand van vandaag, (KOMT IN ASSOC ARRAY), wday nodig
$datum_maand = getdate($tijdnu);
//pak de begin dag, wday geeft nummers van 0 tot 6, 0 voor zondag, 6 voor zaterdag
//bepaal de start dag van de maand
$start_dag_maand = $datum_maand['wday'];
//pak de datum van vandaag, alleen de dag
$datum_vandaag = date('d');
mysql_connect('xxx','xxx','xxx') or die(mysql_error());
mysql_select_db('xxx') or die(mysql_error());
/* ----------------------------------------------------------------- */
$query = mysql_query("SELECT * FROM afspraken") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$naam = $row['naam'];
$omschrijving = $row['omschrijving'];
$date = $row['datum'];
$exp = explode('-', $date);
}
/* ------------------------------------------------------------------ */
echo '<br/>';
print_r($exp);
//begin for loop om de maand structuur op te zetten
for($i = 0; $i<($max_aantal_dagen + $start_dag_maand); $i++){
//als er geen rest overblijft, dus 0, dan is er een nieuwe week begonnen
//($datum_maan['wday'] = 0, zondag - 6, zaterdag
// 0 = begin van de week
// 6 = einde van de week
if($i % 7 == 0){
echo '<tr>';
}
//als i kleiner is dan start dag, dan vallen die dagen niet in de maand
//wat dus betekend dat het een leeg vakje nodig heeft
if($i < $start_dag_maand){
echo '<td> </td>';
//als de dag gelijk is aan de berekening, dan maak die dag bold(<b></b>)
}elseif(($i - $start_dag_maand + 1) == $datum_vandaag){
echo '<td><b><u>' . ($i - $start_dag_maand + 1) . '</u></b></td>';
//zo niet, dan moeten de dagen van de maand er in komen te staan
//deze dagen worden niet bold (<b></b>)
//voorbeeld van berekening, $i = 5, $start_dag_maand = 5
//berekening wordt, 5 - 5 + 1, = 1, dus dat is de eerste dag van de maand
}else{
echo '<td>';
if($exp[2] == ($i - $start_dag_maand + 1) && $exp[1] == ($maand) && $exp[0] ==($jaar)){
echo ($i - $start_dag_maand + 1) . '<br><font size=1>' . $naam . '<br>' . $omschrijving . '</font>';
}else{
echo ($i - $start_dag_maand + 1);
}
echo '</td>';
}
//als $i op een rest van 6 uitkomt, dan moet de rij afgesloten worden
//($datum_maand['wday']) = 0, zondag - 6, zaterdag.
// 6 = einde van de week, 0 is begin van de week
if($i % 7 == 6){
echo '</tr>';
}
}
//uiteindelijk de tabel afsluiten
echo '</table>';
echo '
<table align="center">
<tr>
<td><a href="agenda.php?maand='. $vorige_maand . '&jaar='. $vorige_jaar. '">Vorige</a></td>
<td><a href="agenda.php?maand='.$volgende_maand.'&jaar='.$volgende_jaar.'">Volgende</a></td>
</tr>
</table>
';
//globale get variabele is geen nummer, toegang geweigerd
}else{
echo '<br>Toegang geweigerd!';
}
?>
//alle maanden in array zetten
//wordt later gebruikt
$maanden = array("Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","October","November","December");
//pak de maand en datum uit de get global
//maar eerst kijken of ze wel bestaan
if(!isset($_GET['maand']) && !isset($_GET['jaar'])){
$_GET['maand'] = date('n');
$_GET['jaar'] = date('Y');
}
//stukje beveiliging, globale get variabeles moeten int zijn
if(is_numeric($_GET['maand']) && is_numeric($_GET['jaar'])){
//volgende en vorige berekeningen maken
$maand = $_GET['maand'];
$jaar = $_GET['jaar'];
//geef maand volgende en vorige
$volgende_maand = $maand + 1;
$vorige_maand = $maand - 1;
//geef jaar volgende en vorige, NIET BEREKENEN
$volgende_jaar = $jaar;
$vorige_jaar = $jaar;
//als de maand 0 is dan wordt maand 12 en jaar -1
if($vorige_maand == 0){
$vorige_maand = 12;
$vorige_jaar = $jaar-1;
}
//kijk waar maand op is, dit beinvloed jaar variabele
if($volgende_maand == 13){
$volgende_maand = 1;
$volgende_jaar = $jaar + 1;
}
//echo maand en jaar, $maand komt uit de array $maanden, $maanden telt 11, $maand telt 12, dus -1
echo '
<center><h1>' . $maanden[$maand - 1] . ' ' . $jaar .'</h1></center>
<table colspan=7 align="center" height=500 width=800 border=1>
<tr>
<td><b>Zondag</b></td>
<td><b>Maandag</b></td>
<td><b>Dinsdag</b></td>
<td><b>Woensdag</b></td>
<td><b>Donderdag</b></td>
<td><b>Vrijdag</b></td>
<td><b>Zaterdag</b></td>
</tr>
';
//geef de unix timestamp voor de maand en jaar van nu
$tijdnu = mktime(0,0,0,$maand,1,$jaar);
//kijk hoeveel dagen er maximaal in de maand zitten (bijv; 31,30)
$max_aantal_dagen = date('t', $tijdnu);
//geef de maand van vandaag, (KOMT IN ASSOC ARRAY), wday nodig
$datum_maand = getdate($tijdnu);
//pak de begin dag, wday geeft nummers van 0 tot 6, 0 voor zondag, 6 voor zaterdag
//bepaal de start dag van de maand
$start_dag_maand = $datum_maand['wday'];
//pak de datum van vandaag, alleen de dag
$datum_vandaag = date('d');
mysql_connect('xxx','xxx','xxx') or die(mysql_error());
mysql_select_db('xxx') or die(mysql_error());
/* ----------------------------------------------------------------- */
$query = mysql_query("SELECT * FROM afspraken") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$naam = $row['naam'];
$omschrijving = $row['omschrijving'];
$date = $row['datum'];
$exp = explode('-', $date);
}
/* ------------------------------------------------------------------ */
echo '<br/>';
print_r($exp);
//begin for loop om de maand structuur op te zetten
for($i = 0; $i<($max_aantal_dagen + $start_dag_maand); $i++){
//als er geen rest overblijft, dus 0, dan is er een nieuwe week begonnen
//($datum_maan['wday'] = 0, zondag - 6, zaterdag
// 0 = begin van de week
// 6 = einde van de week
if($i % 7 == 0){
echo '<tr>';
}
//als i kleiner is dan start dag, dan vallen die dagen niet in de maand
//wat dus betekend dat het een leeg vakje nodig heeft
if($i < $start_dag_maand){
echo '<td> </td>';
//als de dag gelijk is aan de berekening, dan maak die dag bold(<b></b>)
}elseif(($i - $start_dag_maand + 1) == $datum_vandaag){
echo '<td><b><u>' . ($i - $start_dag_maand + 1) . '</u></b></td>';
//zo niet, dan moeten de dagen van de maand er in komen te staan
//deze dagen worden niet bold (<b></b>)
//voorbeeld van berekening, $i = 5, $start_dag_maand = 5
//berekening wordt, 5 - 5 + 1, = 1, dus dat is de eerste dag van de maand
}else{
echo '<td>';
if($exp[2] == ($i - $start_dag_maand + 1) && $exp[1] == ($maand) && $exp[0] ==($jaar)){
echo ($i - $start_dag_maand + 1) . '<br><font size=1>' . $naam . '<br>' . $omschrijving . '</font>';
}else{
echo ($i - $start_dag_maand + 1);
}
echo '</td>';
}
//als $i op een rest van 6 uitkomt, dan moet de rij afgesloten worden
//($datum_maand['wday']) = 0, zondag - 6, zaterdag.
// 6 = einde van de week, 0 is begin van de week
if($i % 7 == 6){
echo '</tr>';
}
}
//uiteindelijk de tabel afsluiten
echo '</table>';
echo '
<table align="center">
<tr>
<td><a href="agenda.php?maand='. $vorige_maand . '&jaar='. $vorige_jaar. '">Vorige</a></td>
<td><a href="agenda.php?maand='.$volgende_maand.'&jaar='.$volgende_jaar.'">Volgende</a></td>
</tr>
</table>
';
//globale get variabele is geen nummer, toegang geweigerd
}else{
echo '<br>Toegang geweigerd!';
}
?>
En dan de hamvraag: wat gaat er mis? Of wat gaat er niet zoals jij verwacht?
Blanche schreef op 17.01.2010 22:55:
En dan de hamvraag: wat gaat er mis? Of wat gaat er niet zoals jij verwacht?
Excuses, was inderdaad wat te snel.
Het probleem is, ik heb meerdere records in mijn DB staan, dit zijn allemaal verschillende afspraken, op verschillende dagen. Het probleem is dat ik de afspraak wil laten zien op die dagen.
Zoals ik de code er nu heb staan, pakt hij alleen de laatste record en laat die dan ook zien, wat goed is.
Maar nu wil ik dat alle afspraken, die in de DB staan, worden laten zien voor de maand die geselecteerd is.
Alleen weet ik niet hoe ik dit moet doen, ik heb al geprobeerd de hele for loop in de while te zetten, alleen werkt dit overduidelijk niet, omdat er iedere keer een nieuwe tabel wordt gemaakt voor iedere afspraak.
Ik hoop dat het zo wat duidelijker is.
Om de array samen te stellen zou je bijvoorbeeld zoiets kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$afspraken = array();
// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak
$afspraken[$row['datum']][] = $row['titel'];
}
?>
$afspraken = array();
// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak
$afspraken[$row['datum']][] = $row['titel'];
}
?>
Uiteraard zul je dit even moeten aanpassen naar je eigen situatie (juiste kolomnamen e.d.)
Blanche schreef op 17.01.2010 23:18:
Is het dan niet het makkelijkst om eerst alle afspraken voor betreffende maand in een array te zetten en vervolgens bij het opbouwen van de agenda voor elke dag te controleren of er een of meerdere afspraken zijn?
Om de array samen te stellen zou je bijvoorbeeld zoiets kunnen doen:
Uiteraard zul je dit even moeten aanpassen naar je eigen situatie (juiste kolomnamen e.d.)
Om de array samen te stellen zou je bijvoorbeeld zoiets kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$afspraken = array();
// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak
$afspraken[$row['datum']][] = $row['titel'];
}
?>
$afspraken = array();
// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak
$afspraken[$row['datum']][] = $row['titel'];
}
?>
Uiteraard zul je dit even moeten aanpassen naar je eigen situatie (juiste kolomnamen e.d.)
Edit:
Ik keek op naam, en ik had in mijn DB allemaal afspraken gemaakt met de zelfde naam, zodoende ging het fout.
Ik stuit toch gelijk op een probleem, hoe kan ik de items van de array oproepen, ik heb verschillende manieren geprobeerd alleen lukt dit niet. (Misschien kijk ik er over heen)
Print_r van de array werkt overigens wel en geeft ook de juiste resultaten van de DB weer.
Ik keek op naam, en ik had in mijn DB allemaal afspraken gemaakt met de zelfde naam, zodoende ging het fout.
Ik stuit toch gelijk op een probleem, hoe kan ik de items van de array oproepen, ik heb verschillende manieren geprobeerd alleen lukt dit niet. (Misschien kijk ik er over heen)
Print_r van de array werkt overigens wel en geeft ook de juiste resultaten van de DB weer.
Gewijzigd op 01/01/1970 01:00:00 door lol lol
Een waarde uit een array(): echo $array['key']; waar key de tekst van de sleutel is. Bij getallen gewoon het getal nemen: echo $array[3];
Op de manier hoe jij een array hebt opgezet, begrijp ik niet helemaal. Hoewel ik de waarden heb laten zien (print_r) begrijp ik het iets beter, alleen begrijp ik de tweede blokhaak niet;
Hierbij bedoel ik de blokhaken na datum, omdat dit continue een nul geeft.
@Iedereen
Daarnaast krijg ik het nog niet helemaal voor elkaar hoe ik mijn array keys moeten laten echoen.
Dit geeft mijn array;
Code (php)
De code hier boven is wat ik gebruik, $row['datum'] is de datum waarop de afspraak is. $row['omschrijving'] is de omschrijving van de afspraak.
Excuses als ik het helemaal verkeerd heb begrepen.
Gewijzigd op 01/01/1970 01:00:00 door lol lol
lol schreef op 18.01.2010 17:18:
Op die manier komen meerdere afspraken op dezelfde dag, onder dezelfde key te staan. Dat vergemakkelijkt straks het uitlezen.@Blanche
Op de manier hoe jij een array hebt opgezet, begrijp ik niet helemaal. Hoewel ik de waarden heb laten zien (print_r) begrijp ik het iets beter, alleen begrijp ik de tweede blokhaak niet;
Op de manier hoe jij een array hebt opgezet, begrijp ik niet helemaal. Hoewel ik de waarden heb laten zien (print_r) begrijp ik het iets beter, alleen begrijp ik de tweede blokhaak niet;
Zie ook de post van Yearupie.
Ik ben er mee bezig geweest en het werkt perfect!
Alleen nu loop ik toch weer op een probleem, ik kan nu alleen de omschrijving van een afspraak echoen en nu zou ik ook graag de naam van de persoon er bij zetten.
Nu heb ik al een aantal dingen geprobeerd, zo heb ik een nieuwe array gemaakt voor alleen de namen alleen werkte dit niet, tevens heb ik geprobeerd de naam bij de bestaande array in te zetten, alleen krijg ik het niet voor elkaar.
Bijvoorbeeld;
Alleen begrijp ik niet helemaal hoe ik de achternaam er nu kan uit filteren. (Als het uberhaupt kan.)
Dus mijn vraag is, hoe kan ik in de bestaande array die ik nu heb, ook de naam van een persoon er uithalen.
Ik ben even verder gegaan, helaas is het mij niet gelukt om meedere data er uit te halen, zoals hier boven is uitgelegd.
Daarnaast ben ik nu ook bezig om afspraken die op de agenda verschijnen een link van te maken, nu heb ik het eigenlijk altijd zo gedaan:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query = mysql_query("SELECT * FROM Table");
while($row =mysql_fetch_assoc($query)){
echo '<a href="?id="'. $row['ID'] . '">Blaat</a>';
}
?>
$query = mysql_query("SELECT * FROM Table");
while($row =mysql_fetch_assoc($query)){
echo '<a href="?id="'. $row['ID'] . '">Blaat</a>';
}
?>
Het is mij gelukt om de links nu te laten zien, alleen zodra ik 2 afspraken heb wordt de link 2 keer geecho'd.
Bijvoorbeeld:
Afspraak 1: 2010-01-20
Afspraak 2: 2010-01-21
En dan laat hij het als volgt zien;
Op de 20ste staat dit:
Afspraak 1: 2010-01-20
Afspraak 1:2010-01-20
En op de 21ste staat:
Afspraak 2 2010-01-21
Afspraak 2 2010-01-21
Zoals je kunt zien staat nu alles dubbel, alleen heb ik geen idee hoe dit komt.
Relevante code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
foreach($array_afspraken as $datum => $afspraken){
foreach($afspraken as $afspraak){
//als de dag, maand en jaar kloppen, echo de afspraak
$query = mysql_query("SELECT Afspraken_ID, Datum FROM afspraken") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$exp = explode('-', $row['Datum']);
if($exp[2] == ($i - $start_dag_maand + 1) && $exp[1] == ($maand) && $exp[0] ==($jaar)){
echo '<a href="?pagina=view&id=' . $row['Afspraken_ID'] . '">' . substr($afspraak , 0, 5) . '</a><br>';
}
}
}
}
?>
foreach($array_afspraken as $datum => $afspraken){
foreach($afspraken as $afspraak){
//als de dag, maand en jaar kloppen, echo de afspraak
$query = mysql_query("SELECT Afspraken_ID, Datum FROM afspraken") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$exp = explode('-', $row['Datum']);
if($exp[2] == ($i - $start_dag_maand + 1) && $exp[1] == ($maand) && $exp[0] ==($jaar)){
echo '<a href="?pagina=view&id=' . $row['Afspraken_ID'] . '">' . substr($afspraak , 0, 5) . '</a><br>';
}
}
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door lol lol