Switch - Case soll werte aus Array auslesen
Malcolm Beck´s
- php
0 Engelein0 Auge0 Malcolm Beck´s0 Auge0 Vinzenz Mai
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
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.
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
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
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
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'];
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];
}
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
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
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
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
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
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 "Ö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
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
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 nurp, 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
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/)
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 "Ö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
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/)
Hallo Malcolm,
<?php
while($file = readdir($handle)) {
if($file != "." && $file != ".." && $file != "Thumbs.db")
array_push($bild_array, $file);
# bild=dateiname
# ziel = pfad/zu/dateiname
# ziel = pfad/zu/standardbild
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 ) {
[...]
<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