Sluit inschrijvingen 2 WERKdagen voor cursus

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Salvatore Luciano

Salvatore Luciano

21/04/2016 10:33:22
Quote Anchor link
Ik heb in mijn database cursussen staan die gegeven worden op een bepaalde datum. Op dit moment toon ik alleen de cursussen waarvan het nog langer dan twee dagen duurt voordat ze gegeven worden. Dit doe ik d.m.v. deze code:

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
    global $db;
    $int_id = $_GET['id'];
    $_SESSION['IT_cur'] = $int_id;

    $int_inschrijf_dagen = getVariabele("sluit_inschrijving"); //ingesteld als 2
    $arr_datum = getdate();
    $int_minimum_datum = mktime(0,0,0,$arr_datum['mon'],$arr_datum['mday'],$arr_datum['year']) + ($int_inschrijf_dagen * 60 * 60 * 24) - (60 * 60 * 1);

        //Hier halen we de cursussen op die getoond moeten worden
    $str_sql = "SELECT * FROM cursusdata WHERE cur_id = $int_id AND cd_datum > $int_minimum_datum ORDER BY cd_datum ASC";
    $resultaat = $db->Query($str_sql);
    while ($rij = $db->Fetch($resultaat)){
        $arr_cursusdata[] = $rij;
}


Nu wil ik voortaan niet twee dagen van te voren de cursus niet meer tonen maar twee WERKdagen van te voren niet meer. Dus stel een cursus wordt op dinsdag 26 april gegeven, dan moet de cursus getoond worden tot vrijdag 22 april. En als er een cursus op 29 april wordt gegeven, dan moet de cursus worden getoond tot woensdag 27 april.

Zelf kom ik er helaas niet uit..

Ik ben op de hoogte van de security hole met de omvang van een boeing 737.
 
PHP hulp

PHP hulp

26/12/2024 23:22:39
 
Ward van der Put
Moderator

Ward van der Put

21/04/2016 11:12:49
Quote Anchor link
Dat kan met de functie DATEDIFF() van MySQL: DATEDIFF(x,y) retourneert het verschil x – y uitgedrukt in dagen.

Het verschil beperken tot twee werkdagen is een stuk lastiger. Dan moet je om te beginnen weten wat zaterdagen en zondagen zijn en daaraan wettelijke vakantie- en feestdagen plus eventuele extra vrije dagen volgens bijvoorbeeld een CAO toevoegen. Aangezien in veel organisaties niet iedereen op hetzelfde moment op vakantie is, moet je dat mogelijk zelfs per persoon vastleggen, bijvoorbeeld per cursusleider.

Ik denk dat ik het zelf deels anders zou oplossen. Voeg een TINYINT(1)-kolom `inschrijving_gesloten` toe aan de tabel die aangeeft of een inschrijving is gesloten. Die flag zet je dan op 0 voor false als inschrijven nog mogelijk is en op 1 voor true als de inschrijving gesloten is. Je hoeft die kolom dan maar één keer per dag te updaten en de andere query's worden met een WHERE inschrijving_gesloten = 0 zonder datumfuncties veel sneller. Bovendien heb je dan de mogelijkheid om handmatig een inschrijving eerder te sluiten, mocht dat eens nodig zijn wanneer een cursus is volgeboekt.
 
Ivo P

Ivo P

21/04/2016 11:19:11
Quote Anchor link
ik zou dan kiezen voor een sluitingsdatum van het type DATE of DATETIME.

Dan kun je direct bij het aanmaken van de cursus in de database al constateren dat de cursus van 26 april al op de 22e of 23e sluit.

Bovendien kun je ivm extra vrije dagen die datum ook vervroegen of misschien wel verlaten.
Handmatig zet je een cursus dicht middels gesloten per NOW() in die betreffende kolom.

De lastige bepalig "wat is de datum die 2 werkdagen voor de cursusdag ligt", hoe je dan alleen maar bij de invoer uit te voeren.

Toevoeging op 21/04/2016 11:20:48:

wbt je beveiliging.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $int_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); ?>


zou al een heel stuk helpen (nog afgezien van dat je natuurlijk met weinig extra code ook in de query een escape kunt uitvoeren.
 
Salvatore Luciano

Salvatore Luciano

21/04/2016 11:51:36
Quote Anchor link
Bedankt voor jullie suggesties. Dit heeft me al aardig op de goede weg geholpen. Ik zal de uiteindelijke oplossing naar jullie terugkoppelen. Thanks!
 



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.