Geburtstage aus Datenbank auslesen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Geburtstage aus Datenbank auslesen

Beitrag 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?
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Beitrag von Ogniquok »

*push*^^

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

Ich weiß doch, dass ihr das könnt... :D :D
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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;
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Beitrag 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.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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);
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Beitrag 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^^
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Beitrag 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
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

das obige Beispiel ist für ein phpBB.
Du wirst wahrscheinlich den Code woanders benötigen (ausserhalb eines phpBB-Forums)?
Ogniquok
Mitglied
Beiträge: 208
Registriert: 04.08.2007 22:24

Beitrag 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...
Antworten

Zurück zu „Coding & Technik“