Planbord maken in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim Klein

Tim Klein

18/05/2015 16:05:49
Quote Anchor link
Hallo allen,

Ik bezig om online software te maken. De software ontwikkel ik voor campings, en moet alle boekingen in het systeem zetten. Alle boekingen worden in eerste instantie handmatig in het systeem gezet. Nu weet ik wel hoe je een datum in de database opslaat, alleen niet hoe je dit per dag doet.
Er moet namelijk per standplaats een rij komen in een weer te geven table, die rood wordt als er gebookt is.
Nu wil ik het liefste hier ook nog een <a href> aan hangen, zodat je naar de booking doorgaat als er gebookt is.

Een voorbeeldje van hoe dit er uit ziet: http://www.uwboeking.com/images/Planbord.jpg

Kan iemand dit voor mij maken/helpen?

Alvast bedankt!
 
PHP hulp

PHP hulp

24/11/2024 01:23:52
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/05/2015 18:27:33
Quote Anchor link
Ik heb zoiets in het verleden gemaakt.

Persoonlijk zou ik de reserveringen met een start datetime en eind datetime in een tabel plaatsen.

Mogelijk ziet je tabel er zo uit:

-id
-start
-eind
-plaats_nr
-klant_id

Wanneer je je planboord op het scherm wilt toveren laat deze altijd een bepaalde periode zien. Die van jou laat de periode van één maand zien. Om precies te zijn: November 2013. Laten we deze maand als voorbeeld pakken.

Je kunt dus beginnen je query zo op te stellen dat je alleen die reserveringen er uit pakt die:
- beginnen VOOR het EINDE van de maand (kleiner dan 1-12-2013)
EN
- eindigen NA het BEGIN van de maand (groter dan of gelijk aan 1-11-2013)

Indien je slechts bijvoorbeeld alleen data wilt laten zien van één klant of één plaatsnummer dan kun je daar ook op filteren uiteraard.

Alleen zo krijg je alle reserveringen die gedeeltelijk of helemaal in de maand november 2013 vallen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM reservations WHERE start < '2013-12-01' AND eind >= '2013-11-01'


De rijen uit de $result stop je wederom in een array zodat je een twee dimensionale array krijgt.

Zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$reservations
= array(
    array(
        'id' => 1,
        'start' => '15-11-2013 08:00:00',
        'eind' => '22-11-2013 20:00:00',
        'plaats_nr' => 15,
        'klant_id' => 5,
    ),

    array(
        'id' => 2,
        'start' => '23-11-2013 08:00:00',
        'eind' => '30-11-2013 20:00:00',
        'plaats_nr' => 15,
        'klant_id' => 8,
    ),
);

?>


Dan ga je je overzicht maken. Ik stel me zo voor dat je bij 1 nov 2013 begint en daarna 2 nov 2013 en zo door tot 30 nov 2013.

Voor iedere dag loop je dan door de resultaten. valt de dag tussen de start en eind datum dan een record dan
moet je deze een als bezet bestempelen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
for($dag = 1 ; $dag < 30 ; $dag++)
{

    foreach($reservations as $reservation)
    {

        $start = new DateTime($reservation['start');
        $eind = new DateTime($reservation['eind');
        $now = new DateTime($dag . '-11-2013');
        if($now->diff($start)->invert)
            echo 'reservering begint later dan deze dag';
        // etc
    }
}

?>


Sorry geen tijd om het helemaal voor je uit te schrijven, hoop dat je er zo mee verder kan
Gewijzigd op 18/05/2015 18:44:40 door Frank Nietbelangrijk
 
Tim Klein

Tim Klein

18/05/2015 18:52:06
Quote Anchor link
Hier kan ik zeker weten wat mee!
Dank je wel!

Tim
 

18/05/2015 22:27:44
Quote Anchor link
DateTime() moet afgeraden worden voor kalenderapplicaties, het is namelijk supertraag. Datumberekeningen kun je beter door een database laten afhandelen, dat scheelt een factor 1000 in snelheid. Dat is zeker merkbaar als je het ook op een Synology NAS oid wilt laten draaien. DateTime() wil je dan echt alleen maar voor enkele ad-hoc berekeningen gebruiken, NIET in een lus!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.