mod_i: unexpected error in date()

Hallo,

ich entwickle einmal auf XP mit der PHP Version 4.2.3 und unter UNIX mit der PHP Version 4.1.2

Der User besitzt die Möglichkeit mehrere Daten (Datumsangaben) eizugeben.

while(...){...
$datum[$i] = mktime (0, 0, 0, $LM[$i], $LT[$i], $jahr[$i] );
$datum[$i] = date("Y-m-d", $datum);

muss es hier nicht heißen date("Y-m-d", $datum[$i])?
Unter Version 4.1.2 gehts.

date("Y-m-d", $datum[$i] ) unter PHP Version 4.2.3 nicht.
Warning: unexpected error in date() in

Warum???

gruß mod_i

  1. ich entwickle einmal auf XP mit der PHP Version 4.2.3 und unter UNIX mit der PHP Version 4.1.2

    $datum[$i] = mktime (0, 0, 0, $LM[$i], $LT[$i], $jahr[$i] );
    $datum[$i] = date("Y-m-d", $datum);

    muss es hier nicht heißen date("Y-m-d", $datum[$i])?

    Ja. Du kannst es Dir nebenbei bemerkt auch ganz einfach machen und gleich

    $datum[$i] = date("Y-m-d",mktime (0, 0, 0, $LM[$i], $LT[$i], $jahr[$i] ));

    schreiben, denn Variablen lassen sich nur einige Male beschreiben, sind dann abgenutzt, damit unbrauchbar und müssen weggeworfen werden ;)

    Da es anscheinend nur um eine Formatierung dreier Zahlen geht, wäre es vielleicht sogar sinnvoll statt date() und mktime() einfach sprintf("%04d-%02d-%02d",$jahr,$monat,$tag) nehmen. Du mußt dann allerdings 100%ig sicherstellen, daß in dem Quelldaten kein Murks steht, wobei diese Sicherung allerdings wegen der detailieren Fehlermeldung ("Dieser Monat hat keine 50 Tage") manuell sogar günstiger ist, als wenn mktime() ungefragt die Eingabe korrigiert.
    Aber das nur als Anregung.

    Unter Version 4.1.2 gehts.

    date("Y-m-d", $datum[$i] ) unter PHP Version 4.2.3 nicht.
    Warning: unexpected error in date() in

    Prüfe, ob die Einstellungen zur Fehlermeldungsfreudigkeit von PHP auf beiden Systemen gleich sind. Die Übergabe von $datum ist in jedem Fall unsinnig, denn date() kann mit einem Feld eigentlich nichts anfangen. Vielleicht ist's auch ein Fehler in 4.1.2.

    Gruß,
      soenk.e

    1. Hi Sönke,
      Danke für Deine Ausfürliche Hilfe.

      »»Du mußt dann allerdings 100%ig sicherstellen, daß in dem Quelldaten kein Murks steht, wobei diese Sicherung allerdings wegen der detailieren Fehlermeldung ("Dieser Monat hat keine 50 Tage") manuell sogar günstiger ist, als wenn mktime() ungefragt die Eingabe korrigiert.

      Dem User steht für die Datumswahl je ein Select für (Tag),(Monat) und (Jahr) zur Verfügung so ist die Angabe ( 50 ) ausgeschlossen.

      Grüß mod_i

      1. »»Du mußt dann allerdings 100%ig sicherstellen, daß in dem Quelldaten kein Murks steht, wobei diese Sicherung allerdings wegen der detailieren Fehlermeldung ("Dieser Monat hat keine 50 Tage") manuell sogar günstiger ist, als wenn mktime() ungefragt die Eingabe korrigiert.

        Dem User steht für die Datumswahl je ein Select für (Tag),(Monat) und (Jahr) zur Verfügung so ist die Angabe ( 50 ) ausgeschlossen.

        Das ist ein Anfang, reicht aber nicht. Dein Formular kann noch so ausgefeilt sein, sobald jemand die POST-Anfrage selbst zusammenstellt (was beleibe alles andere als schwierig ist), ist Dein HTML-Formular inklusive <select>-Feldern und/oder Javascript-Prüfung vollkommen irrelevant.

        Prüfe von der bösen Welt da draußen empfangene Daten _immer_ dort, wo Du ganz sicher sein kannst, daß niemand mehr dazwischen funken kann! So eine Prüfung zu Deiner eigenen Sicherheit kann nur in Deinem PHP-Skript stattfinden, alle anderen "Barrieren" sind lediglich Komfort für die Benutzer.

        Gruß,
          soenk.e