Facebook Button Twitter Button YouTube Button RSS Button

IT-Runde

Geburtstage mit PHP anzeigen lassen

  • Geburtstage mit PHP anzeigen lassen

    Happy Birthday! Ok, ich habe nicht Geburtstag, doch man will doch immer gerne wissen, wer als nächstes von den Bekannten & Verwandten Geburtstag hat. Auch ich wollte in einem Intranet alle heutigen, letzten und kommenden Geburtstage anzeigen lassen. Eigentlich kein Problem, die Geburtsdaten mit Vor- & Nachnamen in die Datenbank legen und per PHP abfragen. So einfach habe ich es mir auch vorgestellt, doch was man dabei beachten muss sind die Schaltjahre und die Jahresübergänge welche für einige Probleme sorgen. Vor allem der Übergang ins nächste Jahr ist schwierig, da man normalerweise mit Monat und Tagen arbeiten könnte, am Jahresende aber auch schon das nächste Jahr abgefragt werden muss, bei verschiedenen Jahreszahlen aber nicht so einfach ist. Habe dazu einiges gelesen und auch sehr lange und umständliche Scripte gesehen – Das war alles nichts für mich, ich wollte es logisch, klein und funktionierend.

    Ein weiterer Knackpunkt ist natürlich, dass alle Geburtstage in der Datenbank standardmäßig nicht im Format DD.MM.YYYY, sondern im Date Format (Also YYYY-MM-DD) abgespeichert sind und sie vor Benutzung natürlich erst aufgeschlüsselt werden müssen. Nach einiger Suche habe ich dann in einem Forum den Codeschnipsel gefunden, wie man die Tage zum Geburtstag ausrechnen kann:

    1
    
    (geburtsdatum + INTERVAL (YEAR(CURRENT_DATE) - YEAR(geburtsdatum) + IF(DATE_FORMAT(CURRENT_DATE, \"%m%d\") > DATE_FORMAT(geburtsdatum, \"%m%d\"), 1, 0)) YEAR, CURRENT_DATE)

    Selbst ist der Mann, deswegen habe ich mir mithilfe des Codeschnipsels Gedanken gemacht, wie ich am besten eine Liste der Geburtstage anzeigen lasse. Der SQL-Code war schnell programmiert und ich konnte sowohl die kommenden drei, letzten drei und heutigen Geburtstage ausgeben lassen – Ohne größere Probleme ;). Folgender Code ist dabei raus gekommen:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
    <?php
    function datumdeutsch($datum) {
    $d = explode("-",$datum);
    return sprintf("%02d.%02d.%04d", $d[2], $d[1], $d[0]);
    }
     
    function aktuellesalter($geburtsdatum) {
    $datum = explode('-', "$geburtsdatum"); 
    return date('Y') - $datum[0] - intval(date('n') < $datum[1] || date('n') == $datum[1] && date('j') < $datum[2]);
    }
     
    echo '<b>Letzte Geburtstage:</b><br/>';
    $result=mysql_query("
    SELECT
        id,
    	nachname,
    	vorname,
    	geburtsdatum,
    	DATEDIFF(geburtsdatum +
    	INTERVAL (YEAR(CURRENT_DATE) - YEAR(geburtsdatum) +
    	IF(DATE_FORMAT(CURRENT_DATE, \"%m%d\") > DATE_FORMAT(geburtsdatum, \"%m%d\"), 1, 0))
    	YEAR, CURRENT_DATE) AS 'tagezumgeburtstag'
    FROM
    	itrunde_tabelle
    WHERE
    	((DATE_FORMAT(geburtsdatum, \"%m%d\")!=DATE_FORMAT(CURRENT_DATE, \"%m%d\"))&&
    	(geburtsdatum!='0000-00-00'))
    ORDER BY
    	tagezumgeburtstag DESC
    Limit 3");
     
    echo '
    <table>
     <thead>
    	<tr>
    		<th>Nachname</th>
    		<th>Vorname</th>
    		<th>Geburtsdatum</th>
    		<th>Alter</th>
    	</tr>
     </thead>
    <tbody>';
     
    while($row=mysql_fetch_array($result))
    {
    echo '<tr>
    <td>'.$row['vorname'].'</td>
    <td>'.$row['nachname'].'</td>
    <td><center>'.datumdeutsch($row['geburtsdatum']).'</center></td>
    <td><center>'.aktuellesalter($row['geburtsdatum']).'</center></td>
    </tr>';
    }
     
    echo '</tbody></table>';
    ?>

    Wie ihr seht, habe ich noch weitere Specials wie das Alter, das Geburtsdatum und ein Profilbild für jeden Datensatz ausgegeben. Der obrige Code zeigt als Beispiel die letzten Geburtstage an, deshalb habe ich in der WHERE-Anweisung auch nochmal festgelegt, dass das Geburtsdatum nicht gleich 0000-00-00 sein darf (Dies ist der Fall, wenn kein Geburtsdatum im Datensatz eingegeben wurde) und das Geburtsdatum ungleich dem heutigen sein muss (Da sonst bei der “Letzte Geburtstage”-Liste auch alle heutigen Geburtstage eingetragen sein würden). Wichtig ist natürlich, dass ihr über dem Code noch eine Verbindung zur Datenbank aufbaut ;).

    Damit ihr euch auch was dadrunter vorstellen könnt, gibts hier mal mein Ergebnis als Screenshot:



    Habe so einen kompakten und funktionierenden Code wie ich ihn nun erzeugt habe sonst niergendwo anders gesehen, deswegen kann er sicher auch dem ein oder anderen von euch helfen. Dann noch ein wenig mit PHP, HTML & CSS gespielt und ihr bekommt so eine schöne Übersicht wie ich sie mir erstellt habt (Mit Features wie z.B. den Profilbildchen :D).

    Viel Spaß beim testen! 😉



  1. #1 Francesco
    28.01.2011 um 00:48 Uhr

    Wow, ich habe gerade rein Interesse halber auch mal danach gegooglet, und man findet wirklich keinen anderen Code der funktioniert (Zumindest auf den ersten beiden Google Seiten) 😀

    Habe mir den Artikel jetzt mal unter die Favoriten gelegt, recht interessant, danke! 😉

    Post ReplyPost Reply
  2. #2 Christian
    28.01.2011 um 21:35 Uhr

    @Jeffrey: Das man das für Verwandte & Bekannte benutzen kann war auch nur ein Beispiel ;). Gedacht ist es natürlich für vorhandene Scripte mit Datenbanken. z.B. Foren, Portale, Blogs etc. wo gegebenenfalls Datensätze über die Benutzer geführt werden.

    Post ReplyPost Reply
  3. #3 Jeffrey
    28.01.2011 um 21:25 Uhr

    Ich verwende hierzu ganz einfach den Google Kalender mit der Geburtstags-Funktion.

    Da muss ich nicht noch separat Scripte einsetzen, wenn ich den Google Calender eh schon benutze.

    Post ReplyPost Reply
  4. #4 Mario
    09.04.2011 um 11:07 Uhr

    Hi, tolles Script,
    hab nur ein Problem, ich habe meine Geburtstage als String im Format tt.mm.jjjj in der DB gespeichert.
    Wie bekomme ich das Script jetzt trotzdem zum laufen ???

    Post ReplyPost Reply
  5. #5 Mario
    09.04.2011 um 11:59 Uhr

    Gibt es eventuell auch den ganzen Code des Scripts, ich komme mit der Sortierung

    letzte 3 – heute – nächtse 3

    nicht klar.

    Thx

    Post ReplyPost Reply
Kommentar schreiben

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.