Hallo.
Habe ein Problem mit meinem selbstgeschriebenen Geburtstagsskript.
Es funktioniert perfekt - nur der Jahreswechsel und der 1.1. bereitet Probleme.
Zur Funtionsweise:
Der Geburtstags-Newsletter wird immer Sonntagabend per Cronjob versendet. In der E-Mail sind dann die alle User der folgenden Woche aufgelistet. So schaut die Ausgabe in der E-Mail aus:
Der User, welcher am 31.12. angezeigt wird hat am 1.1. Geburtstag und der am 1.1. hat am 2.1..
Hier der PHP-Code:
Ausgabe:
Datenbank: id, nname, vname, gebdat, email
(Format gebdat yyyy-mm-dd)
Würde mich riesig freuen, wenn mir einer helfen kann den Neujahres-Fehler zu eliminieren.
Habe ein Problem mit meinem selbstgeschriebenen Geburtstagsskript.
Es funktioniert perfekt - nur der Jahreswechsel und der 1.1. bereitet Probleme.
Zur Funtionsweise:
Der Geburtstags-Newsletter wird immer Sonntagabend per Cronjob versendet. In der E-Mail sind dann die alle User der folgenden Woche aufgelistet. So schaut die Ausgabe in der E-Mail aus:
Kommende Woche haben folgende User Geburtstag:
Montag 29.12.
-
Dienstag 30.12.
-
Mittwoch 31.12.
Vorname Name (47)
Donnerstag 1.1.
Vorname Name (19)
Freitag 2.1.
-
Samstag 3.1.
Vorname Name (29)
Sonntag 4.1.
-
Der User, welcher am 31.12. angezeigt wird hat am 1.1. Geburtstag und der am 1.1. hat am 2.1..
Hier der PHP-Code:
PHP:
$sql = "SELECT * FROM dbtab order by gebdat asc";
$result = @mysql_query($sql);
if (!$result) {
die('Ungültige Abfrage: ' . mysql_error());
}
$wotage['Montag'] = $wotage['Dienstag'] = $wotage['Mittwoch'] = $wotage['Donnerstag'] = $wotage['Freitag'] = $wotage['Samstag'] = $wotage['Sonntag'] = array();
$email = array();
$tagneu = $monatneu = 0;
$runder = array(20, 30, 40, 50, 60, 70, 80, 90, 100, 110); //die runden werden fett dargestellt
$mon = $die = $mit = $don = $fre = $sam = $son = array();
//datum + 7
$tag7 = intval(date("d")) + 7; // 1 woche
$monat7 = intval(date("m"));
$neuermonat = false;
$monatmax = date("t");
if ($tag7 > date("t")) {
$neuermonat = true;
$tagneu = $tag7 - date("t");
$monatneu = date('n', time()) + 1;
if ($monatneu > 12) { $monatneu = 1; }
}
while ($row = @mysql_fetch_array($result)) {
$exp = explode("-", $row['gebdat']);
$gebdat = $exp[2].".".$exp[1].".".$exp[0];
$tag = $exp[2];
$monat = $exp[1];
if (($row['email']) && ($row['emailja'] == 1)) {
array_push($email, $row['email']);
}
//prüfen wer gebtag hat
if (
( ($tag > date("j")) and ($tag <= $tag7) and ($monat == $monat7) ) // aktueller monat
or
( ($neuermonat == true) and ($monat == $monatneu) and ($tag <= $tagneu) ) // monat + 1
)
{
$gebjahr = (int) substr($row['gebdat'], 0, 4);
$alter = date('Y', time()) - $gebjahr;
if (in_array($alter, $runder)) {
$alter = " <b>(" . $alter . ")</b>";
}
else {
$alter = " (" . $alter . ")";
}
//wochentag ermitteln Son = 0, Mon = 6, ....
$wotag = date("w", mktime(0,0,0, $exp[1], $exp[2], date('Y', time())));
//array der wochentage mit den geburtstagskindern füllen
switch ($wotag)
{
case 1 : $wotage['Montag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 2 : $wotage['Dienstag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 3 : $wotage['Mittwoch'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 4 : $wotage['Donnerstag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 5 : $wotage['Freitag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 6 : $wotage['Samstag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
case 0 : $wotage['Sonntag'][] = $row['vname'] . " " . $row['nname'] . $alter; break;
}
}//if
}//while
Ausgabe:
PHP:
$gebtagmsg="<table>";
$z=0;
$tage=array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
$wochentag1=$wochentag2=$wochentag=array();
for ($i = 1; $i <= 7; $i++) {
if ($i > date("N")) {
$wochentag2[] = $tage[$i-1];
}
else
{
$wochentag1[] = $tage[$i-1];
}
}
$wochentag = array_merge($wochentag2, $wochentag1);
foreach ($wochentag as $value) {
$z++;
$tag = date('d', time()) +$z;
//prüfen ob beim hochzählen nicht die max. tage eines monats überschritten werden
if ($tag > date('t', time())) {
$tag = $tag - date('t', time());
$monat = date('n', time()) + 1;
if ($monat > 12) { $monat = 1; }
}
else
{
$monat = date('n', time()) ;
}
$gebtagmsg .= "<tr><td><b>$value</b> " . $tag. "." . $monat . ".</td></tr>";
if (count($wotage[$value]) > 0) {
foreach ($wotage[$value] as $nr => $inhalt)
{
$gebtagmsg .= "<tr><td> " . $inhalt . "</td></tr>";
}
}
else
{
$gebtagmsg .= "<tr><td> -</td></tr>";
}
$gebtagmsg .= "<tr><td> </td></tr>";
}//foreach
Datenbank: id, nname, vname, gebdat, email
(Format gebdat yyyy-mm-dd)
Würde mich riesig freuen, wenn mir einer helfen kann den Neujahres-Fehler zu eliminieren.