Geburtstage werden bei Konvert. nicht korrekt übernommen

phpBB 3.0 hat sein "End of Life" erreicht. Eine Neu-Installation wird nicht mehr unterstützt.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Geburtstage werden bei Konvert. nicht korrekt übernommen

Beitrag von Helmut »

Hallo,

bei meinen Versuchen für die Konvertierung von 2.0.3 nach 3.0.2 ist mir eine kleine Ungereimtheit aufgefallen und zwar werden die Geburtstage nicht im richtigen Format übernommen.

Bei der Konvertierung wird das Datum des Geburtstages wie folgt in die Tabelle phpbb_users Spalte user_birthday eingetragen:

Wenn kein Geburtstag angegeben war

Code: Alles auswählen

0- 0-   0
Wenn ein Geburtstag eingetragen war

Code: Alles auswählen

25-07-1974
Dies führt dann dazu, dass die Geburtstage dann nicht im neuen Forum 3.0.2 angezeigt werden. Wenn ich aber nun den oben genannten Geburtstag im Profil bearbeite und wieder abspeichere, dann wird er wie folgt eingetragen:

Code: Alles auswählen

25- 7-1974
Es wird also das Datum dann ohne führende Null in der Spalte user_birthday abgespeichert und somit wird auch der Geburtstag angezeigt. Das scheint mir ein Fehler in der Konvertierung zu sein in der Datei functions_phpbb20.php. :(

Was kann ich nun machen, damit die Geburtstage trotzdem angezeigt werden bzw. wie muss ich die Datei ändern, damit das richtige Format bei der Konvertierung eingetragen wird?



[EDIT]
Ich habe gerade noch einmal die Suche bemüht, bin aber nicht auf eine Lösung gekommen. Dafür wurde hier unter Punkt 6. auch schon von diesem Verhalten berichtet.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

mal hochschieb ..... :wink:

Bis jetzt habe ich noch keine Lösung gefunden um das Problem mit der Konvertierung der Geburtstage zu beseitigen. :(

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

und nochmal hochschieb ... :oops:

Gruß Helmut :wink:
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
bantu
Server-Team
Beiträge: 7311
Registriert: 25.04.2006 16:12
Wohnort: Karlsruhe

Beitrag von bantu »

Benutz mal die Suche. Ich habe dazu schon einige Beiträge verfasst, kannst also nach meinem Nick suchen.

Es gibt da einen Bug in PHP selbst, bzw. es liegt daran wie der Birthday Mod (der übrigens auf .com noch nicht mal validiert wurde) die Daten speichert.

Der Bug wurde, soweit möglich, umgangen. Auf einer höheren PHP-Version hast du unter Umständen erfolgt.

Edit: Vielleicht wird der Geburstagsmod, den du verwendest, auch einfach nicht unterstützt. Das ist wahrscheinlicher.
Powered by Coffee
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo bantu,

der Geburtstagmod den ich im 2.0.3 verwende, ist der von nils und du hattest mir ja hier schon mal geholfen. Das Datum selber wird ja dank deiner Hilfe richtig übernommen, nur die Formatierung passt nicht genau. Ich bin inzwischen etwas weiter gekommen, in der functions_phpbb20.php habe ich das hier

Code: Alles auswählen

return gmdate('d-m-Y', $birthday * 86400 + 1);
durch diesen Code ersetzt.

Code: Alles auswählen

return gmdate('j-n-Y', $birthday * 86400 + 1);
Damit wird das Datum ohne führende Null übernommen, nur nicht so wie es soll. Jetzt wird z.B. "1-8-1995" eingetragen, es soll aber " 1- 8-1995" eingetragen werden. Wie muss ich nun den Code ändern, dass immer für den Tag und den Monat zwei Stellen verwendet werden, auch wenn die Zahl selber nur einstellig ist?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

und nochmal hochschieb ...

Ich habe noch nicht rausgefunden, wie ich einen Platzhalter bzw. das Leerzeichen für Tage und Monate von 1 bis 9 einfüge, damit es mit der Auswertung klappt.

Gruß Helmut :wink:
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

und nochmal hochschieb ...

Ich bin leider noch nicht weitergekommen, deshalb benötige ich etwas Hilfe bei meinem Problem. :(

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Hm,

schau mal in die Datei:

includes/ucp/ucp_profile.php

Da wird mittels "explode" das Datum auseinander gepflückt:

Code: Alles auswählen

					$data['bday_day'] = $data['bday_month'] = $data['bday_year'] = 0;

					if ($user->data['user_birthday'])
					{
						list($data['bday_day'], $data['bday_month'], $data['bday_year']) = explode('-', $user->data['user_birthday']);
					}
Das zusammenkleben erfolgt hier:

Code: Alles auswählen

					if ($config['allow_birthdays'])
					{
						$validate_array = array_merge($validate_array, array(
							'bday_day'		=> array('num', true, 1, 31),
							'bday_month'	=> array('num', true, 1, 12),
							'bday_year'		=> array('num', true, 1901, gmdate('Y', time()) + 50),
							'user_birthday' => array('date', true),
						));
					}
...

Code: Alles auswählen

						if ($config['allow_birthdays'])
						{
							$sql_ary['user_birthday'] = $data['user_birthday'];
						}

						$sql = 'UPDATE ' . USERS_TABLE . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE user_id = ' . $user->data['user_id'];
						$db->sql_query($sql);
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Dr.Death,

danke dir für den Tipp mit dem "explode", darauf bin ich garnicht gekommen. Damit hat es geklappt, jetzt werden die Geburtstage vom Birthdaymod Version 1.4.6 (Niels Chr. Denmark < ncr@db9.dk > (Niels Chr. Rød) HTTP://mods.db9.dk) von meinem 2.0.3 korrekt übernommen. Der Codeabschnitt in der functions_phpbb20.php sieht jetzt so aus:

Code: Alles auswählen

/**
* Convert Birthday from Birthday MOD to phpBB Format
*/
function phpbb_get_birthday($birthday = '')
{
	if (defined('MOD_BIRTHDAY_TERRA'))
	{
		$birthday = (string) $birthday;

		// stored as month, day, year
		if (!$birthday)
		{
			return ' 0- 0-   0';
		}

		// We use the original mod code to retrieve the birthday (not ideal)
		preg_match('/(..)(..)(....)/', sprintf('%08d', $birthday), $birthday_parts);

		$month = $birthday_parts[1];
		$day = $birthday_parts[2];
		$year =  $birthday_parts[3];

		return sprintf('%2d-%2d-%4d', $day, $month, $year);
	}
	else
	{
		$birthday = (int) $birthday;

		if (!$birthday || $birthday == 999999)
		{
			return ' 0- 0-   0';
		}
		else
		{
			$birthday2 = gmdate('j-n-Y', $birthday * 86400 + 1);
			
			$data['bday_day'] = $data['bday_month'] = $data['bday_year'] = 0;

			list($data['bday_day'], $data['bday_month'], $data['bday_year']) = explode('-', $birthday2);						
		}

		return sprintf('%2d-%2d-%4d', $data['bday_day'], $data['bday_month'], $data['bday_year']);		
	}
}
Der zweite Teil vom Code ab "else" ist für den Mod von Nils notwendig. Du kannst es je selber noch testen und vielleicht als Verbesserungsvorschlag für die nächste Version vom phpbb melden.

Gruß Helmut :wink:
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
Dotwin
Mitglied
Beiträge: 40
Registriert: 23.03.2003 12:27
Wohnort: Dortmund

Re: Geburtstage werden bei Konvert. nicht korrekt übernommen

Beitrag von Dotwin »

Hallo,

so wie ich das jetzt verstanden habe muss man vor der konvertierung etwas an der functions_phpbb20.php ändern.
Nun ist mir aber eben erst aufgefallen, dass die Geburtstage falsche übernommen worden sind (Monat und Tag sind vertauscht).
Das Board läuft also schon etwas und deswegen kann ich die Konvertierung nciht nochmal starten da sonst ja die neuen Beiträge weg sind.
Gibt es eine Möglichkeit das Geburtstagsdatum noch naträglich zu ändern?
Im phpbb 2.0.23 hatte ich den Birthday-Mod 1.5.7 von Niels verbaut.

Vielen Dank für die Hilfe

Gruß
Dotwin
Gesperrt

Zurück zu „[3.0.x] Installation, Update und Konvertierung“