Geburtsdatum via Formular zu MySQL und zurück ;)

andre

abgemeldet
6 Mai 2006
3.235
227
Hallo

betreibe ja seit einiger Zeit eine Singlebörse, und da tat sich auf, das das Script keine Geburtstagsfunktion hat... so weit so gut...

nun möchte ich aber vom "Benutzer" das Geburtsdatum haben, wie kann ich es am besten in ein Anmeldeformular einbetten, so dass es später auch via MySQL auch im Profil sichtbar ist und das das eingegebene Alter am "Geburtstag" des Benutzers sich um das eine Jahr erhöht!

Danke im vorraus
André
 
MySQL stellt den Datentype DATE für sowas.

schön und gut, nur hab ich nicht die Ahnung wie ich den Datentyp "Date" in ein Formular packe....am liebsten wäre mir, wenn schon ein fast fertiges Formular existieren würde!

hab schon ein paar PHP&MySQL Bücher durch, werde aber net schlau drauß
 
Da würden sich verschiedene Ansaätze eignen. Der schönste wäre wohl ein Kalender, aus dem man auswählen kann. Ist aber auch am meisten Arbeit.

Die nächstbeste alternative sind meiner Meinung nach Auswahlboxen, in denen Man Tag, Monat und Jahr auswählen kann.

Das schlechteste wäre nen freies Eingabefeld, hier bist du immer drauf angewiesen, dass die User brauchabre Angaben machen.

Dann sollteste das ganze per mktime() in einen Timestamp umwandeln, mit dem du in PHP arbeiten kannst.. und in mysql kriegste das dann mit

INSERT INTO `<tabelle>` (`geburtsdatum`) VALUES (FROM_UNIXTIME(<timestamp>))
 
also das mit den Checkboxen wäre wohl der Kompromiss aus den beiden, Tabellen sind ja auch alle definiert ausser dem Geburtsdatum man kann doch auch zusätzlich einfach eine Tabelle z.b. "GebDatum" in mysql anlegen?

wenn ich das Formular mit Checkboxen ausgestattet habe, was sollte dann gemacht werden?
 
Dann sollteste das ganze per mktime() in einen Timestamp umwandeln, mit dem du in PHP arbeiten kannst..
Würd ich nicht empfehlen. checkdate() prüft das Datum auch und man kann direkt mit Tag, Monat und Jahr arbeiten.

Am besten wäre ein RegExp, der die drei Komponenten separiert. PHP handelt z.B. "08" genau wie 8, sodass man sich über führenden Nullen nicht den Kopf zerbrechen muss. Mit sprintf() bringt man die Komponenten dann in Y-m-d-Format, wie MySQL sie annimmt.
 
also das mit den Checkboxen wäre wohl der Kompromiss aus den beiden

Checkboxen sind total ungeeignet. was ich meinte sind <select></select> - Felder.

Eine Spalte in einer Tabelle hinzufügen ist kein Problem, geht am besten per PhpMyAdmin.

Und was dann mit den feldern gemacht wird - da stellt sich mir mal eher die Frage: Wie viel Ahnung hast du von PHP? Klingt nicht so als hätteste du so wahnsinnig viel Ahnung..
 
uff, danke ;) aber bitte konvertiert mir das mal alles ins blutige "Anfängerformat" am besten mit ein paar Codeschnipseln als Beispiel...so könnte ich es wohl am besten nachvollziehen!
 
Würd ich nicht empfehlen. checkdate() prüft das Datum auch und man kann direkt mit Tag, Monat und Jahr arbeiten.
mktime() prüft doch auch und gibt direkt nen timestamp zurück, der sicher nachher für eine Ausgabe wieder benutzt werden kann. Andererseits wandelt mktime ungültige Daten (30. Februar) möglicherweise sehr komisch um, da ist deins dann besser.

Am besten wäre ein RegExp, der die drei Komponenten separiert. PHP handelt z.B. "08" genau wie 8, sodass man sich über führenden Nullen nicht den Kopf zerbrechen muss. Mit sprintf() bringt man die Komponenten dann in Y-m-d-Format, wie MySQL sie annimmt.
Du meinst per sprintf dafür sorgen, dass immer die ausreichende Anzahl an Stellen vorhanden ist? Hmm, auch eine Theorie.

Wo wir gerade dabei sind, würdest du (oder wer sonst hier mitliest) also bevorzugen, Daten in MySQL als Date / Datetime zu speichern, oder tuns auch PHP-timestamps in int-Felder?
Unterschiede seh ich da primär in der Lesbarkeit..
 
Du meinst per sprintf dafür sorgen, dass immer die ausreichende Anzahl an Stellen vorhanden ist? Hmm, auch eine Theorie.
Is keine Theorie, funktioniert perfekt:
Code:
%04u-%02u-%02u
als Formatstring und wenn du dann die Integer einsetzt, kriegst du n fertiges MySQL-Datum.
Wo wir gerade dabei sind, würdest du (oder wer sonst hier mitliest) also bevorzugen, Daten in MySQL als Date / Datetime zu speichern, oder tuns auch PHP-timestamps in int-Felder?
Unterschiede seh ich da primär in der Lesbarkeit..
Denk mal gut nach (hab den Fehler auch mal gemacht):
Timestamps gehen überhaupt nicht! Was is, wenn einer älter als 37 Jahre is? Dumm, der is vor UNIX-Null.

Timestamps wenn überhaupt nur für Log-Einträge oder so, die nicht mehr in der Vergangenheit liegen können. Das Ding "Datum => mach doch Timestamp" is meistens nicht gut und wie gesagt, für Geburtsdaten funktioniert nicht es nicht mal.

DATE hat außerdem noch einen zusätzlichen Vorteil: MySQL akzeptiert Daten wie 0000-01-28, d.h. ich will meinen Geburtstag (Sternzeichen, etc.) angeben, aber mein Alter nicht verraten.
 
Leute, helft mir mal weiter....ich nix verstehen ;)
Wenn du nix verstehen, du müssen sagen, was du nicht verstehen ;)

Zusammenfassend: der DATE-Datentyp is gegenüber der Timestamp-Methode einmal besser, weil man auch Geburtsdaten ohne Jahresangabe verwenden kann und zum Zweiten funktioniert er auch für Daten, die vor dem 1.1.1971 (="Unix-NULL", mehr kannst du dazu ja in der Wikipedia lesen) liegen.
 
mir würden helfen, codeschnipsel ;) mundgerecht fürs Formular *gg bzw wie ich "Date" in ein Formular einbinden kann!
 
Fertigen Code gibts bei uns nun mal ned, sondern nur Lösungsideen. Musstd halt sagen, worans hapert.

Mach einfach erstmal n Formular und biete ein Textfeld an. Ich geb dir dann n RegExp, damit du das Datum aufsplitten kannst.
 
Danke dir, werde morgen mal nen kleines Formular basteln, und dann auf deine Tipps hoffen :)
 
Mach doch einfach bei deinem Anmeldeformular 3 Auswahllisten(https://de.selfhtml.org/html/formulare/auswahl.htm#listen) mit size="1" die alle 31 Tage, alle 12 Monate und die letzten 100 Jahre beinhalten, bei der Methode kann man zwar einen Tag angeben denn es eig garnicht gibt, glaube aber das das nicht weiter schlimm ist, oder? und natürlich bei jedem noch eine Option fals man das Datum nicht angeben möchte, dann die POST-Daten aus dem Formular in MYSQL-Einfügen ...

Mfg
Saki13