Zur Navigation

Formular absenden und Geburtstag auslesen [2]

11 tobi

aha. liefert auch einen fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'alter, DAYOFMONTH(geburtsdatum) AS geburtstag FROM geburtstagsliste WHERE MONT' at line 1

WHERE MONT, hab ich noch nie gehört :(

28.01.2010 21:21

12 Jörg Kruse

Ja, ups, 'alter' ist ja ein reserviertes Wort, das muss in Backticks eingekleidet werden

SELECT id, name, vorname, geburtsdatum, (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS `alter`, DAYOFMONTH(geburtsdatum) AS geburtstag  
FROM geburtstagsliste
WHERE MONTH(geburtsdatum) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH))
ORDER BY geburtstag

WHERE MONT, hab ich noch nie gehört :(

Die Datenbank gibt eine bestimmte Anzahl von Zeichen wieder ab der Stelle, an der sie gestolpert ist; dabei kann der Ausschnitt mitten in einem Wort enden

28.01.2010 21:30

13 tobi

Danke für deine Hilfe. Funktioniert tadellos.

06.02.2010 15:24

... 5 Monate später ...

14 tobi

hallo jörg,

ich würde gerne meine abfrage etwas abändern, ich würde geren nicht nur den nächsten monat ausgeliefert bekommen, sondern auch den übernächsten.

aktuell schaut es so aus: da werden die geburtstage des nächsten monats ausgegeben.
$sql1 = "
SELECT id, name, vorname, geburtsdatum, (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS `alter`, DAYOFMONTH(geburtsdatum) AS geburtstag  
FROM geburtstagsliste
WHERE MONTH(geburtsdatum) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH))
ORDER BY geburtstag";

ich habe nun probiert aus INTERVAL 1 MONTH --> INTERVAL 2 MONTH zu machen. was zur folge hat, dass nur geburtstage des übernächsten monats ausgegeben werden.

wie bekomme ich hin dass nächster und übernächster angezeigt werden?

vielen dank schon mal im voraus

08.07.2010 19:41

15 Jörg Kruse

Mit BETWEEN könntest du einen Abschnitt definieren (ungetestet):

WHERE MONTH(geburtsdatum) BETWEEN MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) AND MONTH(DATE_ADD(CURDATE(),INTERVAL 2 MONTH))

08.07.2010 19:54

16 tobi

ok, nun werden die ergebnisse der nächsten beiden monate ausgegeben, aber die reihenfolge ist etwas durcheinander:

123 hat am 03.08. Geburtstag und wird 30 Jahre alt (03.08.1980)
456 hat am 04.09. Geburtstag und wird 20 Jahre alt (04.09.1990)
678 hat am 05.08. Geburtstag und wird 90 Jahre alt (05.08.1920)

08.07.2010 20:03

17 Jörg Kruse

Du sortierst bis jetzt nur nach dem Geburtstag - du musst in diesem Fall auch noch nach dem Gebursmonat sortieren

ORDER BY geburtsmonat, geburtstag

wobei du `geburtsmonat` dann natürlich auch noch vorher im SELECT Statement definieren musst

SELECT id, name, vorname, geburtsdatum, (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS `alter`, DAYOFMONTH(geburtsdatum) AS geburtstag, MONTH(geburtsdatum) AS geburtsmonat

08.07.2010 20:57

18 tobi

passt perfekt mercy

08.07.2010 21:17

... 4 Monate später ...

19 tobi

Hallo,

heute habe ich mir wieder den All-Monaltichen Geburtstagsnewsletter verschicken lassen, und seit heute hat er den zweiten Monat nicht mehr angezeigt und auch keinerlei Geburtstagskinder.
Dezember und

habe aus dem:
<?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;

das gemacht und die kommenden beiden Monate wurden wieder beide angezeigt: Dezember und Januar
<?php
$monate = array(
    null,
    null,
    'Februar',
    'März',
    'April',
    'Mai',
    'Juni',
    'Juli',
    'August',
    'September',
    'Oktober',
    'November',
    'Dezember',
    'Januar',
    'Februar'
);
$monat1 = date("n") + 1;
$monat2 = date("n") + 2;

Das mit der Monatsanzeige habe ich hinbekommen, aber Geburtstagskinder werden immer noch keine für die kommenden beiden Monate angezeigt, woran kann dies liegen?

<?php
$monate = array(
    null,
    null,
    'Februar',
    'März',
    'April',
    'Mai',
    'Juni',
    'Juli',
    'August',
    'September',
    'Oktober',
    'November',
    'Dezember',
    'Januar',
    'Februar'
);
$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";

?>

Ideen?

Mfg Tobi

25.11.2010 22:02

20 Jörg Kruse

Das Array würde ich so lassen und stattdessen die Berechnung anpassen:

$monat1 = date("n") + 1;
if ($monat1 > 12) {
    $monat1 -= 12;
}

(analog für $monat2)

25.11.2010 22:33