PHP versteht if-Abfrage nicht!
php_ist_böse
- php
0 Juan0 php_ist_böse0 Auge
0 wahsaga
Hallo!!
Ich habe ein Problem mit PHP :(
Und zwar habe ich hier folgenden code:
<?php
$dirname = 'galerie/party/14042006';
$comments = file($dirname.'.txt');
$endung = '.jpg';
$dir = dir($dirname);
while ($filename = $dir->read())
{
$alt = str_replace($endung,'',$filename);
if ($filename <> $alt)
$bild[] = $filename;
}
$dir->close();
natsort($bild);
$n = 0;
while(list($nummer, $file) = each($bild)){
print "<img src=\"$dirname/$file\" class=\"foto\" width=\"411\">";
if ($comments[$n] != "") {print "<div>$comments[$n]</div><br>";}
$n++; } ?>
Das Script macht praktisch nichts anderes als zuerst alle *.jpg Dateien eines vorher angegebenen Ordners ($dirname) einzulesen und in einem Array abzuspeichern. Es wird außerdem eine *.txt Datei in ein Array ($comments) gespeichert. Zuletzt wird dann eine if-Abfrage gestartet: Wenn das n-te Element des Arrays $comments NICHT leer ist, also irgendein Zeichen beinhaltet, soll ein <div> (mit dem jeweiligen Array-Element als Inhalt) ausgegeben werden und ein Zeilenumbruch erfolgen.
Und genau hier ist der Haken: Unabhängig davon, ob das Array-Element leer ist, wird die Anweisung ausgeführt und ein <div> erstellt!!
Was mache ich falsch?? Ich habe schon andere Varianten und if-Syntaxen (ka was der richtige plural von syntax ist :P) ausprobiert, klappt aber alles nicht.
Ich hoffe ihr könnt mir helfen, denn ich kann das Problem hier absolut nicht lösen :(
Gruß, Pascal
Hi,
Und genau hier ist der Haken: Unabhängig davon, ob das Array-Element leer ist, wird die Anweisung ausgeführt und ein <div> erstellt!!
bist du dir denn auch wirklich sicher, dass das Element leer ist und nicht vielleicht ein Leerzeichen oder sowas enthält?
Vielleicht hilft dir ja trim weiter.
MfG,
Juan
Hallo!!
Ich werde eure beiden Vorschläge beherzigen, aber ich glaube nicht, dass es daran liegt.
Ich habe nämlich auch mal ausprobiert, ob es denn funktionieren würde, wenn ich nicht leere Elemente ausschließen würde, sondern einfach Elemente, die nur "//" beinhalten.
Also ich habe dann einfach in der Text-Datei die entsprechenden Zeilen, die ich vorher einfach nur leer gelassen habe, mit "//" gefüllt und in der if-Abfrage dann als Eingangsbedingung
if ($comments[$n] != "//")
genommen. Hat auch nicht geklappt!! Ich habe es auch mit
if (substr($comments[$n], 0, 1))
probiert, um sicherzugehen, dass hinter den beiden Querstrichen nicht irgendwie ein Leerzeichen oder so steht. Und das ging auch nicht :(
Deshalb kapier ich einfach nicht, wo mein Fehler ist ...
Ich probiere es aber jetzt mal mit trim und var_dump, vielleicht klappt es ja!
Hallo
Ich habe nämlich auch mal ausprobiert, ob es denn funktionieren würde, wenn ich nicht leere Elemente ausschließen würde, sondern einfach Elemente, die nur "//" beinhalten.
Also ich habe dann einfach in der Text-Datei die entsprechenden Zeilen, die ich vorher einfach nur leer gelassen habe, mit "//" gefüllt und in der if-Abfrage dann als Eingangsbedingungif ($comments[$n] != "//")
genommen. Hat auch nicht geklappt!! Ich habe es auch mit
Entschuldige mal bitte, du prüfst lediglich, ob der Kommentar ausschließlich die Zeichen '//' beinhaltet. Wenn aber nach diesem Kommentar noch ein weiterer, in einer weiteren Zeile, folgt, _muss_ da noch das Zeichen für den Zeilenumbruch da sein.
if (substr($comments[$n], 0, 1))
probiert, um sicherzugehen, dass hinter den beiden Querstrichen nicht irgendwie ein Leerzeichen oder so steht. Und das ging auch nicht :(
Du würdest so lediglich die Zeichenkette '/' erhalten (Vom nullten Zeichen an _ein_ Zeichen).
Tschö, Auge
Hallo Auge!
VIELEN DANK :-*
Der Zeilenumbruch war die Ursache!!
So geht es jetzt^^
if(isset($comments[$i]) && $comments[$i] != "\n")
{
print "<div>$comments[$i]</div><br>\n";
}
Hallo
Der Zeilenumbruch war die Ursache!!
So geht es jetzt^^
if(isset($comments[$i]) && $comments[$i] != "\n")
{
print "<div>$comments[$i]</div><br>\n";
}
Geht auch anders. Entferne nach dem Einlesen der Datei die Zeilenumbrüche und prüfe nur noch, ob das Arrayelement leer ist. Nehmen wir an, dein obiger Code befindet sich innerhalb einer `for`{:.language-php}-Schleife.
~~~php
$a = count($comments);
for ($i=0;$i<$a;$i++)
{
$comment[$i] = trim($comment[$i]);
/* Wenn der Eintrag nur aus einem Zeilenumbruch bestand,
ist dieser jetzt weg und der Eintrag durch trim geleert.
Dadurch reicht die Pruefung auf Inhalt */
if (!empty($comments[$i]))
{
/* Wir bereiten den Eintrag auf die Ausgabe vor
und maskieren alle Zeichen, die zu fehlerhafter
Darstellung fuehren koennten. */
$comments[$i] = htmlentities($comments[$i]);
/* Ich habe das jetzt mal in einen Textabsatz
verwandelt. Das scheint mir sinnvoller. Auch
den Zeilenumbruch _nach_ dem Element mit dem
Kommentar brauchst du nicht. Den Abstand zum
naechsten Eintrag kannst du mit der
CSS-Eigenschaft [ref:self811;css/eigenschaften/randabstand.htm@title=margin] regeln. */
print "<p>".$comments[$i]."</p>\n";
}
}
Tschö, Auge
hi,
Und genau hier ist der Haken: Unabhängig davon, ob das Array-Element leer ist, wird die Anweisung ausgeführt und ein <div> erstellt!!
Und dass es _wirklich_ leer ist, hast du natürlich kontrolliert - z.B. mit var_dump?
gruß,
wahsaga