Sluit inschrijvingen 2 WERKdagen voor cursus
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
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;
}
$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.
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.
Dat kan met de functie 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.
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.
zou al een heel stuk helpen (nog afgezien van dat je natuurlijk met weinig extra code ook in de query een escape kunt uitvoeren.
Bedankt voor jullie suggesties. Dit heeft me al aardig op de goede weg geholpen. Ik zal de uiteindelijke oplossing naar jullie terugkoppelen. Thanks!