Beste mensen,
ik dacht me hier toch maar eens aan te melden om sommige scripts toch eens door anderen te laten beoordelen. Volgens mij maak ik vaker denkfouten waardoor mijn scripts onnodig lang en vele malen eenvoudiger kunnen. Hierbij een voorbeeld.
Wat wil ik:
een script dat alle gebruikers uit een DB toont welke binnen 7 dagen jarig zijn
Wat heb ik:
onderstaand script wat wel werkt maar enkele beperkingen kent.
<?
$now = time();
$dag = strftime ("%d", $now);
$maand = strftime ("%m", $now);
$jaar = strftime ("%Y", $now);
$dagen[1] = 31;
if ($jaar == 2012 || $jaar == 2016 || $jaar == 2020){
$dagen[2] = 29;
} else {
$dagen[2] = 28;
}
$dagen[3] = 31;
$dagen[4] = 30;
$dagen[5] = 31;
$dagen[6] = 30;
$dagen[7] = 31;
$dagen[8] = 31;
$dagen[9] = 30;
$dagen[10] = 31;
$dagen[11] = 30;
$dagen[12] = 31;
for ($i = 1;$i <= 12;$i++){
if ($i < 10){
$mm = "0". $i;
}
if ($mm == $maand){
$dpm = $dagen[$i];
}
}
$rest_dgn = $dpm - $dag;
if ($rest_dgn >= 7){
$max_dag = $dag + 7;
} else {
$verschil = 7 - $rest_dgn;
$max_dag = $verschil;
$maand = $maand + 1;
}
if ($max_dag < 10){
$max_dag = "0". $max_dag;
}
if ($maand < 10){
$maand = "0". $maand;
}
$max_datum = $max_dag ."-". $maand ."-". $jaar;
list($day, $month, $year) = explode('-', $max_datum);
$max_datum = mktime(0, 0, 0, $month, $day, $year);
$sql4 = "SELECT * FROM ledenlijst ORDER BY geb_datum ASC";
$res4 = mysql_query($sql4);
setlocale (LC_ALL, "nl_NL");
$maand_nu = strftime ("%m", $now);
while ($data4 = mysql_fetch_array($res4)) {
$verjaarmaand = strftime ("%m", $data4['geb_datum']);
if (($verjaarmaand == $maand_nu) || ($verjaarmaand == $maand)){
$id = $data4['id'];
$voornaam = $data4['voornaam'];
$achternaam = $data4['achternaam'];
$meisjesnaam = $data4['meisjesnaam'];
$verjaardag = strftime ("%d", $data4['geb_datum']);
$verjaardatum = $verjaardag ."-". $verjaarmaand ."-". $jaar;
list($day, $month, $year) = explode('-', $verjaardatum);
$verjaardatum = mktime(0, 0, 0, $month, $day, $year);
if (($verjaardatum >= $now) && ($verjaardatum <= $max_datum)) {
if ($meisjesnaam != ""){
$achternaam = $achternaam ."-". $meisjesnaam;
}
?>
Bovenstaande werkt, maar nu lijkt mij dat de verzonnen manier voor het correct uitrekenen van de maximale weergave datum veel eenvoudiger moet kunnen. Daarnaast denk ik dat er nog wel meer schort aan mijn manier van het maken van scripts en dat dit te veel SQL of PHP berekening vraagt dan uberhaupt nodig.
Daarnaast doet het script 3 dingen die ik graag zou zien niet, namelijk:
- geboortedata ordenen op dag in de weergave (10-10-10 is nu eenmaal later dan 10-10-08)
- het is niet dynamisch naar schrikkeljaren toe
- het laat jarigen niet zien op de dag zelf (datum staat op 0:00 uur van die dag) er hij moet dus $now - huidige_tijd o.i.d. doen
Dit alles zou ik wel kunnen aanpassen door voort te bouwen op het script maar ik denk dat mijn denkwijze gewoonweg verkeerd is.
Ik hoor graag jullie mening hierover.
6.051 views