Frage bezüglich einer CASE/SWITCH Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frage bezüglich einer CASE/SWITCH Abfrage

    Hallo zusammen,

    ich bin immer noch fleissig am testen und probieren und wage mich gerade an die Case Abfrage.

    Das Ziel ist das ich mir eine Variable anlege mit dem Aktuellen Zeitstempel "$timestamp = date("d.m.Y");"

    danach möchte ich eine case Abfrage machen die das aktuelle Datum "$timestamp" mit dem Datum vergleicht "14.01.2006" das ich fest vorgegeben habe.
    PHP-Code:
    case ("14.02.2006" >= $timestamp):
    echo 
    '<option value="...................    ';
    break; 
    Die ersten vier Abfragen oder Durchläufe funktionieren absolut sauber,
    (den Test mache ich in dem ich das Datum am lokalen Rechner ändere) nur wenn ich zur fünften Abfrage kommen möchte bzw. testen möchte springt das Script wieder auf die erste case Abfrage bzw. gibt mir das echo von Durchlauf eins aus.

    Leider weiß ich nicht warum? Vermuten kann ich nur das die Formatierung von meinem vorgegebenen Datum nicht stimmt und die case Abfrage am Datum "07.02.2006" scheitert.

    Ist das Richtig? Kann mir jemand ein Tipp geben wie ich es besser machen kann?

    vorab vielen dank

    Gruß hethkey


    Hier der fertige Code:

    PHP-Code:

    if (!isset($_GET['action'])) $_GET['action']="";
         
    ini_set ("display_errors"1); error_reporting(E_ALL E_NOTICE);
         include 
    "../css/default.css";

        echo 
    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>TOP Frame</title>
        </head>
        <body bgcolor="#a4c8ec">
        <br>
        <br>
        <script language="JavaScript">
        <!--
        function pulldown(form) {
                var pulldownmenu=form.dest.selectedIndex
                window.open(form.dest.options[pulldownmenu].value, target="home");
        }
        //-->
        </script>
        <div align="center"><form name="pulldownmenu">
        <select name="dest" size=1>'
    ;

         
    $timestamp date("d.m.Y");
         
            switch (
    $timestamp) {
            
            case (
    "10.01.2006" >= $timestamp):
                echo 
    '<option value="1.spieltag.php">1. Spieltag - 10.01.2006
                      <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                      <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                      <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                      <option value="5.spieltag.php">5. Spieltag - 07.02.2006
                      <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
    ;
                break;

            case (
    "17.01.2006" >= $timestamp):
                echo 
    '<option value="2.spieltag.php">2. Spieltag - 17.01.2006
                      <option value="1.spieltag.php">1. Spieltag - 10.01.2006
                      <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                      <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                      <option value="5.spieltag.php">5. Spieltag - 07.02.2006
                      <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
    ;
                break;

            case (
    "24.01.2006" >= $timestamp):
                echo 
    '<option value="3.spieltag.php">3. Spieltag - 24.01.2006
                      <option value="1.spieltag.php">1. Spieltag - 10.01.2006
                      <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                      <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                      <option value="5.spieltag.php">5. Spieltag - 07.02.2006
                      <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
    ;
                break;

            case (
    "31.01.2006" >= $timestamp):
                echo 
    '<option value="4.spieltag.php">4. Spieltag - 31.01.2006
                      <option value="1.spieltag.php">1. Spieltag - 10.01.2006
                      <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                      <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                      <option value="5.spieltag.php">5. Spieltag - 07.02.2006
                      <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
    ;
                break;

            case (
    "07.02.2006" >= $timestamp):
                 echo 
    '<option value="5.spieltag.php">5. Spieltag - 07.02.2006
                       <option value="1.spieltag.php">1. Spieltag - 10.01.2006
                       <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                       <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                       <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                       <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
    ;
                 break;

            case (
    "14.02.2006" >= $timestamp):
                 echo 
    '<option value="6.spieltag.php">6. Spieltag - 14.02.2006
                       <option value="1.spieltag.php">1. Spieltag - 10.01.2006
                       <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                       <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                       <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                       <option value="5.spieltag.php">5. Spieltag - 07.02.2006'
    ;
                 break;

            }


         
        echo 
    '</select>
        <input type="button" value="auswählen" onclick="pulldown(this.form)">
        </form></div>
        </body>
        </html>'


  • #2
    Du musst die Cases mit weiteren Bedinungen einschränken. Nehmen wir an dein $timestamp ist 09/01/06. Schau dir jetzt deine Bedingungen an. Auf welche trifft deine Bedingung zu ? Richtig auf alle !
    Du solltest also einen Bereich definieren z.B.
    PHP-Code:
    switch($timestamp){
        case(
    "10.01.06" > = $timestamp && $timestamp "17.01.06")
            
    //do some stuff
             
    break;
    ...

    Wenn der Vergleich von Strings überhaupt so sauber funzt. Ansonsten solltest du mit den UNIX Zeitstempeln arbeiten.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Hallo @jahlives, Hallo zusammen,

      danke für deinen Tipp aber das ganze scheitert weiterhin an der fünften Abfrage. Also wenn ich in ein und der selben Abfrage einen Sprung im Monat mache scheitert das Script.

      Auch habe ich eine zweite Seite gebastelt die nur 4. Spieltage im Februar abfrägt. Auch das hat funktioniert.

      Da du mir noch einen Tipp mit den Unix Zeitstempel gebeben hast habe ich noch folgendes gemacht um das Datum das ich fest setzen möchte zu formatieren.

      Hier ein Code Ausschnitt:
      PHP-Code:
      $timestamp date("d.m.Y");
           
      $spieltag1 date("d.m.Y"mktime (0,0,0,1,10,2006));
           
      $spieltag2 date("d.m.Y"mktime (0,0,0,1,17,2006));
           
      $spieltag3 date("d.m.Y"mktime (0,0,0,1,24,2006));
           
      $spieltag4 date("d.m.Y"mktime (0,0,0,1,31,2006));
           
      $spieltag5 date("d.m.Y"mktime (0,0,0,2,7,2006));
           
      $spieltag6 date("d.m.Y"mktime (0,0,0,2,14,2006));
           
      $spieltag7 date("d.m.Y"mktime (0,0,0,2,21,2006));
           

              switch (
      $timestamp) {

              case (
      $spieltag1 >= $timestamp && $timestamp $spieltag2):
                  echo 
      '<option value="1.spieltag.php">1. Spieltag - 10.01.2006
                        <option value="2.spieltag.php">2. Spieltag - 17.01.2006
                        <option value="3.spieltag.php">3. Spieltag - 24.01.2006
                        <option value="4.spieltag.php">4. Spieltag - 31.01.2006
                        <option value="5.spieltag.php">5. Spieltag - 07.02.2006
                        <option value="6.spieltag.php">6. Spieltag - 14.02.2006'
      ;
              break;

              case (
      $spieltag2 >= $timestamp && $timestamp $spieltag3):
                  echo 
      '<option value="2.spieltag.php">2. Spieltag - 17.01.2006 usw............... 
      Hier scheitere ich aber schon nach den dritten Durchlauf und komme garnicht zu Spieltag 4 und 5.

      Vielleicht kann mir noch einer einen Tipp geben was ich noch versuchen könnte.

      vorab vielen Dank

      Gruß hethkey
      Zuletzt geändert von hethkey; 13.01.2006, 01:10.

      Kommentar


      • #4
        Ich fürchte, dass ein >=-Vergleich von zwei Strings fehlerhaft ist. Denn grundsätzlich kannst du nur Zahlwerte (int,float) vergleichen. Ist einer der beiden keine Zahl wird PHP versuchen, das Ganze vor dem Vergleich in eine Zahl zu wandeln. Da du aber zwei Punkte drinn hast wird das sicher jämmerlich scheitern.
        Nu denn also nur mit den Unix Zeitstempeln arbeiten. Das sind nämlich int Zahlen und die kannst du sicherlich verlgleichen. Lass einfach bei allen Daten die du kreierst das date() weg. mktime() gibt dir dann den Zeitstempel in sec seit 1970 zurück.
        Diese kannst du dann sicherlich mit grösser kleiner Vergleichen in deinem Switch durchackern.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          da ist nix fehlerhaft beim Stringvergleich, doch vergleicht er Zeichen für Zeichen, also muß er mit dem englischen Format vergleichen
          YYYY-MM-DD dann funktioniert das auch!
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            @TBT
            Dat ich jetzt nix verstehen Er ruft doch jeweils date() auf um den timestamp auf "deutsch" zu trimmen.
            Ich wusste aber wirklich nicht, dass bei einem Vergleich dieser Art anscheinend keine Var Konvertierung (zu int oder float) vorgenommen wird. Ich dachte, dass dies nur mit Zahlen funzen würde.
            Wiedermal was gelernt

            @topicstarter
            Also dieser Code funzt bei mir einwandfrei
            PHP-Code:
            $timestamp date("d.m.Y");
            $spieltag1 date("d.m.Y"mktime (0,0,0,1,10,2006));

            switch(
            $timestamp){
                case 
            $timestamp $spieltag1:
                    echo 
            'Kleiner';
                break;
                case 
            $timestamp $spieltag1:
                    echo 
            'Grösser';
                break;

            Wenn ich an der Uhr rumspiele dann komme ich mal in die erste und mal in die zweite Bedingung. Die Vergleiche sollten also funzen...
            irgendwo muss sonst noch der Wurm drinn sein

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Gott war das wieder eine schwere Geburt, endlich habe ich die Lösung gefunden.

              Danke für eure Tipps und Tricks. War jetzt echt kurz vorm verzweifeln weil nichts funktionierte.

              Hier die Lösung vom Problem
              PHP-Code:

              $timestamp 
              date("Y-m-d");

              switch(
              $timestamp) {

                  case (
              "2006-01-31" >= $timestamp && $timestamp "2006-02-07"):
                      
              // echo 'HTML Code';
                  
              break;

                  case (
              "2006-02-07" >= $timestamp && $timestamp "2006-02-14"):
                      
              // echo 'HTML Code';
                  
              break;

              jetzt laufen alle Case Durchläufe sauber durch. Und Die Dropdown Optionen ändern seinen Status nach der Systemzeit.

              Nochmals vielen Dank für die Denkanstöße, wieder was dazugelernt. :-)

              Gruß Helmut

              Kommentar

              Lädt...
              X