Php kalender functie
Invoegen bewerken en alles lukt wel, alleen loop ik toch tegen een probleem aan.
Ik wil:
Kalender op weekbasis(weeknummer), in de breedte maandag tot en met zondag, en vertikaal alle kamernummers. In de vakken die ontstaan wil ik indien een kamer gereserveerd is de klantnaam zien (en erop klikken voor meer info en aanpassingen, dat lukt me wel).
Probleem:
Hoe zorg ik dat de kalender weet wanneer een kamer bezet is, oftewel hoe sla ik efficient de bezette dagen op en haal ik die eenvoudig op.
Ik heb een mysqltabel waarin ik de reserveringen opsla.
Geen van alle werkt makkelijk en weet ik niet goed hoe ik dit oplos.
Gewijzigd op 01/10/2013 17:00:18 door M E
http://phphulp.jorendewit.nl/view/1/
Lees die grondig; je zal spontaan al een aantal antwoorden zien. Vooral dan bij "Rekenen met data en tijden".
---
Ik zou dus eerst zien dat je een goed database model hebt.
bv. een tabel 'reserveringen', met velden id (INT), user (INT: id van de user tabel), kamer (INT of een kleine string), binnen (DATETIME), buiten (DATETIME), ...
Trek je nog niets aan van hoe je het wil tonen; eerst moeten de gegevens goed zitten.
---
Het berekenen van welke kamer wanneer gereserveerd is, gebeurt telkens met de SELECT; dus telkens ad hoc berekend, op basis van begin- en eindpunten.
Vergelijkbaar aan de berekeningen die je in die tutorial ziet.
Waar ik mee zit is mijn select query waarmee ik per dag check of de kamer wel of niet bezet is.
stel ik check binnen op vandaag 1 oktober en ga weg op 3 oktober.
Welke query is van toepassing om in de kalender het klantid te tonen?
In de toturial staat bijvoorbeeld dit:
SELECT afspraak
FROM agenda
WHERE tijdstip BETWEEN '2007-07-15 11:00:00' AND '2007-07-15 12:00:00'
Maar ik heb nu natuurlijk 1 veld met inchecktijd en 1 veld met de uitchecktijd. Hoe check ik bijvoorbeeld de datum 2 oktober?
Bedankt!
Mike
Gewijzigd op 01/10/2013 17:30:56 door M E
Misschien zal dat in die berekening moeten komen.
maar de basis is dat je een lus afloopt van elke dag die op de kalender voorkomt. (voor een weekkalender dus slechts 7 iteraties)
Mijn idee zou zijn om met vlaggen te werken in de query.
Iets als (bv. voor deze week, beginnende op maandag)
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT afspraak,
('2013-09-30' BETWEEN incheck AND uitcheck) AS maandag,
('2013-10-01' BETWEEN incheck AND uitcheck) AS dinsdag,
('2013-10-02' BETWEEN incheck AND uitcheck) AS woensdag
...
FROM agenda
WHERE tijdstip BETWEEN '2007-07-15 11:00:00' AND '2007-07-15 12:00:00'
('2013-09-30' BETWEEN incheck AND uitcheck) AS maandag,
('2013-10-01' BETWEEN incheck AND uitcheck) AS dinsdag,
('2013-10-02' BETWEEN incheck AND uitcheck) AS woensdag
...
FROM agenda
WHERE tijdstip BETWEEN '2007-07-15 11:00:00' AND '2007-07-15 12:00:00'
Dan krijg je in de while dus $row['maandag'], $row['dinsdag'], ...
als zijnde 1 (voor true) of 0 (voor false)
We zijn er nog niet volledig, maar ik denk dat je hiermee al wat kan uitproberen
Gewijzigd op 01/10/2013 17:45:54 door Kris Peeters
Waar ik nu mee zit:
Ik heb een weeknummer + jaartal, hoe zet ik die om in data's, ik wil:
$maandag = 2013-09-30
$dinsdag = 2013-10-01
ect.
Toevoeging op 01/10/2013 19:37:42:
Of anders: Hoe zorg ik dat ik door de weken kan lopen? Weeknummer mag, data's is ook goed.
Gewijzigd op 01/10/2013 19:03:50 door M E
ander topic een vraag van ongeveer dezelfde aard.
Je hoeft dan alleen datum van de eerste dag van de week in php te generen. dat kan vrij simpel met DateTime::setIsoDate() -(c)Erwin H.-
In een Je hoeft dan alleen datum van de eerste dag van de week in php te generen. dat kan vrij simpel met DateTime::setIsoDate() -(c)Erwin H.-
Gewijzigd op 01/10/2013 19:42:30 door Ger van Steenderen