Probleme mit explode in einer foreach Schleife
cr_man
- php
Hallo zusammen,
ich versuche gerade seit 2 Stunden ein Problem in PHP mit einer FOREACH Schleife und EXPLODE zu lösen, leider vergeblich.
Zuerst einmal zum Skript, es ist ein einfaches News Skript. Es soll mir ermöglichen schnell und einfach Bilder in die News einzufügen, mit Vorschau auf die Bilder. Sobald ich einen Click in der Vorschau auf eines der Bilder mache wird es an der Position in der News eingefügt und in die DB mittels BB Code eingefügt. Das ganze funktioniert auch schon wunderbar, das auslesen der Bilder auch, nur die Position von jedem Bild und der ALT Text nicht.
Die Funktion welche dafür zuständig ist sieht wie folgt aus:
function convert_bb($text) {
$temp = split("\n", $text);
$bb_code[0] = '/([bild])(.*)([/bild])/';
$bild_name[0] = '${2}';
$bild_temp = preg_replace($bb_code, $bild_name, $temp);
foreach ($bild_temp AS $key ){
echo("Foreach key Wert: $key<br>");
$aufsplitten = explode(".", $key);
echo '<pre>';
print_r ($aufsplitten);
echo '</pre>';
echo "<br><br>";
if($aufsplitten[1] == "jpg" || $aufsplitten[1] == "JPG"){
echo("<b>\t Es ist ein jpg!</b><br>");
}
}
echo("<br>");
$sql = "SELECT * FROM bilder
WHERE name = '".$bild_temp[2]."'
";
//echo("$sql<br>");
$bb_replace[0] = '<img src="admin/upload/resize.php?pic=${2}" alt="dies ist ein test">';
$temp2 = preg_replace($bb_code, $bb_replace, $temp);
//echo("<br>preg tmp test: ".$temp2[0]."<br><br>");
$temp2 = implode("\n", $temp2);
return $temp2;
}
Mein Problem liegt im Moment in der Foreach Schleife. Die Ausgabe welche erzeugt wird sieht wie folgt aus:
Foreach key Wert: 01232007_43205.jpg
Array
(
[0] => 01232007_43205
[1] => jpg
)
Foreach key Wert:
Array
(
[0] =>
)
Foreach key Wert: 01232007_43221.JPG
Array
(
[0] => 01232007_43221
[1] => JPG
)
Foreach key Wert:
Array
(
[0] =>
)
Foreach key Wert:
Array
(
[0] =>
)
Im Grunde genommen ist es eigentlich genau das was die Schleife machen soll, er überprüft Zeile für Zeile die News und Filter mir den Bildername raus, zerlegt diesen mittels explode und prüft ob die Endung ein "jpg" ist. Wenn es ein jpg ist, dann soll das Skript eine Ausgabe produzieren, was es aber leider nicht tut.
Mir ist aufgefallen das nur eine Ausgabe produziert wird wenn an der letzten Stelle im Array ein Bild vorhanden ist, aber nur dann.
Weiss eventuell jemand warum die if Abfrage in der Foreach Schleife nicht greift, obwohl im Array an der Stelle das jpg vorhanden ist?
Danke und Gruß,
cr_man
hi,
Weiss eventuell jemand warum die if Abfrage in der Foreach Schleife nicht greift, obwohl im Array an der Stelle das jpg vorhanden ist?
Nutze bitte mal var_dump statt print_r für die Kontrollausgaben - damit kann man besser sehen, ob da auch wirklich "jpg" und nur "jpg" steht.
gruß,
wahsaga
hi,
Weiss eventuell jemand warum die if Abfrage in der Foreach Schleife nicht greift, obwohl im Array an der Stelle das jpg vorhanden ist?
Nutze bitte mal var_dump statt print_r für die Kontrollausgaben - damit kann man besser sehen, ob da auch wirklich "jpg" und nur "jpg" steht.
gruß,
wahsaga
Hi wahsaga,
var_dump gibt mir folgendes aus:
Foreach key Wert: 01232007_43205.jpg
array(2) { [0]=> string(14) "01232007_43205" [1]=> string(4) "jpg " }
Foreach key Wert:
array(1) { [0]=> string(1) " " }
Foreach key Wert: 01232007_43221.JPG
array(2) { [0]=> string(14) "01232007_43221" [1]=> string(4) "JPG " }
Foreach key Wert:
array(1) { [0]=> string(1) " " }
Foreach key Wert:
array(1) { [0]=> string(0) "" }
auch hier erkennt und trennt er mir das JPG korrekt, nur die IF Abfrage greift leider immer noch nicht, hier nochmal der Code Teil wo das Problem liegt:
foreach ($bild_temp AS $key ){
echo("Foreach key Wert: $key<br>");
$aufsplitten = explode(".", $key);
var_dump($aufsplitten);
echo("<br><br>");
/*
echo '<pre>';
print_r ($aufsplitten);
echo '</pre>';
echo "<br><br>";
*/
if($aufsplitten[1] == "jpg" || $aufsplitten[1] == "JPG"){
echo("<b>\t Es ist ein jpg!</b><br>");
}
}
Danke und Gruß,
cr_man
Ps: Gibt es eigentlich eine Form wie ich den Code besser darstellen kann?
Hallo cr_man.
Foreach key Wert: 01232007_43205.jpg
array(2) { [0]=> string(14) "01232007_43205" [1]=> string(4) "jpg " }Foreach key Wert:
array(1) { [0]=> string(1) " " }Foreach key Wert: 01232007_43221.JPG
array(2) { [0]=> string(14) "01232007_43221" [1]=> string(4) "JPG " }Foreach key Wert:
array(1) { [0]=> string(1) " " }Foreach key Wert:
array(1) { [0]=> string(0) "" }auch hier erkennt und trennt er mir das JPG korrekt, […]
Tut er das? Ich für meinen Teil sehe da noch ein zusätzliches Leerzeichen, weshalb das hier …
if($aufsplitten[1] == "jpg" || $aufsplitten[1] == "JPG"){
echo("<b>\t Es ist ein jpg!</b><br>");
}
… offensichtlich nie zutreffen kann.
Ps: Gibt es eigentlich eine Form wie ich den Code besser darstellen kann?
Einen schönen Dienstag noch.
Gruß, Mathias
Tut er das? Ich für meinen Teil sehe da noch ein zusätzliches Leerzeichen, weshalb das hier …
Hallo Mathias,
genau das war die Lösung. Wenn man vor lauter Leerzeichen manchmal den Wald nicht mehr sieht *g*.
Danke und Gruß,
cr_man