Seite 1 von 2

Geburtstage aus Datenbank auslesen

Verfasst: 25.04.2008 18:41
von Ogniquok
Hey Leute, ich brauch mal wieder einen Rat von euch^^
Folgendes: Ich will aus einer Datenbank aktuelle Geburtstage von Personen auslesen. Da ich nur wenig Ahnung von Datenbank-Abfragen habe, hab ich mir folgendes "Script" ergoogelt und schon ein wenig angepasst:

Code: Alles auswählen

$werte = array();
$res = mysql_query('
SELECT
	id,
	nachname,
	vorname,
	geburtstag,
	YEAR( CURRENT_DATE( ) ) - YEAR( geburtstag )
	age,
	DATEDIFF(geburtstag + INTERVAL
	(YEAR(CURRENT_DATE) - YEAR(geburtstag) +
	IF(DATE_FORMAT(CURRENT_DATE, "%m%d") >
	DATE_FORMAT(geburtstag, "%m%d"), 1, 0))
	YEAR, CURRENT_DATE) AS days_to_birthday
FROM
	personen
HAVING
	days_to_birthday <= 6 OR
	days_to_birthday >= 360
ORDER BY
	days_to_birthday');

while($row = mysql_fetch_row($res))
{
$werte[] = $row;
}
Aber ich bekomms irgendwie nicht hin, dass die Personen mit den Geburtstagen ausgegeben werden. Hab schon einiges mit echo, etc. versucht, hat aber nichts geklappt.
Kann mir da jemand helfen?

Verfasst: 27.04.2008 11:41
von Ogniquok
*push*^^

Müsste doch irgendwie mit einer Schleife oder so gehen, oder?

Ich weiß doch, dass ihr das könnt... :D :D

Verfasst: 27.04.2008 12:12
von S2B
Ich habe neulich etwas Ähnliches programmiert, vielleicht hilft dir das ja weiter:

Code: Alles auswählen

		$start_day = date('m-d', time() - 604800); // vor 7 Tagen
		$end_day = date('m-d', time() + 1209600); // in 14 Tagen
		$sql = 'SELECT user_id, username, user_birthday
			FROM ' . USERS_TABLE . "
			WHERE DATE_FORMAT(user_birthday, '%m-%d') BETWEEN '$start_day' AND '$end_day'";
Und hier noch eine Funktion zur Berechnung des Alters:

Code: Alles auswählen

function user_age($user_birthday)
{
	$user_birthday = explode('-', $user_birthday);
	
	$age = date('Y') - $user_birthday[0];
	if (date('m') < $user_birthday[1] || (date('m') == $user_birthday[1] && date('d') < $user_birthday[2]))
	{
		$age--;
	}
	
	return $age;
}

Verfasst: 27.04.2008 14:09
von Ogniquok
Ok, danke erstmal. Deine Scripte versteh ich schon mal besser als das, was ich zuvor hatte.^^
Ich schaffs aber immer noch nicht, das ganze richtig auszugeben.

Hier mal mein Script.

Verfasst: 27.04.2008 14:17
von S2B
Ausgelesen wird das ganze bei mir so:

Code: Alles auswählen

		$now = explode('-', date('Y-m-d'));
		while ($row = $db->sql_fetchrow($result))
		{
			$user_birthday = explode('-', $row['user_birthday']);
			if ($user_birthday[1] == $now[1] && $user_birthday[2] == $now[2])
			{
				// hat heute Geburtstag
				
				$display_age = user_age($row['user_birthday']);
			}
			else if ($user_birthday[1] <= $now[1] && $user_birthday[2] <= $now[2])
			{
				// hatte in der Vergangenheit Geburtstag
				
				$display_age = user_age($row['user_birthday']);
			}
			else if ($user_birthday[1] >= $now[1] && $user_birthday[2] >= $now[2])
			{
				// hat in der Zukunft Geburtstag
				
				$display_age = user_age($row['user_birthday']) + 1;
			}
			
			$template->assign_block_vars('birthdays', array(
				'USERNAME' => $row['username'],
				'AGE' => $display_age,
				
				'U_PROFILE' => common_url('profile', $row['user_id']))
			);
		}
		$db->sql_freeresult($result);

Verfasst: 27.04.2008 18:04
von Ogniquok
Was muss denn dann das $result und $row sein, weil ich bekomm den Fehler

Code: Alles auswählen

Fatal error: Call to a member function on a non-object
bezogen auf die Zeile mit

Code: Alles auswählen

while ($row = $db->sql_fetchrow($result))
Sry für die ganzen Fragen, aber ich kenn mich mit diesen Abfragen halt gar nicht gut aus^^

Verfasst: 27.04.2008 19:06
von gn#36
Vermutlich das ganze in einer Funktion eingebaut und global $db; vergessen?

Ansonsten behandelt eine Funktion nämlich alle Variablen (auch globale) als neue lokale Variablen und kennt daher das Datenbankobjekt nicht (weshalb unbekannt ist welche Funktion aufgerufen werden soll, daher der Fehler).

Verfasst: 27.04.2008 20:46
von Ogniquok
Ok, ich glaub, das ganze wird doch schwieriger als ich dachte. Da muss ich mich glaub ich noch ein wenig mehr in die Materie einarbeiten.^^
Danke an euch beide schonmal für die Hilfe, ich meld mich, wenn ich wieder was brauch :D

Verfasst: 27.04.2008 21:42
von Gumfuzi
das obige Beispiel ist für ein phpBB.
Du wirst wahrscheinlich den Code woanders benötigen (ausserhalb eines phpBB-Forums)?

Verfasst: 27.04.2008 21:57
von Ogniquok
Das hab ich mir schon fast gedacht...^^
Ich brauch's nicht für's Forum, sondern für ne Homepage. Wollt ich damit ("Ich will aus einer Datenbank aktuelle Geburtstage von Personen auslesen.") eigentlich sagen.^^ Deshalb hab ich es ja auch ein wenig angepasst.
Ich versuch jetzt mal was zusammen zu schreiben mit Hilfe von allen möglichen Tutorials, etc...