Malcolm Beck´s: Switch - Case soll werte aus Array auslesen

hi,

wie kann ich es anstellen, das sich die case in einem Switch die Werte aus einem Array holen?

Ich lese ein Verzeichnis mit Bildern aus und packe alle gefundenen Bilder in ein Array, jetzt möchte ich mittels Switch eine "Bild wechsel Funktion" bauen, die mit $_GET halt die Bilder austauscht, nur weiss ich einfach nicht wie ich das case Dynamisch füllen kann.

  
    $dir = "./ge-bilder";  
    $bild_array = Array();  
  
    if(is_dir($dir))    {  
        $handle = opendir($dir);  
        if(is_resource($handle))    {  
            while($file = readdir($handle))    {  
                if($file != "." && $file != ".."  && $file != "Thumbs.db")  
                    array_push($bild_array, $file);  
            }  
        }  
    }  
    print_r($bild_array);

Irgendwelche Ideen?

Mittels Javascript hab ich das schon Fertig, dieses mit $_GET wird eine noscript Alternative.

grüße

  1. wie kann ich es anstellen, das sich die case in einem Switch die Werte aus einem Array holen?

    if ist nun auch nicht so schlimm.

    Ich lese ein Verzeichnis mit Bildern aus und packe alle gefundenen Bilder in ein Array, jetzt möchte ich mittels Switch eine "Bild wechsel Funktion" bauen, die mit $_GET halt die Bilder austauscht

    while($file = readdir($handle))    {
                    if($file != "." && $file != ".."  && $file != "Thumbs.db")
                        array_push($bild_array, $file);
                }

    Da sehe ich, wie du das Feld mit Dateinamen füllst, aber nicht, was du damit anstellen willst. Wozu _genau_ brauchst du die case-Abfrage, wie stellst du dir die Funktion vor? "Bildwechsel" kann vieles sein. Schreib' doch mal ein wenig Pseudocode.

    1. hi,

      wie kann ich es anstellen, das sich die case in einem Switch die Werte aus einem Array holen?

      if ist nun auch nicht so schlimm.

      Stimmt, aber für mich ist hier ein Switch eher angebracht.

      Da sehe ich, wie du das Feld mit Dateinamen füllst, aber nicht, was du damit anstellen willst. Wozu _genau_ brauchst du die case-Abfrage, wie stellst du dir die Funktion vor? "Bildwechsel" kann vieles sein. Schreib' doch mal ein wenig Pseudocode.

      Hier erstmal ein Link wo man sehen kann was das Ziel ist.
      http://kultdose.de/beispiele/selfhtml/kaufen.php

      Bei aktiviertem Javascript werden die bilder bei klick ausgetauscht, wenn Javascript deaktiviert ist soll der Bildaustausch via Switch passieren, und da weiss ich nicht, wie ich die case mit den $_GET Werten (Bildnamen) füllen soll.

      Sorry, aber ich weiss nicht wie ich es genauer erklären soll.

      grüße

      1. Hallo

        wie kann ich es anstellen, das sich die case in einem Switch die Werte aus einem Array holen?

        if ist nun auch nicht so schlimm.

        Stimmt, aber für mich ist hier ein Switch eher angebracht.

        Obwohl es vollkommen unangebracht ist.

        Bei aktiviertem Javascript werden die bilder bei klick ausgetauscht, wenn Javascript deaktiviert ist soll der Bildaustausch via Switch passieren, und da weiss ich nicht, wie ich die case mit den $_GET Werten (Bildnamen) füllen soll.

        Nochmal, welche vielen GET-Werte erwartest du denn? Ich sehe nur zwei Parameter (z.B. objekt-gelsenkirchen, p7), die beide leer sind, also keine Werte haben. Da ist also garnix.

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.2
        1. hi,

          Stimmt, aber für mich ist hier ein Switch eher angebracht.
          Obwohl es vollkommen unangebracht ist.

          Warum? Welche möglichkeit sollte ich hier nutzen?

          Nochmal, welche vielen GET-Werte erwartest du denn? Ich sehe nur zwei Parameter (z.B. objekt-gelsenkirchen, p7), die beide leer sind, also keine Werte haben. Da ist also garnix.

          Doch, da sind schon die Werte im Parameter, die ich für das Switch benötige, wenn das Switch fertig generiert ist soll es wie folgt aussehen.

          $page = $_GET['objekt-gelsenkirchen'];  
            
          switch($page) {  
            
          case "p":  
            
           echo '<img src="ge-bilder/p.jpg" width="250" id="'.$mein_objekt.'" alt="" />' ; break;  
            
          case "p1":  
            
           echo '<img src="ge-bilder/p1.jpg" width="250" id="'.$mein_objekt.'" alt="" />' ; break;  
            
          case "p2":  
            
           echo '<img src="ge-bilder/p2.jpg" width="250" id="'.$mein_objekt.'" alt="" />' ; break;  
            
          case "p3":  
            
           echo '<img src="ge-bilder/p3.jpg" width="250" id="'.$mein_objekt.'" alt="" />' ; break;  
            
          /* usw bis "p7" */  
            
          default: break;  
          }
          

          Es geht lediglich darum, die Werte "p" bis "p7" in die Case zu bekommen.

          grüße

          1. Hallo

            Doch, da sind schon die Werte im Parameter, die ich für das Switch benötige, wenn das Switch fertig generiert ist soll es wie folgt aussehen.

            $page = $_GET['objekt-gelsenkirchen'];

            Bitte kein unnötiges Umkopieren

            Weiterhin gehe ich davon aus, dass Du das Vorhandensein dieses Parameters

            bereits überprüft hast.

            if ([link:http://www.php.net/manual/de/function.in-array.php@title=in_array]($_GET['objekt-gelsenkirchen' . 'jpg', $bild_array) {
                # Wenn die Datei in der Liste der erlaubten Dateien ist, dann gebe es aus
                $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen' . 'jpg';
            }
            else {
                # Sonst gebe ein Standardbild aus
                $ziel = 'ge-bilder/' . $bild_array[0];
            }

            Anmerkung zur nächsten Zeile

            Statt direkt auszugeben, würdest Du besser gemäß EVA-Prinzip arbeiten.

            echo '<img src="'
                    . $ziel
                    . '" width="250" id="'
                    . $mein_objekt
                    . '" alt="" />' ;

            }

              
            Der hartcodierten Pfad zum Verzeichnis solltest Du übrigens auch noch in eine Variable oder sogar eine Konstante packen.  
              
            Ist doch viel kürzer und flexibler als mit switch-case ...  
              
              
            Freundliche Grüße  
              
            Vinzenz
            
            1. hi,

              $page = $_GET['objekt-gelsenkirchen'];

              Bitte kein unnötiges Umkopieren

              Ja, doofe Angewohnheit, muss ich mir mal auf meine Hände schreiben. :)

              if ([link:http://www.php.net/manual/de/function.in-array.php@title=in_array]($_GET['objekt-gelsenkirchen' . 'jpg', $bild_array) {

              }

                
              Danke für das beispiel, in\_array kannte ich nicht, steig da aber auch irgendwie nicht durch, was ist denn jetzt an dem folgenden falsch?  
                
                
              ~~~php
              echo $_GET['objekt-gelsenkirchen']; /* Kontroll ausgabe für mich */  
                
              if (in_array($_GET['objekt-gelsenkirchen'], $bild_array)) {  
                  $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen'];  
              }  
              else {  
                  # Sonst gebe ein Standardbild aus  
                  $ziel = 'ge-bilder/' . $bild_array[0];  
              }  
                
              # Anmerkung zur nächsten Zeile  
              # Statt direkt auszugeben, würdest Du besser gemäß EVA-Prinzip arbeiten.  
              echo '<img src="'  
                      . $ziel  
                      . '" width="250" id="'  
                      . $mein_objekt  
                      . '" alt="" />' ; 
              

              Mir wird aber nur das Standard Bild angzeigt, obwohl im
              [code lang=php]$_GET['objekt-gelsenkirchen']
              [\code] das benötigte drinsteht.

              Der hartcodierten Pfad zum Verzeichnis solltest Du übrigens auch noch in eine Variable oder sogar eine Konstante packen.

              Das wollte ich mir bis zum Schluss aufheben, wenn ich fertig bin soll sich alles aus Variablen steuern lassen.

              Ist doch viel kürzer und flexibler als mit switch-case ...

              Ja, das ist Wahr.

              grüße

              1. Hallo

                Danke für das beispiel, in_array kannte ich nicht, steig da aber auch irgendwie nicht durch, was ist denn jetzt an dem folgenden falsch?

                echo $_GET['objekt-gelsenkirchen']; /* Kontroll ausgabe für mich */

                if (in_array($_GET['objekt-gelsenkirchen'], $bild_array)) {
                    $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen'];
                }
                else {
                    # Sonst gebe ein Standardbild aus
                    $ziel = 'ge-bilder/' . $bild_array[0];
                }

                  
                
                > Mir wird aber nur das Standard Bild angzeigt, obwohl im  
                > ~~~php
                
                $_GET['objekt-gelsenkirchen']  
                
                > 
                
                ~~~ das benötigte drinsteht.  
                  
                Nicht auf der von Dir verlinkten Seite.  
                Vergleiche bitte Deinen Code mit meinem Code:  
                  
                ~~~php
                  
                if (in_array($_GET['objekt-gelsenkirchen' . 'jpg', $bild_array) {  
                    # Wenn die Datei in der Liste der erlaubten Dateien ist, dann gebe es aus  
                    $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen' . 'jpg';  
                }  
                else {  
                    # Sonst gebe ein Standardbild aus  
                    $ziel = 'ge-bilder/' . $bild_array[0];  
                }  
                
                

                Natürlich machst Du Dir das Leben leichter, wenn Du die Dateiendung gleich mit in den Parameter packst ...

                Freundliche Grüße

                Vinzenz

                1. hi,

                  Nicht auf der von Dir verlinkten Seite.

                  Ich hatte es Lokal getestet, habe es jetzt hoch geladen, funktioniert aber immer noch nicht.

                  Vergleiche bitte Deinen Code mit meinem Code:

                  Da fehlen ja ein Paar schliessende Elemente z.b. )], die hab ich ersetzt, da ich andernfalls nur Error bekomme.

                  if (in_array($_GET['objekt-gelsenkirchen'] . 'jpg', $bild_array)) {  
                      # Wenn die Datei in der Liste der erlaubten Dateien ist, dann gebe es aus  
                      $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen'] . 'jpg';  
                  }  
                  else {  
                      # Sonst gebe ein Standardbild aus  
                      $ziel = 'ge-bilder/' . $bild_array[0];  
                  }
                  

                  Natürlich machst Du Dir das Leben leichter, wenn Du die Dateiendung gleich mit in den Parameter packst ...

                  Das habe ich auch geändert, das Script will aber irgendwie nicht.

                  http://kultdose.de/beispiele/selfhtml/kaufen.php?objekt-gelsenkirchen=p.jpg

                  grüße

                  1. Hallo

                    Natürlich machst Du Dir das Leben leichter, wenn Du die Dateiendung gleich mit in den Parameter packst ...

                    Das habe ich auch geändert, das Script will aber irgendwie nicht.
                    http://kultdose.de/beispiele/selfhtml/kaufen.php?objekt-gelsenkirchen=p.jpg

                    ist das
                        p.jpg (bzw. p1.jpg, ... p7.jpg)
                    eine Debug-Ausgabe?

                    Wenn nein
                        dann baust Du die Ausgabe falsch zusammen.
                    Sonst
                        schau Dir bitte den Inhalt Deines Arrays mit var_dump() an.
                    Ende Wenn

                    Freundliche Grüße

                    Vinzenz

                    1. hi,

                      ist das
                          p.jpg (bzw. p1.jpg, ... p7.jpg)
                      eine Debug-Ausgabe?

                      Das ist der inhalt von $_GET['objekt-gelsenkirchen']

                      Wenn nein dann baust Du die Ausgabe falsch zusammen.
                      Sonst schau Dir bitte den Inhalt Deines Arrays mit var_dump() an.
                      Ende Wenn

                      Ich hab jetzt noch mal alles neu hochgeladen, das ganze Script sieht nun so aus, (ungekürzt)

                      <?php  
                        
                         $neues_objekt = 'gelsenkirchen';  
                         $objekt_bilder_pfad ='./ge-bilder';  
                         $mein_objekt = 'objekt-'.$neues_objekt;  
                        
                            $bild_array = Array();  
                        
                            if(is_dir($objekt_bilder_pfad))    {  
                                $handle = opendir($objekt_bilder_pfad);  
                                if(is_resource($handle))    {  
                                    while($file = readdir($handle))    {  
                                        if($file != "." && $file != ".."  && $file != "Thumbs.db")  
                                            array_push($bild_array, $file);  
                                    }  
                                }  
                         else{  
                                    echo "&Ouml;ffnen fehlgeschlagen";  
                                }  
                            }  
                         else{  
                                echo "Verzeichnis existiert nicht";  
                            }  
                        
                      echo ' in <strong>$_GET[\'objekt-gelsenkirchen\']</strong> ist <strong>'. $_GET['objekt-gelsenkirchen'].'</strong>';  
                        
                      if (in_array($_GET['objekt-gelsenkirchen'] . 'jpg', $bild_array)) {  
                          # Wenn die Datei in der Liste der erlaubten Dateien ist, dann gebe es aus  
                          $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen'] . 'jpg';  
                      }  
                      else {  
                          # Sonst gebe ein Standardbild aus  
                          $ziel = 'ge-bilder/' . $bild_array[0];  
                      }  
                        
                        
                      # Anmerkung zur nächsten Zeile  
                      # Statt direkt auszugeben, würdest Du besser gemäß EVA-Prinzip arbeiten.  
                      echo '<img src="'  
                              . $ziel  
                              . '" width="250" id="'  
                              . $mein_objekt  
                              . '" alt="" />' ;  
                        
                      echo '<p>';  
                      var_dump($bild_array);  
                      echo '</p>';  
                        
                      echo '<p>'.$ziel.'</p>'; /* es wird nur der else Teil ausgegeben */  
                        
                          echo '</div><div class="thumb_ansicht">';  
                        
                         foreach($bild_array as $bild_neue_links => $file )  {  
                        
                         $newfile = str_replace(".jpg", "", $file);  
                         $new_objekt_bilder_pfad = str_replace("./", "",$objekt_bilder_pfad).'/'.$file;  
                        
                         echo '  
                        <a href="?'.$mein_objekt.'='.$file.'" onclick="Bildtauschen(\''.$mein_objekt.'\', \''.$new_objekt_bilder_pfad.'\');return false">  
                        <img src="'.$new_objekt_bilder_pfad.'" width="30" alt="Bild" /></a>  
                        ';  
                        
                          }  
                        ?>
                      

                      Es wird nur der else teil ausgegeben. Woran könnte es liegen?
                      http://ideallocal.test/ideal-data/kaufen.php

                      grüße

                      1. Hallo Malcolm,

                        Da Du jetzt p.jpg und vergleichbare Werte in $_GET['objekt-gelsenkirchen'] stehen hast, darfst Du die Endung natürlich nicht mehr nochmals anhängen.
                        Bei Deinem ersten Beispiel hattest Du nur

                        p, p1, p2, ..., p7

                        als Parameter übergeben.

                        if (in_array($_GET['objekt-gelsenkirchen'] . 'jpg', $bild_array)) {
                            # Wenn die Datei in der Liste der erlaubten Dateien ist, dann gebe es aus
                            $ziel =  'ge-bilder/' . $_GET['objekt-gelsenkirchen'] . 'jpg';
                        }

                        Freundliche Grüße

                        Vinzenz

                        1. hi Vinzenz,

                          Da Du jetzt p.jpg und vergleichbare Werte in $_GET['objekt-gelsenkirchen'] stehen hast, darfst Du die Endung natürlich nicht mehr nochmals anhängen.
                          Bei Deinem ersten Beispiel hattest Du nur

                          p, p1, p2, ..., p7

                          als Parameter übergeben.

                          Jo, Tatsache, konnte ja nur so ne Kleinigkeit sein. :)

                          Hab auch wie ich grad gesehen hab auf mein Localhost verlinkt, so verwirrt war ich. :)

                          Hier nochmal für interessierte - http://kultdose.de/beispiele/selfhtml/kaufen.php

                          Vielen Dank dir und allen beteiligten.

                          grüße

  2. Hallo

    $dir = "./ge-bilder";
        $bild_array = Array();

    if(is_dir($dir))    {
            $handle = opendir($dir);
            if(is_resource($handle))    {
                while($file = readdir($handle))    {
                    if($file != "." && $file != ".."  && $file != "Thumbs.db")
                        array_push($bild_array, $file);
                }
            }
        }
        print_r($bild_array);

      
    Ich sehe da kein switch oder case. Du baust ein Array mit den Bildern zusammen, weiter nichts. Wenn du ein anderes Problem hat, solltest du auch den \_dafür\_ relevanten Code rausrücken.  
      
    Tschö, Auge  
    
    -- 
    Die deutschen Interessen werden am Liechtenstein verteidigt.  
      
    [Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)
    
    1. hi,

      Ich sehe da kein switch oder case. Du baust ein Array mit den Bildern zusammen, weiter nichts. Wenn du ein anderes Problem hat, solltest du auch den _dafür_ relevanten Code rausrücken.

      Das ist ja das Problem, ich weiss nicht wo ich ansetzen soll.

      Was ich bisher habe sieht folgender massen aus

      <?php  
        
       $neues_objekt = 'gelsenkirchen';  
       $objekt_bilder_pfad ='./ge-bilder';  
       $mein_objekt = 'objekt-'.$neues_objekt;  
        
        
          $dir = $objekt_bilder_pfad;  
          $bild_array = Array();  
        
          if(is_dir($dir))    {  
              $handle = opendir($dir);  
              if(is_resource($handle))    {  
                  while($file = readdir($handle))    {  
                      if($file != "." && $file != ".."  && $file != "Thumbs.db")  
                          array_push($bild_array, $file);  
                  }  
              }  
       else{  
                  echo "&Ouml;ffnen fehlgeschlagen";  
              }  
          }  
       else{  
              echo "Verzeichnis existiert nicht";  
          }  
        
        
      echo '<img src="'.$dir.'/'.$bild_array[0].'" width="250" id="'.$mein_objekt.'" alt="Objekt '.$neues_objekt.', Bilder" />';  
        
        
       foreach($bild_array as $bild_neue_links => $file )  {  
        
       $newfile = str_replace(".jpg", "", $file);  
       $new_objekt_bilder_pfad = str_replace("./", "",$objekt_bilder_pfad).'/'.$file;  
        
       echo '  
      <a href="?'.$mein_objekt.'&'.$newfile.'" onclick="Bildtauschen(\''.$mein_objekt.'\', \''.$new_objekt_bilder_pfad.'\');return false">  
      <img src="'.$new_objekt_bilder_pfad.'" width="30" alt="Bild" /></a>  
      ';  
        
        }  
        
      ?>
      

      Wie ein Switch aufgebaut wird weiss ich auch, aber wie ich die Case mit dem array füttern soll weiss ich nicht.

      grüße

      1. Hallo

        Ich sehe da kein switch oder case. Du baust ein Array mit den Bildern zusammen, weiter nichts. Wenn du ein anderes Problem hat, solltest du auch den _dafür_ relevanten Code rausrücken.

        Das ist ja das Problem, ich weiss nicht wo ich ansetzen soll.

        Was ich bisher habe sieht folgender massen aus

        <?php

        echo '<img src="'.$dir.'/'.$bild_array[0].'" width="250" id="'.$mein_objekt.'" alt="Objekt '.$neues_objekt.', Bilder" />';

        foreach($bild_array as $bild_neue_links => $file )  {

        $newfile = str_replace(".jpg", "", $file);
        $new_objekt_bilder_pfad = str_replace("./", "",$objekt_bilder_pfad).'/'.$file;

        echo '
        <a href="?'.$mein_objekt.'&'.$newfile.'" onclick="Bildtauschen(''.$mein_objekt.'', ''.$new_objekt_bilder_pfad.'');return false">
        <img src="'.$new_objekt_bilder_pfad.'" width="30" alt="Bild" /></a>
        ';

        }

        ?>

        
        >   
        > Wie ein Switch aufgebaut wird weiss ich auch, aber wie ich die Case mit dem array füttern soll weiss ich nicht.  
          
        Wir sind imemr noch an dem Punkt, deine Galerie auszugeben. Nichts in dem Code hat mit der Auswertung einer eventuellen Auswahl eines der Bilder in der Galerie zu tun.  
          
        Wobei ich mich frage, wozu du eine Auswahl, die dann \_eines\_ der Bilder betrifft, in einem switc-case-Block abarbeiten willst, wo du den noch nichtmal fest vorgeben kannst.  
          
        Viel einfacher wäre doch, den GET-Wert anzunehmen, ihn auf Plausibilität und hernach die Existenz des damit verbundenen Bildes zu überprüfen und dies schlussendlich, so das Bild existiert, auszugeben.  
          
        Tschö, Auge  
        
        -- 
        Die deutschen Interessen werden am Liechtenstein verteidigt.  
          
        [Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)
        
      2. Hallo Malcolm,

        <?php

        while($file = readdir($handle))    {

        Ein Hinweis: Vermeide Dateinamen, die zum Abbruch Deiner Schleife führen können :-)

        if($file != "." && $file != ".."  && $file != "Thumbs.db")
                            array_push($bild_array, $file);

        Besser: $bild_array[] = $file;

        [...]

        Ich empfehle Dir einen Get-Parameter der Form

        #    bild=dateiname

        und Verarbeitung in der Art

        Wenn dateiname im Array $bild_array enthalten ist

        #     ziel = pfad/zu/dateiname

        Sonst

        #     ziel = pfad/zu/standardbild

        Ende Wenn

        echo '<img src="'.$dir.'/'.$bild_array[0].'" width="250" id="'.$mein_objekt.'" alt="Objekt '.$neues_objekt.', Bilder" />';

        foreach($bild_array as $bild_neue_links => $file )  {

        [...]

        hier die Get-Parameter entsprechend anpassen

        <a href="?'.$mein_objekt.'&'.$newfile.'" onclick="Bildtauschen(''.$mein_objekt.'', ''.$new_objekt_bilder_pfad.'');return false">
        <img src="'.$new_objekt_bilder_pfad.'" width="30" alt="Bild" /></a>
        ?>

          
        
        > Wie ein Switch aufgebaut wird weiss ich auch, aber wie ich die Case mit dem array füttern soll weiss ich nicht.  
          
        Mir fällt ebenfalls keine Verwendung für switch-case ein ...  
          
          
        Freundliche Grüße  
          
        Vinzenz