Geburtstagsnewsletter

Hallo zusammen,

ich habe einen kleinen Newsletter erstellt, welchen ich monatlich via cronjob ausführen lasse.
Bisher lief alles reibungslos. Mit dem heutigen Newsletter sind erstmals Probleme aufgetaucht, ich denke es liegt daran, dass Dezember und Januar angezeigt werden sollen.
Der Newsletter gibt immer die Geburtstagskinder der kommenden 2 Monate aus.

<?php
$monate = array(
1=>"Januar",
2=>"Februar",
3=>"März",
4=>"April",
5=>"Mai",
6=>"Juni",
7=>"Juli",
8=>"August",
9=>"September",
10=>"Oktober",
11=>"November",
12=>"Dezember");
$monat1 = date("n") + 1;
$monat2 = date("n") + 2;

$Empfaenger = "233,";
$Empfaenger .= "123,";

$Betreff = "Aktuelle Geburtstagskinder des TTC`s der kommenden Monate: $monate[$monat1] und $monate[$monat2]";

$Nachricht = "
<html>
<head>
   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
   <title>123 - Geburtstage</title>
   <style type=\"text/css\" media=\"screen\">
		body
//CSS entfernt
   </style>

</head>
<body>
";

//Datenbank verbinden
include ("../../zugang.php.inc");

//$Nachricht .= "
				
//				<p>Falls der Geburtstagsnewsletter nicht richtig angezeigt wird, bitte <b><a class =\"links\" href =\"http://www.123.de/mailversand/html_anzeige_mail_geburtstage.php\">hier</a></b> klicken!</p>
//				";

$Nachricht .= "

<div style=\"width:698px;text-align:left;border:solid 3px #000000;\">
	<div id=\"kopf\">
		<img src=\"http://123.de/mailversand/mail_header.jpg\" width=\"698\" height=\"150\" alt=\"Mail Header\">
	</div>
			<div id=\"main\">
				<p>&ensp;Hallo zusammen, <br /><br />&ensp;hier die aktuellen Geburtstagskinder des TTC`s der nächsten 2 Monate:<br />&ensp;<b>$monate[$monat1] und $monate[$monat2]</b></p>
				";
			
				//sql1 Befehl			
				$sql = "
				SELECT id, name, vorname, geburtsdatum, (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS `alter`, DAYOFMONTH(geburtsdatum) AS geburtstag, MONTH(geburtsdatum) AS geburtsmonat
				FROM geburtstagsliste
				WHERE MONTH(geburtsdatum) BETWEEN MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) AND MONTH(DATE_ADD(CURDATE(),INTERVAL 2 MONTH))
				ORDER BY geburtsmonat, geburtstag";
				
				$db_erg = mysql_query( $sql );
				if ( ! $db_erg )

				{
				die('Ungültige Abfrage: ' . mysql_error());
				}
				
				function date_mysql2german($date) {
				$d    =    explode("-",$date);
    
				return    sprintf("%02d.%02d.", $d[2], $d[1], $d[0]);
				}

				function timestamp_mysql2german($date) {
				$d    =    explode("-",$date);
    
				return    sprintf("%02d.%02d.%04d", $d[2], $d[1], $d[0]);
				}

				$anzahl = mysql_num_rows($db_erg);
				
				if ($anzahl == 0) {

$Nachricht .= "				
				<p>&ensp;In dem oben angegebenen Zeitraum gibt es keine Geburtstagskinder des TTC´s.</p>
				";
				
				}
				else {
					
					$anzahl = 1;	
					
					while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
					{
					
				$expDate = explode(" ",$zeile['geburtsdatum']);	
				
$Nachricht .= "			

				&ensp;". $zeile['vorname'] ." 
				". $zeile['name'] ." hat am 

				". date_mysql2german($expDate[0])." ".substr($expDate[1],0,5)." Geburtstag und wird 

				". $zeile['alter'] ." Jahre alt

				(". timestamp_mysql2german($expDate[0])."".substr($expDate[1],0,5).")
				<br />";
					$anzahl++;
					}
				
				mysql_free_result( $db_erg );
				
				}
							
				
$Nachricht .= "
				
				<p>&ensp;Mit freundlichen Grüßen<br />&ensp;123<br />&ensp;Webmaster 123</p>
				<p>&ensp;checkout: <b><a class =\"links\" href =\"http://www.tt123.de\">www.123.de</a></b><br />
				&ensp;Kontakt: <b><a class =\"mailto\" href =\"mailto:\">1&nbsp;[at]&nbsp;1&nbsp;[Punkt]&nbsp;de</a></b></h1></p>
			</div>	
</div>
";

// Datenbank schließen
mysql_close($link);

$Nachricht .= "
</body>
</html>
";

$Header = "MIME-Version: 1.0\n";
$Header .= "Content-type: text/html; charset=iso-8859-1\n";
$Header .= "From: <i1@1.de>\n";

mail($Empfaenger, $Betreff, $Nachricht, $Header);

echo "$Nachricht\n";

?>

Kann mir jemand sagen, wo das Problem liegt und wie es behoben werden kann?

Danke

MfG tobsp

… die sich wie äußern? Was genau funktioniert denn nicht.

Hi,

so: Newsletter vom 25.10.2010
Betreff: Aktuelle Geburtstagskinder des TTC`s der kommenden Monate: November und Dezember

Inhalt der Mail:
Hallo zusammen,

hier die aktuellen Geburtstagskinder des TTC`s der nächsten 2 Monate:
November und Dezember
Person 1 hat am 01.11. Geburtstag und wird 56 Jahre alt (01.11.1954)
Person 2 hat am 06.11. Geburtstag und wird 43 Jahre alt (06.11.1967)

so: Newsletter vom 25.11.2010
Betreff: Aktuelle Geburtstagskinder des TTC`s der kommenden Monate: Dezember und

Inhalt der Mail:
Hallo zusammen,

hier die aktuellen Geburtstagskinder des TTC`s der nächsten 2 Monate:
Dezember und

In dem oben angegebenen Zeitraum gibt es keine Geburtstagskinder des TTC´s.

d.h. Januar wird weder im Betreff noch in der Headline aufgeführt und es werden keine Geburtstagskinder aus Dezember und Januar aufgelistet

MfG tobsp

Es wäre ggf ratsam, dein Script zu sagen, dass es die Monate prüfen soll.
Das heißt: Wenn Monat 12 => fange wieder bei 1 an.

Denn: Wenn du 12 + 1 rechnest, kommt 13 dabei raus - 13 ist aber kein Monat und wird auch nicht in deinem Array gefunden…

[quote=“kerbination”]… die sich wie äußern? Was genau funktioniert denn nicht.[/quote] Naja, ich denke, dass beim Jahreswechsel die kommenden Monate nicht mehr richtig angezeigt werden.

Klassisches Problem - date(“n”) + 1 gibt passend 12 zurück, da date(“n”) November - also 11 - plus 1 eben 12 und somit Dezember sind. Das klappt beim Addieren von 2 nicht mehr, denn 11 + 2 sind 13 und den Monat gibt es nicht.

Ich würde das Array folgendermaßen anpassen.

<span class="syntaxdefault">$monate </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault"> null</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> null</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Februar'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'März'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'April'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Mai'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Juni'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Juli'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'August'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'September'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Oktober'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'November'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Dezember'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Januar'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> </span><span class="syntaxstring">'Februar'<br /></span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span> So muss PHP nicht mehr arbeiten als bisher.

[quote=“thorr”][quote=“kerbination”]… die sich wie äußern? Was genau funktioniert denn nicht.[/quote] Naja, ich denke, dass beim Jahreswechsel die kommenden Monate nicht mehr richtig angezeigt werden.

Klassisches Problem - date(“n”) + 1 gibt passend 12 zurück, da date(“n”) November - also 11 - plus 1 eben 12 und somit Dezember sind. Das klappt beim Addieren von 2 nicht mehr, denn 11 + 2 sind 13 und den Monat gibt es nicht.

Ich würde das Array folgendermaßen anpassen.

danke für den Tipp. Nun wird im Betreff und der Überschrift Dezember und Januar angezeigt, genau so wie es seien soll.

Geburtstagskinder werden aber aus welchem Grunde auch immer kein angezeigt.

SELECT `id`, `name`, `vorname`, `geburtsdatum`, ( YEAR(CURDATE()) - YEAR(`geburtsdatum`) ) AS `alter`, DAYOFMONTH(`geburtsdatum`) AS `geburtstag`, MONTH(`geburtsdatum`) AS `geburtsmonat` FROM `geburtstagsliste` WHERE MONTH(`geburtsdatum`) BETWEEN MONTH(DATE_SUB(CURDATE(),INTERVAL 1 MONTH)) AND MONTH(DATE_SUB(CURDATE(),INTERVAL 2 MONTH)) ORDER BY `geburtsmonat`, `geburtstag` ASC Versuch es mal so - aber keine Garantie auf Richtigkeit, in den Tiefen der SQL-Funktionen kenne ich mich nicht wirklich aus.

[quote=“thorr”]SELECT `id`, `name`, `vorname`, `geburtsdatum`, ( YEAR(CURDATE()) - YEAR(`geburtsdatum`) ) AS `alter`, DAYOFMONTH(`geburtsdatum`) AS `geburtstag`, MONTH(`geburtsdatum`) AS `geburtsmonat` FROM `geburtstagsliste` WHERE MONTH(`geburtsdatum`) BETWEEN MONTH(DATE_SUB(CURDATE(),INTERVAL 1 MONTH)) AND MONTH(DATE_SUB(CURDATE(),INTERVAL 2 MONTH)) ORDER BY `geburtsmonat`, `geburtstag` ASC Versuch es mal so - aber keine Garantie auf Richtigkeit, in den Tiefen der SQL-Funktionen kenne ich mich nicht wirklich aus.[/quote]

negativ :frowning:

es wird auch hier kein Inhalt (Geburtstagskinder) angezeigt

Vielleicht mal ohne MONTH().