Liebe Forum-Mitglieder,
diese Community hat mir während der letzten Jahren mehrmals richtig gut weitergeholfen. Deshalb möchte ich auch mal etwas zurück geben/schenken.
Schaut euch mal www.kakivi.de an. Dort findet man in der rechten Kontext-Spalte "Unsere KAKIVI Geburtstagskinder". Da wird mit Tag, Monat, Vorname und Alter, ganz schön angezeigt wer in den nächsten 14 Tagen Gebutstag hat. Heutige Geburtstage werden fett dargestellt. Und man kann diesen standardmäßigen 14 Tage Vorschau-Termin auch auf 30/60/90/180/365 Tage setzen. Auch evtl. gestrige Geburtstage werden dargestellt.
Das Skript heißt "view_geb.php und wird über iframe eingebunden mit:
Das Original-Script ist JavaScript-basiert, client-based und von Michael Dufek, Österreich. Da dies aber ein mehr als 900 Zeilen !!! Script ist (es dauert ............ es dauert ............. es dauert .................) habe ich mir etwas anderes einfallen lassen.
Ich habe, mit der guten Idee von Michael im Hinterkopf, ein kleines PHP/HTML Skript geschrieben, das mittels einer ausgeklügelten Query eine MySQL-Database Abfrage macht und nur 115 Zeilen""kurz" ist, wobei der eigentliche Script-Kern ein 3-Zeiler ist. Das funktioniert rasant schneller.
Database Records sind:
- Vorname
- Nachname
- Geburtstag
- ID
Weil die Damen im Kindergarten keine Ahnung von PHP-Admin haben habe ich mit Appgini ein Modul dargestellt, womit man die Daten in der Datenbank ganz einfach pflegen kann.
Das view_geb.php Script:
<style type="text/css"> div { font-family: Verdana; padding: 0px; border: 0px solid #000000; } div.txt1 { text-align: center; font-weight: bold; margin-top: 12px; margin-bottom: 6px; font-size: 70%; color:#9A0000; } div.txt2 { text-align: left; font-weight: normal; margin-bottom: 2px; margin-left: -8px; margin-right: -4px; font-size: 70%; color:#000000; } div.txt3 { text-align: center; font-weight: bold; margin-top: 12px; margin-bottom: 2px; font-size: 70%; color:#000000; } .txt4 { font-weight: normal; font-size: 70%; margin-top: 2px; margin-left: 40px; color:#000000; } </style> <?php //Set database access credentials $name = '..........; $user = '..........'; $password = '..........'; $host = '..........'; //Set table name $tname = 'geburtstage'; //Set variables for drop down menu $zukunft = $_GET['zukunft']; $tage = $_GET['tage']; /*Open connection to our database, use use the info from the config file.*/ $link = mysqli_connect($host, $user, $password, $name); if (!$link) { die('Could not connect: ' . mysql_error()); } /* MYSQL query on: birthdays to come */ $results = mysqli_query($link,"select * FROM ( select ID, curdate() AS today, DATE_FORMAT(curdate(),'%d') AS d_T, DATE_FORMAT(curdate(),'%m') AS m_T, DATE_FORMAT(geburtstag,'%d') AS d_G, DATE_FORMAT(geburtstag,'%m') AS m_G, vorname, nachname, geburtstag, (YEAR(CURRENT_TIMESTAMP) - YEAR(geburtstag) +1 - CASE WHEN MONTH(CURRENT_TIMESTAMP) < MONTH(geburtstag) THEN 1 WHEN MONTH(CURRENT_TIMESTAMP) > MONTH(geburtstag) THEN 0 WHEN DAY(CURRENT_TIMESTAMP) <= DAY(geburtstag) THEN 1 ELSE 0 END) AS age, datediff(DATE_FORMAT(geburtstag,concat('%',YEAR(CURDATE()),'-%m-%d')),NOW()) AS no_of_days FROM geburtstage union select ID, curdate() AS today, DATE_FORMAT(curdate(),'%d') AS d_T, DATE_FORMAT(curdate(),'%m') AS m_T, DATE_FORMAT(geburtstag,'%d') AS d_G, DATE_FORMAT(geburtstag,'%m') AS m_G, vorname, nachname, geburtstag, (YEAR(CURRENT_TIMESTAMP) - YEAR(geburtstag) +1 - CASE WHEN MONTH(CURRENT_TIMESTAMP) < MONTH(geburtstag) THEN 1 WHEN MONTH(CURRENT_TIMESTAMP) > MONTH(geburtstag) THEN 0 WHEN DAY(CURRENT_TIMESTAMP) <= DAY(geburtstag) THEN 1 ELSE 0 END) AS age, datediff(DATE_FORMAT(geburtstag,concat('%',(YEAR(CURDATE())+1),'-%m-%d')),NOW()) AS no_of_days FROM geburtstage) AS upcomingbirthday WHERE no_of_days >= 0 AND no_of_days <= (14 + \"{$_POST['tage']}\") GROUP by ID ORDER BY (m_G, d_G) < (m_T, d_T), m_G, d_G, nachname, geburtstag desc, age"); /* MYSQL query on: birthday was yesterday */ $results_y = mysqli_query($link,"select * FROM ( select ID, curdate() AS today, DATE_FORMAT(curdate(),'%d') AS d_T, DATE_FORMAT(curdate(),'%m') AS m_T, DATE_FORMAT(geburtstag,'%d') AS d_G, DATE_FORMAT(geburtstag,'%m') AS m_G, vorname, nachname, geburtstag, (YEAR(CURRENT_TIMESTAMP) - YEAR(geburtstag) - CASE WHEN MONTH(CURRENT_TIMESTAMP) < MONTH(geburtstag) THEN 1 WHEN MONTH(CURRENT_TIMESTAMP) > MONTH(geburtstag) THEN 0 WHEN DAY(CURRENT_TIMESTAMP) <= DAY(geburtstag) THEN 1 ELSE 0 END) AS age, datediff(DATE_FORMAT(geburtstag,concat('%',YEAR(CURDATE()),'-%m-%d')),NOW()) AS no_of_days FROM geburtstage union select ID, curdate() AS today, DATE_FORMAT(curdate(),'%d') AS d_T, DATE_FORMAT(curdate(),'%m') AS m_T, DATE_FORMAT(geburtstag,'%d') AS d_G, DATE_FORMAT(geburtstag,'%m') AS m_G, vorname, nachname, geburtstag, (YEAR(CURRENT_TIMESTAMP) - YEAR(geburtstag) - CASE WHEN MONTH(CURRENT_TIMESTAMP) < MONTH(geburtstag) THEN 1 WHEN MONTH(CURRENT_TIMESTAMP) > MONTH(geburtstag) THEN 0 WHEN DAY(CURRENT_TIMESTAMP) <= DAY(geburtstag) THEN 1 ELSE 0 END) AS age, datediff(DATE_FORMAT(geburtstag,concat('%',(YEAR(CURDATE())+1),'-%m-%d')),NOW()) AS no_of_days FROM geburtstage) AS upcomingbirthday WHERE no_of_days >= -1 AND no_of_days < 0 GROUP by ID ORDER BY (m_G, d_G) < (m_T, d_T), m_G, d_G, nachname, geburtstag desc, age"); mysql_select_db($geburtstage, $link); if (!$results) { die('Invalid query: ' . mysql_error()); } if (!$results_y) { die('Invalid query: ' . mysql_error()); } echo '<div class="txt1">Unsere KAKIVI Geburtstagskinder</div>'; while($result = mysqli_fetch_array( $results )){ echo '<div class="txt2">'; if ($result['d_T'] == $result['d_G'] && $result['m_T'] == $result['m_G']){ echo '<b>'; echo $result['d_G'] ; echo'.'; echo $result['m_G'] ; echo' '; echo $result['vorname'] ; echo' ('; echo $result['age'] ; echo ')' ; echo '</b><br>'; } else { echo $result['d_G'] ; echo'.'; echo $result['m_G'] ; echo' '; echo $result['vorname'] ; echo ' (' ; echo $result['age'] ; echo ')<br>' ; } echo '</div>'; } echo '<div class="txt1">Gestrige Geburtstagskinder</div>'; echo '<div class="txt2">'; while($result_2 = mysqli_fetch_array( $results_y )){ echo $result_2['d_G'] ; echo'.'; echo $result_2['m_G'] ; echo'. '; echo $result_2['vorname'] ; echo ' (' ; echo $result_2['age'] ; echo ')<br>' ; } echo '</div>'; mysqli_close($link); ?> <div class="txt3">Tage in die Zukunft</div> <form align=center method='POST' name='zukunft'> <select class="txt4" onchange='this.form.submit()' name="tage"> <option selected="disabled">---</option> <option value="-7">7</option> <option value="0">14</option> <option value="7">21</option> <option value="46">60</option> <option value="76">90</option> <option value="166">180</option> <option value="351">365</option> </select> </form>
Wer noch weitere Fragen und/oder Bemerkungen hat, kann sich gerne bei mir melden.
Viele Grüße,
Piotr