AndyH: Fehler beim Vergleichsoperator ==

Hallo zusammen,

ich bin gerade dabei mich in PHP einzuarbeiten und habe folgenden Fehlerfall.

while(!feof($handle))
{
 $line = fgets($handle);
 if($line == 'newline')
 {
  $counter++;
  continue;
 }
 $text[$counter] .= $line;
}

Die Textdatei wird ganz normal geöffnet vorher und das funktioniert auch.
Mit fgets hole ich mir Zeilenweise den Inhalt der Textdatei.
Ich würde gerne jede Zeile prüfen ob die Zeile nur ein "newline" enthält.
Anhand dessen möchte ich später einer Unterteilung mehrerer Lines in einem Array haben.

Der Fehler ist nun, dass beim if immer ein false zurückkommt, egal welchen String ich dort eintrage. Kann mir jemand sagen wieso dies so ist ?

Für die, dies es interessiert, das soll eine ganz billige Version eines Gästebuchs werden. ICh weiss, dass es so normalerweise nie gemacht wird etc, es dient nur als Übung um mich in php einzuarbeiten.

mfg Andy

  1. Hi,

    Der Fehler ist nun, dass beim if immer ein false zurückkommt, egal welchen String ich dort eintrage. Kann mir jemand sagen wieso dies so ist ?

    Vermutlich, weil $line nicht das enthaelt, was du annimmst - also ueberpruefst du das jetzt mal mittels var_dump().

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hab es gemacht, aber das ist es nicht. In der Zeile steht "newline" wie es eigendlich sein sollte.

      Woran könnte es sonst noch liegen ?

      mfg Andy

      1. Hi,

        Hab es gemacht, aber das ist es nicht. In der Zeile steht "newline" wie es eigendlich sein sollte.

        Das zeig bitte mal her.

        Kopiere bitte die Ausgabe von var_dump fuer ein paar Beispielzeilen original so hierher, wie sie im Quelltext stehen.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. string(10) "Andreas| "
          string(33) "Das hier ist der erste Eintrag. "
          string(15) "Schöne Grüße! "
          string(2) " "
          string(10) "Andreas| "
          string(26) "Das ist der 2te Eintrag. "
          string(9) "Ab dafür!"

          Das ist die Ausgabe, ich habe newline in eine Leerzeile geändert.
          -----------------------------------------------------------------
          Andreas|
          Das hier ist der erste Eintrag.
          Schöne Grüße!

          Andreas|
          Das ist der 2te Eintrag.
          Ab dafür!

          Das ist der Inhalt der Textdatei.
          -----------------------------------------------------------------
          <?php
           $handle = fopen ("Eintraege.txt", "r");
           if ($handle)
           {
           $counter = 0;
            while(!feof($handle))
            {
             $line = fgets($handle);
             var_dump($line);
             echo "<br />";
             //echo "$line <br />";
             if($line == "")
             {
              echo "$line gfgdfg <br />";
              $counter++;
              continue;
             }
             //echo "$line <br />";
             $text[$counter] .= $line;
            }
           }
           $fclose($handle);
           echo "$text[0]";
           ?>

          Das ist momentan mein Codeteil.

          Ich hoffe das hilft weiter.

          mfg Andy

          1. Hi,

            string(10) "Andreas| "
            string(33) "Das hier ist der erste Eintrag. "
            string(15) "Schöne Grüße! "
            string(2) " "
            string(10) "Andreas| "
            string(26) "Das ist der 2te Eintrag. "
            string(9) "Ab dafür!"

            if($line == "")

            Keine deiner var_dump-Beispielausgaben entspricht "".

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Das habe ich mir auch gedacht und nach "", " " und "  " geprüft. Leider immer mit dem selben Ergebnis.

              Ich habe halt nur Erfahrungen mit Javascript, aber der Vergleichsoperator kann ja nicht großartig anders funktionieren.

              Mfg Andy

              1. Hi,

                Das habe ich mir auch gedacht und nach "", " " und "  " geprüft. Leider immer mit dem selben Ergebnis.

                Natuerlich.

                Dass sich die Erkenntnis bei dir noch nicht einstellen will, liegt wohl daran, dass du die Ausgabe von var_dump nicht aus dem *Quelltext* der angezeigten Seite kopiert hast, wie ich es dir vorschlug.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. Hi,

                  So hab es bei mehreren Zeilen nun reinkopiert und es klappt immer noch nicht.
                  Das seltsame daran ist, dass ich es 1 zu 1 kopiere, abschreibe oder sonst was uns es nicht klappt.

                  Wenn ich allerdings jetzt $line == $line schreibe, klappt das, sprich es liegt kein Syntaxfehler oder irgendwas anderes vor. Die abfrage scheint schlicht weg "false" zu sein.

                  mfg Andy

                  1. Hi,

                    So hab es bei mehreren Zeilen nun reinkopiert und es klappt immer noch nicht.

                    Kopiere die Ausgabe von var_dump jetzt bitte noch mal hier rein - und zwar aus dem *Quelltext* des Dokumentes, das PHP an deinen Browser geliefert hat, *nicht* aus der Anzeige des Dokumentes durch deinen Browser.

                    MfG ChrisB

                    --
                    „This is the author's opinion, not necessarily that of Starbucks.“
                    1. Ok, dass könnte es sein. Wenn ich auf Seitenquelltext anzeigen gehe im Mozilla wird

                      <br />string(2) "
                      "

                      angezeigt. Muss ich jetzt hier extra nach einem Zeilenumbruch prüfen ?
                      "\n" klappt nämlich nicht.

                      mfg Andy

                      1. Hi,

                        Ok, dass könnte es sein. Wenn ich auf Seitenquelltext anzeigen gehe im Mozilla wird

                        <br />string(2) "
                        "

                        angezeigt.

                        Na schau mal einer an ... warum denn nicht gleich so.

                        Muss ich jetzt hier extra nach einem Zeilenumbruch prüfen ?

                        Wenn sich ein Zeilenumbruch in dem befindet, das du ueberpruefen willst, dann musst du den wohl beim Vergleich beruecksichtigen, ja.

                        "\n" klappt nämlich nicht.

                        Zeilenumbruch ist ja auch nicht unbedingt \n, wie du bspw. bei der Wikipedia nachlesen kannst.

                        MfG ChrisB

                        --
                        „This is the author's opinion, not necessarily that of Starbucks.“
                        1. Ok, also "\r\n" war die Lösung. Hab gerade mal en bisschen im internet gestöbert und es gefunden.

                          Vielen Dank, Chris

                          Schön dass manche Leute hier echt Geduld haben und ein paar Denkanstoße liefern.

                          Schönen Abend noch.

                          mfg Andy

                          1. Hi,

                            Ok, also "\r\n" war die Lösung.

                            Sobald du das Script auf ein anderes System uebertraegst, das den Zeilenumbruch anders darstellt, ist es das natuerlich nicht mehr.

                            MfG ChrisB

                            --
                            „This is the author's opinion, not necessarily that of Starbucks.“
                            1. Ja, dass muss ich berücksichtigen.
                              Hier ist das jetzt halb so wild, da es nur zum testen und lernen von php ist. Es wird auch nie meinen Rechner verlassen und selbst wenn, prüft man halt mehrere Varianten ab. ;-)

                              Hast du vielleicht noch en Tipp, was sinnvolle Aufgaben wären zum php lernen.
                              Gästebuch war jetztd as einzige, was mir auf die Schnelle eingefallen ist und auch den Rahmen nicht direkt sprengt.

                              mfg Andy

                              1. hi $name,

                                Hast du vielleicht noch en Tipp, was sinnvolle Aufgaben wären zum php lernen.

                                Einen Kalender, der ganze Fred könnte für dich interessant sein.

                                gruss
                                shadow

                                --
                                Vor dem Parser und auf hoher See sind wir allein in Gottes Hand
  2. Hi,

    Mit fgets hole ich mir Zeilenweise den Inhalt der Textdatei.

    und hast Du auch in der Dokumentation gelesen, was fgets() tatsächlich zurück liefert?

    Ich würde gerne jede Zeile prüfen ob die Zeile nur ein "newline" enthält.

    Das könnte passieren, aber besonders wahrscheinlich ist es nicht.

    Anhand dessen möchte ich später einer Unterteilung mehrerer Lines in einem Array haben.

    Du solltest Dir hierfür eine bessere Markierung ausdenken. Ein menschenlesbarer Text eignet sich nur selten als Trennzeichen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      ich habe fgets an einer anderen Stelle schonmal genutzt und mir ja auch ausgeben lassen was es zurückliefert.
      Daher bin ich ja verwirrt, dass es nicht klappt ^^

      Und naja newline ist nicht optimal, eigendlich sogar ne schlechte Wahl ich weiss. Das habe ich aber auch nur aus testzwecken genommen. Ich hatte vorher ne Kombination aus Zahlen und Buchstaben. Hab das jetzt nur gemacht um es leichter zu testen.

      Das ganze ist allgemein nur zum Einarbeiten von php...

      1. Hi,

        ich habe fgets an einer anderen Stelle schonmal genutzt und mir ja auch ausgeben lassen was es zurückliefert.
        Daher bin ich ja verwirrt, dass es nicht klappt ^^

        das liegt daran, dass Du (genau wie der Browser) die Ausgabe interpretierst. Deine Schlussfolgerung, der von fgets() zurück gelieferte Wert sei "newline", ist falsch. Lies die Dokumentation noch einmal *genau*.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes