Sunny: Auswahlfeld mit Datumsangaben als checked markieren

Hallo,

ich generiere mir mit php ein select Feld mit Datumsangaben (3 Monate).
Das Formular enthält noch weitere Eingabefelder. Bei einer möglichen Fehlermeldung nach Absenden des Formulars soll das eingegebene Datum als "checked" markiert bleiben.

  
$start = strtotime("+1 day");  
$end = strtotime("+3 month");  
$oneday = 24 * 60 * 60;  
  
echo "<select name=\"xxx\" size=\"1\">\n";  
echo "<option value=\"0000-00-00\">Bitte wählen Sie ein Datum aus</option>\n";  
for ($d = $start; $d <= $end; $d += $oneday)  
{  
if($_POST['xxx'] == "%Y-%m-%d")  
{  
echo strftime("<option value=\"%Y-%m-%d\" checked=\"checked\">%d.%m.%Y</option>\n", $d);  
}  
else  
{  
echo strftime("<option value=\"%Y-%m-%d\">%d.%m.%Y</option>\n", $d);  
}  
}  
echo "</select>";  

Leider ist mein Ansatz nicht der Richtige...

Freue mich auf einen guten Hinweis.

  1. Du hast das strftime() um den vergleich mit $_POST vergessen und vergleichst dort das Datum mit der Zeichenkette %Y-%m-%d".

    1. Vielen Dank für die Hinweise, aber ich mache wohl noch etwas falsch:

        
      if($_POST['xxx'] == strftime("%Y-%m-%d", $d))  
        
      if(strftime($_POST['xxx']) == strftime("%Y-%m-%d", $d))  
      
      

      Beides funktioniert leider nicht.

      1. Hi!

        Beides funktioniert leider nicht.

        "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung. Bitte schau genauer hin und mach vor allem Kontrollausgaben der beteiligten Werte.

        Lo!

      2. Hallo,

        if($_POST['xxx'] == strftime("%Y-%m-%d", $d))

        if(strftime($_POST['xxx']) == strftime("%Y-%m-%d", $d))

          
        tja, [EKKi hat noch einen Fehler gefunden](https://forum.selfhtml.org/?t=203421&m=1375336), der uns entgangen ist. Um herauszufinden, welcher Vergleich korrekt ist, könntest Du Debug-Ausgaben vornehmen.  
          
          
        Freundliche Grüße  
          
        Vinzenz
        
      3. Hi,

        Vielen Dank für die Hinweise, aber ich mache wohl noch etwas falsch:

        Hast du EKKis Hinweis berücksichtigt?

        if($_POST['xxx'] == strftime("%Y-%m-%d", $d))

        if(strftime($_POST['xxx']) == strftime("%Y-%m-%d", $d))

        
        > Beides funktioniert leider nicht.  
          
        Zweiteres ist ja auch kolossaler Blödsinn.  
        Bitte mit Verstand rangehen, nicht wild raten.  
          
        MfG ChrisB  
          
        
        -- 
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        
      4. Alles Prima! Es klappt natürlich doch. Aber es heißt selected="selected".

        Vielen Dank für eure Hilfe!

        Sunny

  2. Hi,

    if($_POST['xxx'] == "%Y-%m-%d")

    "%Y-%m-%d" ist hier nur ein Textliteral - du wendest keine Funktion darauf an, die dafür sorgen würde, dass das irgendwie ein formatiertes Datum darstellt.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. Mahlzeit Sunny,

    echo strftime("<option value="%Y-%m-%d" checked="checked">%d.%m.%Y</option>\n", $d);

    <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_vorselektiert@title=Das <option>-Element kennt kein Attribut namens "checked".>

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi,

      <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_vorselektiert@title=Das <option>-Element kennt kein Attribut namens "checked".>

      das hätte ich nicht übersehen dürfen, es gibt ja nicht viele, die dieses Attribut haben ...

      Freundliche Grüße

      Vinzenz

      1. <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_vorselektiert@title=Das <option>-Element kennt kein Attribut namens "checked".>

        das hätte ich nicht übersehen dürfen [...]

        Ich hab's auch übersehen, ChrisB ebenfalls - wir sollten den 17. Februar zum Tag der Codeblindheit erklären.

  4. Hallo,

    $oneday = 24 * 60 * 60;

    eine zu gewagte Annahme, der mancherzeit und mancherort gesetzliche Regelungen entgegenstehen. Rechne nicht in Sekunden, wenn Du in Tagen rechnen willst :-)

    if($_POST['xxx'] == "%Y-%m-%d")

    Du möchstest den Post-Parameter lieber mit einem formatierten Datumsstring, wie sie date() oder auch strftime() (was suit schon erwähnt hat) mit einem entsprechenden Formatstring erzeugt, vergleichen und nicht mit der Zeichenkette

    %Y-%m-%d

    Freundliche Grüße

    Vinzenz