Buubel: switch automatisch erstellen

Hallo!

Folgendes Problem:
In $anzahl hab ich eine Zahl, z. B. 10. Nun will ich eine switch-Anweisung erstellen, die case 1, case 2, usw. bis 10 enthält. Der Inhalt der cases besteht hauptsächlich aus Variablen, deren Inahlt dann unterschiedlich ist. Das ganze soll automatisch erstellt werden. Ich hab das mal mit einer for-Schleife probiert, leider ohne Erfolg. Weiß jemand, wie das geht, ohne das PHP nur Fehlermeldungen ausgibt oder aber die Auswertung der cases nicht funktioniert?

Mfg Buubel

  1. hi,

    In $anzahl hab ich eine Zahl, z. B. 10. Nun will ich eine switch-Anweisung erstellen, die case 1, case 2, usw. bis 10 enthält. Der Inhalt der cases besteht hauptsächlich aus Variablen, deren Inahlt dann unterschiedlich ist. Das ganze soll automatisch erstellt werden. Ich hab das mal mit einer for-Schleife probiert, leider ohne Erfolg.

    Und wie sah das aus?

    Weiß jemand, wie das geht, ohne das PHP nur Fehlermeldungen ausgibt oder aber die Auswertung der cases nicht funktioniert?

    Dir ist schon klar, dass irgendwelche "Ausgaben" von PHP nicht als PHP-Code interpretiert werden?

    Wenn schon, dann müsstest du die Ausgabe in einem String vorhalten, und diesen anschließend per eval() auswerten lassen.
    Solche Art von Programmierung gilt aber idR. als ziemlich schlechter Stil.

    Was ist also dein eigentliches Problem?
    Ggf. ließe es sich ja anders lösen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Moin!

      Und wie sah das aus?

      So:

        
      $anzahl = 10;  
        
      for ($c = 1; $c <= $anzahl; $c++) {  
      $switc = "  
      \$c:  
      \$inhalt = \"text mit $variable\"\;  
      break\;  
      "; }  
        
        
      switch($pic)  
        
      {  
      case $switc;  
        
      default:  
      $inhalt = "standard";  
      break;  
      }  
      
      

      Ich habe alle kritischen Zeichen "escaped". Ich dachte, da würde dann sowas wie

        
      case 1:  
      $inhalt = "text mit $variable";  
      break;  
      
      

      für PHP stehen...

      Dir ist schon klar, dass irgendwelche "Ausgaben" von PHP nicht als PHP-Code interpretiert werden?

      Nicht wirklich.

      Was ist also dein eigentliches Problem?

      Ich brauche so viele cases wie der Wert von $anzahl.

      Ggf. ließe es sich ja anders lösen.

      Hoffentlich!! (-:

      Mfg Buubel

      1. hi,

        Was ist also dein eigentliches Problem?
        Ich brauche so viele cases wie der Wert von $anzahl.

        Und wozu?

        Ggf. ließe es sich ja anders lösen.
        Hoffentlich!! (-:

        Na klar, wenn du deine Problembeschreibung präzisiert.

        Komme dabei bitte von den "Cases" weg - und beschreibe, was du eigentlich erreichen willst.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi!

          Komme dabei bitte von den "Cases" weg - und beschreibe, was du eigentlich erreichen willst.

          Sorry, vielleicht war das wirklich noch zu ungenau. Mit der switch-Anweisung will ich $_GET auswerten. Je nachdem, welcher Parameter übergeben wurde, soll ein anderes Bild angzeigt werden (Bespiel: bilder.php?pic=1). Ich habe so viele Bilder wie in $anzahl, folglich gibt es für "bilder.php?pic=" $anzahl-Möglichkeiten. Da ich die Bilder nicht selber zähle (zum Glück nicht!!), muss auch die switch-Anweisung automatisch erzeugt werden und "mitwachsen". Ich hoffe, das konkretisiert mein Problem!

          Schönen rest-Sonntag noch.
          Buubel

          1. Hellihello

            wenn es nur um das navigieren bzw. das einbinden von bildern geht, könnte ich mir vorstellen, dass du zu kompliziert rangehst.

            code zu generieren ist ja u.u. ein hübsche sache. deinen code hab ich jetzt nicht angeschaut, aber u.u. könnte die auch der output buffer ob_start() dabei helfen;

            gruß,

            frankx

          2. echo $begrüßung;

            Mit der switch-Anweisung will ich $_GET auswerten. Je nachdem, welcher Parameter übergeben wurde, soll ein anderes Bild angzeigt werden (Bespiel: bilder.php?pic=1). Ich habe so viele Bilder wie in $anzahl, folglich gibt es für "bilder.php?pic=" $anzahl-Möglichkeiten. Da ich die Bilder nicht selber zähle (zum Glück nicht!!), muss auch die switch-Anweisung automatisch erzeugt werden und "mitwachsen".

            Festen Code für variable Gegebenheiten zu schreiben ist, wie du siehst, aufwendig bis unmöglich.

            Den Code im laufenden Betrieb zusammenzusetzen und dann auszuführen (eval(...)), ist auch nicht besonders clever. Wenn man damit keine Erfahrung hat, baut man sich möglicherweise Löcher in seinen Code. Meist gibt es eine Lösung, die ohne eval() auskommt.

            Gibt es eine feste Regel, wie aus einem beliebigen Eingangswert ein bestimmter Ausgangswert berechnet werden soll, kann man sich dafür eine Funktion schreiben.

            Gibt es keine solche feste Regel, kann man sich einer Datenhaltung (Datenbank, Datei, ...) bedienen, die für jeden Eingangswert einen passenden Ausgangswert liefert.

            echo "$verabschiedung $name";

          3. Hallo

            Sorry, vielleicht war das wirklich noch zu ungenau. Mit der switch-Anweisung will ich $_GET auswerten. Je nachdem, welcher Parameter übergeben wurde, soll ein anderes Bild angzeigt werden (Bespiel: bilder.php?pic=1). Ich habe so viele Bilder wie in $anzahl, folglich gibt es für "bilder.php?pic=" $anzahl-Möglichkeiten. Da ich die Bilder nicht selber zähle (zum Glück nicht!!), muss auch die switch-Anweisung automatisch erzeugt werden und "mitwachsen". Ich hoffe, das konkretisiert mein Problem!

            Du brauchst aber doch sowieso eine Zuordnung also zum Beispiel:

            pic=1 ===> hund.jpg anzeigen
            pic=2 ===> katze.jpg anzeigen
            pic=3 ===> pelikan.jpg anzeigen

            Diese Zuordnung könnte man über eine Datenbank erreichen, oder über eine reine Textdatei (Sind jetzt nur zwei Möglichkeiten, die mir spontan einfallen) Du sagst, du zählst die Bilder nicht selber, heißt das, du willst auch die Zuordnung nicht selber machen?

            liebe Grüße

            Michael

            Edit: Meinst du vielleicht folgendes: Du hast ein Verzeichnis mit (vielen) Bildern drin und willst nun bei pic=1 das "erste" ausgeben, bei pic="2" das zweite, usw...? Dann wäre es am einfachsten, die Verzeichnisstruktur auszulesen und das ganze in ein array abzuspeichern:

              
            //Die Namen der einzelnen Bilder aus dem festgelegten Verzeichnis holen  
            $dirobj=@dir($cfg_albumdir);  
            if($dirobj===false)  
            {  
               $fehler="FEHLER: kein Album";  
            }  
            else  
            {  
               while($item=$dirobj->read())  
               {  
                  //MS - Hack: ausser . und .. auch verhindern, dass Thumbs.db mitgezaehlt wird  
                  if($item=="." or $item==".." or $item=="Thumbs.db")  
                  {  
                    continue;  
                  }  
                  if(is_dir($cfg_albumdir."/".$item))  
                  {  
                    $fehler="FEHLER: Unterverzeichnis in Bilderverzeichnis";  
                    break;  
                  }  
                  //Dateinamen in array speichern  
                  $wert=intval($item);  
                  if($arr_bildnamen[$wert]!="")  
                  {  
                     $fehler="FEHLER: Bildnummer kommt doppelt vor:".$wert;  
                     break;  
                  }  
                  else  
                  {  
                     $arr_bildnamen[$wert]=$item;  
                  }  
                } //ende while  
              }  
            
            

            Der Schnippsel ist ein Beispiel von mir. Normalerweise heißt das ja hier SELF, aber als Denkanstoß ist es vielleicht interessant.
            Zum Beispiel müßtest du noch $cfgAlbumdir festlegen. Zusätzlich müssen die Dateinamen der Bildwer für dieses Script mit einer Nummer beginnen, die auch nicht doppelt vorkommen darf, aber die Prüfung kannst du ja rausnehmen.

            1. Hallo Ingrid

              Diese Zuordnung könnte man über eine Datenbank erreichen, oder über eine reine Textdatei (Sind jetzt nur zwei Möglichkeiten, die mir spontan einfallen) Du sagst, du zählst die Bilder nicht selber, heißt das, du willst auch die Zuordnung nicht selber machen?

              Upps, sorry an Dedlfix, hatte gar nicht gesehen, dass ich im Prinzip nur deine Antwort wiederholt habe. Nächstes mal pass ich besser auf, versprochen...

              liebe Grüße

              Michael

              Jau, jetzt ist es raus, wofür das m im mbr steht ;-)

              liebe Grüße

              mbr

  2. gudn tach!

    In $anzahl hab ich eine Zahl, z. B. 10. Nun will ich eine switch-Anweisung erstellen, die case 1, case 2, usw. bis 10 enthält. Der Inhalt der cases besteht hauptsächlich aus Variablen, deren Inahlt dann unterschiedlich ist.

    praezisiere mal jenen inhalt.

    auf dein spaeteres beispiel bezogen waere es am einfachsten, auf for-schleife und switch zu verzichten:

      
    // $pic sei vorgegeben  
    if($pic>0 && $pic<=$anzahl)  
      $inhalt = "text mit $pic";  
    else  
      $inhalt = 'standard';
    

    oder kuerzer:

      
      $inhalt=(in_array($pic, range(1, $anzahl))? 'text mit '.$pic : 'standard';
    

    prost
    seth