Hallo Dennis,
Also ich hab das Problem das die Tabelle mittels einem Textfeld gefüttert wird. Der User gibt das Datum im tt.mm.jjjj Format ein.
So würde ich es _nicht_ machen. Denn ich kenne viele Leute, die ein Datum auch im Format tt/mm/jj oder jj-mm-tt oder auch einfach nur tt.mm.jj angeben - dann kriegst du da ja nie ein System rein!
Ich habe mir eine Funktion geschrieben, die versucht aus dem eingegebenen String ein Datum zu erkennen, dabei erkennt sie jedes Datum in der Form DD.MM.(JJ)JJ oder (JJ)JJ.MM.DD (wobei der . für \D+ steht und das Jahr mit einem optionalen Parameter ergänzt wird wenn es nur 2-stellig ist). Wenn das Datum erkannt wird, gibt die Funktion true zurück und verändert den übergebenen Wert so, das er im Format "DD.MM.JJJJ" ist.
Deshalb stelle ich den Usern immer drei Select-Listen zur Verfügung, die lassen sich bequem mit PHP erzeugen:
Das halte ich aber für eine sehr dämliche und umständlich zu bedienende Lösung ... - ich habe wesentlich schneller z.B. 4r5r06 eingegeben (was meine Funktion zu 04.05.2006 macht) als mir in einem select-Feld die richtigen Werte zusammengefummelt. Zusätzlich baue ich auch noch http://www.mattkruse.com/javascript/calendarpopup/ mit ein, womit man ein Datum auch relativ bequem eingeben kann.
for($x = 1920; $x <= intval(date("Y")); $x ++)
Suchst du gerne einen Eintrag aus einem Select-Feld das über 80 Einträge enthält? Und was machst du wenn du ein Jahr in der Zukunft brauchst?
Serverseitig muss man dann (nach dem Prüfen des Datums auf Gültigkeit) nur noch die einzelnen Werte zusammensetzen:
$entered_date = $_POST['date']['year']."-".$_POST['date']['month']."-".$_POST['date']['day'];
Um das Datum Datenbanktauglich zu bekommen, verwende ich
$datum = preg_replace('~^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$~',"$3-$2-$1",$_POST['datum']);
(Nach dem Prüfen ist das Datum ja schon in dem Format das der reguläre Ausdruck erwartet) - man könnte natürlich auch die Felder per explode() auseinanderdröseln und wieder zusammenkleben - das wäre vermutlich sogar schneller ...
Grüße aus Nürnberg
Tobias