Seite 1 von 1

Geburtstagskinder in der index.php anzeigen

Verfasst: 06.10.2004 16:31
von Kettu
Hallo Leute,
ich hab ne kleine Geburtstagsliste programmiert, die auch einwandfrei funktioniert. :) Die Daten werden in der Datenbank abgespeichert.
In der Datenbank gibt es nun unter anderem die Tabellenzeile "geburtstag", wo das komplette Geburtsdatum angezeigt wird.

Wenn ich wie folgt auf einer "normalen" Seite programmiere, werden alle Geburtstagskinder plus Alter hintereinander angezeigt, so wie es sein soll.

Code: Alles auswählen

$heute = "____-".date("m-d");

//Datenbank Abfrage
$result=mysql_query("SELECT
                        geburtstag,
                        absender,
                        birthday,
                        birthmonth,
                        birthyear
                    FROM
                        bd_zusatz
                    WHERE
                        geburtstag like '$heute'
                    ORDER BY
                        absender
                    ASC
                        ");
//Ausgabe

echo "<img src=\"templates/subSilver/images/birthday.gif\" alt=\"Happy Birthday\"> ";

while($zeile = mysql_fetch_assoc($result))
{
echo "<font color=\"red\"><b>".$zeile["absender"]."</b></font> ";
// mktime("stunde","minute","sekunde","monat","tag","jahr")
$datum = mktime(0,0,0,$zeile["birthmonth"],$zeile["birthday"],$zeile["birthyear"]);
$datum = time()-$datum;
$alter = $datum/60/60/24/365;
echo "(";
echo intval($alter);
echo ") ";

}
In der index.php kann ich ja nun nicht mit echo arbeiten, deshalb habe ich den Code wie folgt verändert:

Code: Alles auswählen

$heute = "____-".date("m-d");

$result = mysql_query("SELECT
                        geburtstag,
                        absender,
                        birthday,
                        birthmonth,
                        birthyear
                    FROM
                        bd_zusatz
                    WHERE
                        geburtstag like '$heute'
                    ORDER BY
                        absender
                    ASC
                        ");

while($zeile = mysql_fetch_assoc($result))
{
$BD_TODAY_USER = $zeile["absender"];
$datum = mktime(0,0,0,$zeile["birthmonth"],$zeile["birthday"],$zeile["birthyear"]);
$datum = time()-$datum;
$alter = $datum/60/60/24/365;
$BD_TODAY_USER_AGE = '('.intval($alter).')';
}
und

Code: Alles auswählen

'BD_TODAY_USER' => $BD_TODAY_USER,
'BD_TODAY_USER_AGE' => $BD_TODAY_USER_AGE,
Mein Problem ist jetzt, dass nur noch ein Geburtstagskind mit alter angezeigt wird und zwar das, das als letztes in die Datenbank eingetragen worden ist.

Ein zweites Problem ist, wie bekomme ich es hin, dass zwischen den Geburtstagskinder ein Komma angezeigt wird, wenn es mehrere an einem Tag sind.

Ich hoffe, ihr könnt mir helfen.

Ach so, in der Template wird es wie folgt angezeigt:

Code: Alles auswählen

<b> {BD_TODAY_USER}</b></font> {BD_TODAY_USER_AGE} 

Verfasst: 06.10.2004 17:27
von Leuchte
Blöde Frage: Warum nutzt du nicht den Birthday Mod?

Verfasst: 07.10.2004 11:46
von Acid

Verfasst: 08.10.2004 14:01
von Kettu
@Leuchte
Weil mir dieser Mod zu komplex ist, und ich was schlichteres suchte. Da ich nichts fand, hab ich was selbst gebaut.

@Acid
Danke! :) Aber so wirklich geholfen hat mir das nicht.
Mein Problem ist, dass die while-Schleife zwar alles brav ausliest, aber nur einen Eintrag ausgibt (überschreibt immer den vorherigen). Wie kann ich es anstellen, dass die Daten hintereinander ausgegeben werden? Wenn ich mit echo arbeite, geht das einwandfrei, aber ohne eben nicht.

Verfasst: 08.10.2004 16:52
von Acid
Gibst du es im Template auch so aus, wie im Artikel beschrieben?

Code: Alles auswählen

<!-- BEGIN irgendwas -->
{irgendwas.BD_TODAY_USER} {irgendwas.BD_TODAY_USER_AGE}
<!-- END irgendwas -->

Verfasst: 09.10.2004 18:34
von Kettu
Wenn ich die Templateausgabe so schreibe, wird gar nichts mehr angezeigt, auch wenn es an dem Tag ein Geburtstagskind gibt.
Sprich, wenn ich den Code schreibe als:
Template:

Code: Alles auswählen

  <!-- BEGIN Geburtstagsausgabe -->
  <tr>
        <td class="row1" align="left" valign="middle"><span class="gensmall"><img src="templates/subSilver/images/birthday.gif" alt="Happy Birthday"> <font color="red"><b> {Geburtstagsausgabe.BD_TODAY_USER}</b></font> {Geburtstagsausgabe.BD_TODAY_USER_AGE} </span></td>
  </tr>
  <!-- END Geburtstagsausgabe -->
und index.php:

Code: Alles auswählen

$heute = "____-".date("m-d");

//Datenbank Abfrage
$result=mysql_query("SELECT
                        geburtstag,
                        absender
                    FROM
                        bd_zusatz
                    WHERE
                        geburtstag like '$heute'
                    ORDER BY
                        absender
                    ASC
                        ");
//Ausgabe

while($zeile = mysql_fetch_assoc($result))
{
$template->assign_block_vars('Geburtstagsausgabe', array(
'BD_TODAY_USER' => $zeile["absender"]
));
}
Das ist jetzt die Kurzversion. Hab es sowohl mit Altersberechnung als auch ohne (wie oben) probiert, ging beides nicht :cry:
Es wird halt dann gar nichts mehr angezeigt.

Verfasst: 30.10.2004 15:43
von Kettu
Wir haben das Ganze jetzt total abgeändert, so dass die Anzeige von mehreren Usern funktioniert. Allerdings kriegen wir jetzt ne Fehlermeldung, wenn keiner Geburtstag hat. Wir arbeiten mit implode:

Code: Alles auswählen

$template->assign_vars(array('GEBURTSTAGSKINDER' => implode(', ', $bday)));
Wie gesagt, wenn jemand Geburtstag hat, funktioniert das einwandfrei, nur ohne halt nicht:
Warning: implode(): Bad arguments. in /usr/local/httpd/htdocs/.../.../.../index.php on line 1400
und da steht genau der obige Befehl.

Was mich aber auch noch interessieren würde, wäre das, was Acid gesagt hat, wegen dem:

Code: Alles auswählen

<!-- BEGIN irgendwas --> 
{irgendwas.BD_TODAY_USER} {irgendwas.BD_TODAY_USER_AGE} 
<!-- END irgendwas -->
Was da bei mir passiert ist, seht ihr in meinem letzten Beitrag.

Edit 16:09 Uhr
Ah :D Ein Problem hab ich schonmal grad selbst gelöst :D
Durch eine simple Abänderung funktioniert das implode-script. Hab einfach das magische @ eingefügt 8)

Code: Alles auswählen

$template->assign_vars(array('GEBURTSTAGSKINDER' => @implode(', ', $bday)));