Index > Fehler melden > Geburtstag wird nicht richtig gespeichert.
Hallo,
es gibt offensichtlich ein Problem mit dem Geburtstag bei Mitgliedern, wenn diese im Jahre <1939 geboren sind. Gibt man z.b. 07.06.1937 (1937-06-07 in der Online-Demo) ein, so wird aus diesem Datum nach der Speicherung 1966-09-29.
Ich habe es in der Online-Demo nachgestellt.
Gruß
Kester
es gibt offensichtlich ein Problem mit dem Geburtstag bei Mitgliedern, wenn diese im Jahre <1939 geboren sind. Gibt man z.b. 07.06.1937 (1937-06-07 in der Online-Demo) ein, so wird aus diesem Datum nach der Speicherung 1966-09-29.
Ich habe es in der Online-Demo nachgestellt.
Gruß
Kester
2008-07-22 10:40
Hi,
der fehler ist kein Fehler, es liegt an der unix Zeitzählung die am 01.01.1970 begann.
Grüße,
Sven.
der fehler ist kein Fehler, es liegt an der unix Zeitzählung die am 01.01.1970 begann.
Grüße,
Sven.
2008-07-22 12:27
Hi,
bedeutet, dass es keine Lösung gibt? Und wieso ist es dann möglich z.B. den 01.01.1940 zu speichern?
Gruß
Kester
bedeutet, dass es keine Lösung gibt? Und wieso ist es dann möglich z.B. den 01.01.1940 zu speichern?
Gruß
Kester
2008-07-22 14:30
dateOfBirth ist als varchar(10) gespeichert, das ist für die nötige Größenordnung mit Minus-Zeichen eine Stelle zu wenig. Man braucht bei einem Char 11 Zeichen um -2147483647 bis 2147483648 abzubilden. (Entspricht dem Werteraum des Unix-Timestamp, Datum 13.12.1901 bis 19.01.2038).
@Leo oder gibt es einen tieferen Grund dafür hier nur 10 Zeichen zu verwenden?
Gruß
Markus
@Leo oder gibt es einen tieferen Grund dafür hier nur 10 Zeichen zu verwenden?
Gruß
Markus
Zuletzt bearbeitet von simplemind, 2008-07-22 17:08
computino.de Webservice Hosting, Domains, Entwicklung, Schulungen
2008-07-22 17:07
Ich glaube kaum, dass es mit der bloßen Umstellung der Datenbank getan ist :-)
Momentan werden hier nur positive Zahlen gespeichert und bei gesetzter "unsigned"-Option ist das Feld immer nur 10 Zeichen lang. Negative Werte zu erlauben ist sicherlich ein guter Ansatz, um das Problem zu beheben. Allerdings wird es ohne Code-Anpassungen wohl nicht funktionieren.
Momentan werden hier nur positive Zahlen gespeichert und bei gesetzter "unsigned"-Option ist das Feld immer nur 10 Zeichen lang. Negative Werte zu erlauben ist sicherlich ein guter Ansatz, um das Problem zu beheben. Allerdings wird es ohne Code-Anpassungen wohl nicht funktionieren.
2008-07-22 19:21
Hallo Leo,
ich dachte es passt schon so alles wie es ist, da zum Beispiel das Geburtsdatum 22.07.1955 zum Timestamp in der Datenbank von -455936400 führt, was auch der richtige Timestamp dafür ist.
Und um die "einfach" Theorie zu stützen: stellt man auf varchar(11) um, werden Datumsangaben von 1901 bis 2038 richtig gespeichert - bei größeren Werten kommen jedoch undefinierte Werte, der Timestamp ist als 32-Bit Integer definiert (10 stellen + Vorzeichen als Char).
Gruß
Markus
ich dachte es passt schon so alles wie es ist, da zum Beispiel das Geburtsdatum 22.07.1955 zum Timestamp in der Datenbank von -455936400 führt, was auch der richtige Timestamp dafür ist.
Und um die "einfach" Theorie zu stützen: stellt man auf varchar(11) um, werden Datumsangaben von 1901 bis 2038 richtig gespeichert - bei größeren Werten kommen jedoch undefinierte Werte, der Timestamp ist als 32-Bit Integer definiert (10 stellen + Vorzeichen als Char).
Gruß
Markus
computino.de Webservice Hosting, Domains, Entwicklung, Schulungen
2008-07-22 19:28
Tja, und so schnell kann man sich irren. Es ist in der Tat mit einer einfachen Umstellung der Datenbank getan (bitte entschuldige, Markus). Das Feld dateOfBirth muss INT(11) werden.
2008-07-22 19:39
Hallo Marcus,
danke für die schnelle Lösung, und vor allem für die gute Erklärung.
Ich werde es mal probieren.
Danke
Gruß
Kester
danke für die schnelle Lösung, und vor allem für die gute Erklärung.
Ich werde es mal probieren.
Danke
Gruß
Kester
2008-07-22 20:14
Hallo Kester,
gern geschehen, aber bitte: Markus, irgendwie schleicht sich das gerade ein mit der Ruhrpot-Schreibweise und dem vertrackten c
Ich würde übrigens einen int (10) signed (bzw. eben nicht unsigned) nehmen für das Geburtsdatum.
Gruß
Markus
gern geschehen, aber bitte: Markus, irgendwie schleicht sich das gerade ein mit der Ruhrpot-Schreibweise und dem vertrackten c
Ich würde übrigens einen int (10) signed (bzw. eben nicht unsigned) nehmen für das Geburtsdatum.
Gruß
Markus
Zuletzt bearbeitet von simplemind, 2008-07-22 20:25
computino.de Webservice Hosting, Domains, Entwicklung, Schulungen
2008-07-22 20:24
Es muss int(11) heißen wenn es signed sein soll. Wie Du schon festgestellt hast, ist bei 10 Zeichen nicht genug Platz für das Minus. Also entweder "int(10) unsigned" oder "int(11)".
2008-07-22 20:42
Hallo Leo,
ein signed Int braucht im Gegensatz zum Char doch nur 1 Bit (und nicht 1 Byte) für die Darstellung des Minus. Ein unsigned kann keine negativen Timestamps speichern. Und um einen 32Bit-Integer unter zu bekommen reicht locker ein int(10), wobei man mit dem int(11) hier nichts kaputt macht, da sowieso so große Zahlen nicht vorkommen sollten. Verschwendet nur 1 Stelle Speicherplatz
Gruß
Markus
ein signed Int braucht im Gegensatz zum Char doch nur 1 Bit (und nicht 1 Byte) für die Darstellung des Minus. Ein unsigned kann keine negativen Timestamps speichern. Und um einen 32Bit-Integer unter zu bekommen reicht locker ein int(10), wobei man mit dem int(11) hier nichts kaputt macht, da sowieso so große Zahlen nicht vorkommen sollten. Verschwendet nur 1 Stelle Speicherplatz
Gruß
Markus
computino.de Webservice Hosting, Domains, Entwicklung, Schulungen
2008-07-22 21:05
Also ich bin einfach nach dem Default-Wert von phpMyAdmin gegangen und der ist int(11). Mag aber gut sein, dass Du Recht hast - ich überlege es mir lieber genau, ob ich noch mal wiederspreche :-)
So oder so sind wir jetzt auf der sicheren Seite, oder?
So oder so sind wir jetzt auf der sicheren Seite, oder?
2008-07-22 21:11
Auf jeden Fall, zumindest bis in PHP6 (vielleicht) der 64Bit-Timestamp kommt 
Gruß
Markus
Gruß
Markus
computino.de Webservice Hosting, Domains, Entwicklung, Schulungen
2008-07-22 21:14
Hallo Markus,
werde es mit merken. ;-)
Gruß
Kester
werde es mit merken. ;-)
Gruß
Kester
2008-07-23 10:11
Hallo Leute, ich stehe vor einem Problem.
Ich wollte für einen User weil er es in seinem Profil im Frontend nicht ändern kann (was schon komisch ist) sein Geburtstag einpflegen.
Im Backend habe ich das Datum in der richtigen Formatierung eingegeben.
Nach der Speicherung allerdings trägt er das Datum von heute ein.
Ist das ein Bug? Wie kann ich das lösen?
Ich nutze für die Frontenduser das member_grouped_helpdesk Template.
Ich wollte für einen User weil er es in seinem Profil im Frontend nicht ändern kann (was schon komisch ist) sein Geburtstag einpflegen.
Im Backend habe ich das Datum in der richtigen Formatierung eingegeben.
Nach der Speicherung allerdings trägt er das Datum von heute ein.
Ist das ein Bug? Wie kann ich das lösen?
Ich nutze für die Frontenduser das member_grouped_helpdesk Template.
2009-05-05 13:30
