php_ist_böse: PHP versteht if-Abfrage nicht!

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

  1. 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

    1. 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!

      1. 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 Eingangsbedingung

        if ($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

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
        1. 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";  
            }  
          
          
          1. 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

            --
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
            (Victor Hugo)
            Veranstaltungsdatenbank Vdb 0.1
  2. 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

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