Seite 1 von 1

Fehler in Geburtstagsliste?

Verfasst: 26.05.2009 09:54
von Dufftown
Hallo zusammen,

ich habe mal einen merkwürdigen Effekt bei der Anzeige der Geburtstage. Gibt es da etwa bekannte Fehler?

Zur Beschreibung:
In unserem Forum ist die Geburtstagsliste aktiviert. Da hat auch bisher funktioniert, zuletzt am letzten Donnerstag.
Um mit Änderungen und MODs probieren zu können habe ich ein identisches Testforum. Das habe ich auch gerade erst am Freitag komplett auf den aktuellen Stand gebracht, also aus dem Echtforum (fast) alles per FTP runtergeladen, zusätzlich die Styles exportiert (da in der DB gespeichert) und die ganze Datenbank gesichert. Dann alles in das Testsystem. Hat auch geklappt, sind beide völlig identisch.
Jetzt habe ich gestern ein paar MODs im Testsystem eingebaut, damit man sich das erst mal anschauen kann, und sich dann dafür oder dagegen entscheiden.
Unter anderem den Upcoming Birthday, der die Geburtstage schon im Voraus anzeigt. Wollte schon die Tage raufstellen, damit ich auch was sehe, aber zu meiner Überraschung hatte ich gleich eine ganze Zeile (8 Leute) da stehen. Davon die ersten beiden mit dem Geburtstag heute.
Hab mich also erstmal gefreut, alles erfolgreich verlaufen, auch die anderen MODs haben geklappt.

Jetzt kommt das Problem: Es wird heute, also nach 0 Uhr, und die beiden mit dem heutigen Geburtstag verschwinden aus der unteren Liste. Aber sie tauchen auch nicht bei den heutigen Geburtstagen, also der Standard-Liste, auf. Habe erstmal alle Dateien untersucht, die ich beim Einbau geändert hatte, wahrscheinlich doch irgendwo ein Fehler passiert. Habe aber nichts gefunden.
Jetzt schaue ich ins Echtsystem. Dort ist überhaupt nichts gemacht worden, seit ein paar Wochen, da hatte ich den "Wer war online" eingebaut, und der funktioniert auch super. Aber seitdem nichts gemacht, nur am Freitag komplett kopiert. Und am Donnerstag hat es ja noch richtig funktioniert, mit einem Geburtstag. Da müssten ja jetzt die beiden heutigen Geburtstage stehen, aber da steht auch nicht.

Diesen Beitrag hier habe ich schon gefunden, ansonsten eigentlich nichts passendes. Habe auch das "and BIRTHDAY_LIST" mal aus dem Template entfernt, um die Geburtstagsliste zu erzwingen. Sie wurde dann auch angezeigt, aber da stand "Heute hat keine Mitglied Geburtstag."

Habe natürlich noch mal die Profile überprüft, 2 Leute haben heute Geburstag und müssten demnach in der Liste stehen.

Hat da jemand ne Idee, was das sein kann?

Re: Fehler in Geburtstagsliste?

Verfasst: 26.05.2009 12:01
von Dufftown
So, ich habe mal selbst weitergeforscht, und auch schon das meiste rausbekommen.

Habe einem Testuser mal den Geburtstag auf heute eingetragen. Steht so in der Datenbank

Code: Alles auswählen

26- 5-1972
und wird auch in der Geburtstagsliste korrekt angezeigt.

Bei meinen beiden Usern die nicht in der Liste stehen, steht in der Datenbank

Code: Alles auswählen

26-05-1979
26-05-1984
und mit der 0 vor der 5 wird das nicht gefunden.

Eigentlich wäre mein Plan jetzt, die Stelle zu finden wo die Geburtstagsliste generiert wird, also die User anhand des eingetragenen Datums selektiert werden, und dann die Selektierung zu ändern
Die MOD hat ja auch kein Problem mit der 0 vorne im Monat. Da habe ich aber die Funktion auch schon gefunden, der schliesst mit dem SQL nur die User aus, die nur eine 0 im Monat oder im Tag oder in beidem haben, oder die gar keine Datum eingetragen haben. Die weitere Auswahl, wer in den Anzeigezeitraum fällt, geschieht wol mit php.

Weiss denn jemand, wo die Funktion steckt, die die Geburtstagsliste generiert? Kann man die da so ändern dass statt "Leerzeichen5" auch "05" gefunden wird?

Re: Fehler in Geburtstagsliste?

Verfasst: 26.05.2009 12:52
von oxpus
Hallo,

vielleicht klappt das:
Öffne die Datei index.php und finde dort die Zeile

Code: Alles auswählen

		WHERE user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', $now['mday'], $now['mon'])) . "%'
Diese ersetzen mit

Code: Alles auswählen

		WHERE (user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', $now['mday'], $now['mon'])) . "%' OR user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-0%2d-', $now['mday'], $now['mon'])) . "%')
und ausprobieren.

Re: Fehler in Geburtstagsliste?

Verfasst: 26.05.2009 14:51
von Dufftown
Hallo oxpus,

vielen Dank für den Tip. Habe das Problem jetzt gelöst.

Die index.php mit der Stelle zur Generierung der Geburtstagsliste hatte ich auch gerade gefunden, aber mich noch nicht mit der sprintf-Funktion auseinandergesetzt.
Habe Deinen Tip mal ausprobiert, und es funktioniert (fast). Man muss nur die Parameter drehen, also bei der sprintf-Funktion muss es nicht heissen 0%2d sondern %02d, dann wird nicht mit Leerzeichen aufgefüllt sondern mit einer 0.

Hab das jetzt doch anders gelöst, indem ich die Einträge in der Datenabnk geändert habe, weil
1. das gleiche ja auch bei den Zahlen des Tages noch vorkommt, damit hätte ich dann ja 4 Möglichkeiten, also noch 2 OR mehr und
2. auch mit dieser Änderung z.B. die Geburtstagsanzeige im Announcement-Center auch noch nicht funktioniert. Diese MOD berechnet das also wieder wo anders. Zwar die gleiche Funktionsweise, aber an anderer Stelle.

Die "falschen" Daten mit führender 0 dürften auch alle aus einem alten Forum stammen und hierher konvertiert worden sein. Ist also nur bei Usern so, die hier ihr Profil noch nicht gespeichert haben. Dabei wird es nämlich richtig, mit führendem Leerzeichen geschrieben.

Habe also alle alten Einträge hiermit berichtigt:

Code: Alles auswählen

UPDATE users
SET user_birthday = concat(' ', substring(user_birthday FROM 2))
WHERE user_birthday LIKE '0_-__-____';

UPDATE users
SET user_birthday = concat(left(user_birthday, 3), ' ', substring(user_birthday FROM 5))
WHERE user_birthday LIKE '__-0_-____';

Re: Fehler in Geburtstagsliste?

Verfasst: 26.05.2009 14:54
von oxpus
Na bitte, geht doch.
War zwar von mir nur "hingewürfelt", aber man lernt ja nie aus.
Danke für die ausführliche Rückmeldung.