Veröffentlicht 13. März 200520 j Hallo, wie kann ich eine eingabe pruefen ob es im Format YYYY-MM-YY eingegeben wurde? Da ich mit Regulären Ausdrücken auf Kriegsfuß stehe, möchte ich sie nicht verwenden. Kann ich da evtl die Funktion strtotime() zweckentfremden oder gibts ne bessere Lösung?
14. März 200520 j meiner Meinung nach, wäre es mit einem RegEx am besten/schnellsten getan... Gruß, Markus
14. März 200520 j Nunja, kills hat ja eigentlich recht... aber du kannst RegEx mehr oder weniger auf einer anderen "einfacheren" art schreiben: mit split() Du lässt das Datum als String eingeben und splitest es an den "-". Sollte einer der drei neuen Strings leer sein ->Ausgabe"Fehler" Ansonsten kannst du über ne If (bereichs)abfrage checken ob die werte passen: Pseudocode (orientiert an PHP): if ($year > 2050 && $year < 1950){ ausgabe"fehler" } if ($month = 1 || $month = 3 || month = 5 || ...){ #Monate mit 31 Tagen, bitte macht was schöneres draus if($day < 1 || $day > 31){ Ausgabe"Fehler"; } #und so weiter } [/php]
14. März 200520 j Problem bei SNOWMANs Ansatz sind dann noch die Schaltjahre Ich würde am ehesten die strtotime()-Funktion verwenden: if (strtotime($mein_datum) != -1) ... [/PHP]
14. März 200520 j nur mal ein kleiner einschub. mein chef hat mich vor kurzen auf eine ganz coole idee gebracht. wir entwickelten ein cms für einen kunden und haben dort beschlossen datums und uhrzeiten in jedem erdenklichen foormat zuzulassen. natürlich erfordert das ein bisschen js bzw php checking, aber im edneffekt war unser kunde total begeistert und wunderte sich dass er datums und uhrzeiten so eingeben kann wie er will und nicht immer fehlermedlungen alls (bitte das datum im format tt-mm-jjj) eingeben. er kann nun z.b. für das datum 01.01.2005 folgende formate eingeben 1.1.5 01.1.05 1.01.2005 1.1.005 01.01.2005 (natürlich ) ... bei uhrzeiten kann er z.b. für 00.30 0.30 00:30 0:30 00.30 für 00:03 0.3 0:3 00:3 00.3 etc. find ich einfach sehr cool ansonsteon viel erfolg bei der lösung deines probs, ich denke auch, dass die regEx lösung wohl die beste sein wird wenn du ein gewisses format vorgibst.
14. März 200520 j er kann nun z.b. für das datum 01.01.2005 folgende formate eingeben 1.1.5 01.1.05 1.1.005 01.01.2005 (natürlich ) Ja klar, man muss ja auch an den Umsatz in der Zukunft denken, hat ja schonmal geklappt. etc. find ich einfach sehr cool ansonsteon viel erfolg bei der lösung deines probs, ich denke auch, dass die regEx lösung wohl die beste sein wird wenn du ein gewisses format vorgibst. Nein! dafür gibt es checkdate http://de.php.net/checkdate Gruß Jaraz
14. März 200520 j hey, als kleiner vorschlag zur "stabilisierung" deines Skripts: Mach anstelle von Eingabefeldern "Dropdownlisten" so KANN man garnichts falsches eingeben
14. März 200520 j also nach allem hin und her denke ich, dass ich es so mache: Je ein Textfeld fuer Tag, Monat, Jahr dann mach ich checkdate(). Das mit Dropdown: Wenn der User klug genug ist schon, aber er kann ja dann auch den 31. April eingeben, was nicht so doll wäre. Also so funktionierts sehr gut: if(@checkdate($_POST["beginn_monat"],$_POST["beginn_tag"],$_POST["beginn_jahr"]) && @checkdate($_POST["ende_monat"],$_POST["ende_tag"],$_POST["ende_jahr"]))
14. März 200520 j hmm... du kannst ja die auswahlmöglichkeiten abhängig der wahl machen. als erstes muss er das jahr auswählen, dann wird der monat freigegeben, nach auswahl dieses wird anhand des ausgewählten Monats die Tagesanzahl bestimmt, isses Februar wird aufs jahr geuckt ob 28 oder 29. und wenn die anzahl der tage festgelegt sind wird das feld für die tage freigegeben. erfordert n bisschen aufwand aber so ist es zu 100% sichergestellt das der user nix falsches eingibt, kann er ja auch garnet
14. März 200520 j Hi, egal ob man per Javascript irgendwas freischaltet, kritische Daten müssen immer auf den Server überprüft werden. Ich kann Formulare auch ohne das entsprechende Formular abschicken und wilde Werte, bis zu SQL Injection Strings übermitteln, egal ob es sich um eine Checkbox, select-box mit Zahlen oder was auch immer handelt. Gruß Jaraz
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.