Andi: Globale Veriablen in PHP

<?

$gesamt=0;

$fp="ablage.txt";
 if ($datei=fopen($fp,"r"))
 {
  while (!feof ($datei))
  {
   $GLOBALS["gesamt"]=fgets($datei);
  }
 fclose($fp);
 }
   echo "inhalt:<b>".$gesamt."</b><br>";

jetzt meine Frage: warum schafft es die Variabel $gesamt nicht aus der if anweisung raus?
steht das echo nämlich innerhalb der klammern dann funktinoiert die ausgabe ohne prob.?

Thx und Lg Andi

  1. Hi

    $GLOBALS["gesamt"]=fgets($datei);

    Wenn du das globals weg lässt, sollte es worken.

    CIAO Rhöner

    1. Servus

      $GLOBALS["gesamt"]=fgets($datei);

      Wenn du das globals weg lässt, sollte es worken.

      auch bei $gesamt=fgets($datei);
      schafft es die variable nicht aus den klammern raus

      1. $gesamt=fgets($datei);

        Du weißt aber schon, dass du den Inhalt der Variable jedesmal in der Schleife überschreibst?
        Ich mein ja nur, vielleicht willst du das ja sogar...

        1. $gesamt=fgets($datei);

          Du weißt aber schon, dass du den Inhalt der Variable jedesmal in der Schleife überschreibst?
          Ich mein ja nur, vielleicht willst du das ja sogar...

          while (!feof ($datei))
          Die Schleife heißt ja nur dass solange das Ende der Datei nicht erreich ist, soll er jede Zeile auslesen und in dem Array $gesamt speichern.
          Die schleife funktioniert das weiß ich, weil innerhalb der klammern gibt das echo ja auch korrekt aus nur schaffts die var nicht aus den klammern raus!!

          1. Wenn $gesamt ein Array sein sollte, dann musst du ihm das erst einmal verklickern.

            Und wenn neue Einträge immer an das Ende des Arrays geschrieben werden sollen dann tu das doch und weise nicht immer einer Variable einen neuen Wert zu. Dadurch überschreibst du doch den alten!

            1. hi,

              Und wenn neue Einträge immer an das Ende des Arrays geschrieben werden sollen dann tu das doch und weise nicht immer einer Variable einen neuen Wert zu. Dadurch überschreibst du doch den alten!

              genau - und was liefert fgets, wenn es am ende der datei angekommen ist? false. und genau das steht dann auch in deiner variablen $gesamt drin.

              gruß,
              wahsaga

              --
              [ Hier könnte Ihre Werbung stehen! ]
              1. Kann ja sein, dass ich mich irre, aber kommt er da überhaupt hin? Die while beendet doch, wenn er am Ende angekommen ist. Und zwar bevor er weiter lesen kann.

                mfg Rhöner

                1. Kann ja sein, dass ich mich irre, aber kommt er da überhaupt hin? Die while beendet doch, wenn er am Ende angekommen ist. Und zwar bevor er weiter lesen kann.

                  die schleife funktioniert

                  habs mittlweile geschafft über ein global array

                  Andi

  2. hi,

    $gesamt=0;

    ganz normale variable, mitnichten global.

    $GLOBALS["gesamt"]=fgets($datei);

    du meinst sicher $_GLOBALS

    echo "inhalt:<b>".$gesamt."</b><br>";

    warum sollte $gesamt jetzt den wert von $_GLOBALS{'gesamt'] haben?

    gruß,
    wahsaga

    --
    [ Hier könnte Ihre Werbung stehen! ]
    1. hi,

      $gesamt=0;

      ganz normale variable, mitnichten global.

      $GLOBALS["gesamt"]=fgets($datei);

      du meinst sicher $_GLOBALS

      also ob ich die variable ohne globals mit $GLOBALS oder mit $_GLOBALS schreibe, sie kommt nie aus der klammer raus

      echo "inhalt:<b>".$gesamt."</b><br>";

      warum sollte $gesamt jetzt den wert von $_GLOBALS{'gesamt'] haben?

      weil in meinen schlauen büchlein ("PHP for dummis S.113") steht dass es so funktionieren sollte

      Wie aber muss ich eine Variable definieren, dass sie außerhalb ihrer funktion weiterhin gültig ist???

      thx Lg Andi

      1. Ich weiß ja nicht, wie es wahsaga geht, aber ich kann keine Funktion erkennen! Und genau aus diesem Grund musst / darfst du nicht mit globalen Variablen umherhantieren.

        1. Ich weiß ja nicht, wie es wahsaga geht, aber ich kann keine Funktion erkennen! Und genau aus diesem Grund musst / darfst du nicht mit globalen Variablen umherhantieren.

          ok also wie muss ich im folgenden code $gesamt definieren das die var außerhalb von while und if gültig ist?

          <?

          $fp="ablage.txt";
           if ($datei=fopen($fp,"r"))
           {
            while (!feof ($datei))
            {
             $gesamt=fgets($datei);
            }
           fclose($fp);
           }
             echo "inhalt:<b>".$gesamt."</b><br>";

          1. Ich will dich ja nicht verunsichern, aber wie wäre es mit einem Tutorial?

            Eine sehr gute Hilfedatei findest du hier: http://www.php.net/download-docs.php

            Arbeite dich da mal rein. Denn deine Frage ist wirklich ganz der Anfang.

            Viel Spaß.

            CIAO Rhöner

        2. Hello,

          Ich weiß ja nicht, wie es wahsaga geht, aber ich kann keine Funktion erkennen! Und genau aus diesem Grund musst / darfst du nicht mit globalen Variablen umherhantieren.

          Mit globalen Variablen darf man machen, was man will. *g*

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
    2. Hello,

      $gesamt=0;

      ganz normale variable, mitnichten global.

      $GLOBALS["gesamt"]=fgets($datei);

      aber spätestens hier wird eine globale angelegt.

      du meinst sicher $_GLOBALS

      siehe http://de2.php.net/manual/en/language.variables.predefined.php

      echo "inhalt:<b>".$gesamt."</b><br>";

      Der Fehler steckt im Kopf...

      jedes fgets() überscheibt die Variable wieder. Das letzte fgets() ist aber false oder leer, da eof und damit ist $gesamt leer.

      $GLOBALS .= ...

      man achte auf den Operator!

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    3. Hallo wahsaga,

      $GLOBALS["gesamt"]=fgets($datei);
      du meinst sicher $_GLOBALS

      nein, das Array heißt wirklich $GLOBALS: http://www.php.net/manual/de/reserved.variables.php#reserved.variables.globals

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. Hello Tobias,

        $GLOBALS["gesamt"]=fgets($datei);
        du meinst sicher $_GLOBALS
        nein, das Array heißt wirklich $GLOBALS: http://www.php.net/manual/de/reserved.variables.php#reserved.variables.globals

        ...und wenn man innerhalb einer Funktion ein Element in einem Globalen Array anlegt, dann ist das Element automatisch global. Stimmt das so, Tobias?

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. hi,

          ...und wenn man innerhalb einer Funktion ein Element in einem Globalen Array anlegt, dann ist das Element automatisch global. Stimmt das so, Tobias?

          na logisch, anders kann ja kaum sein.
          wie sollte ein array global sein, seine elemente aber nicht?

          gruß,
          wahsaga

          --
          [ Hier könnte Ihre Werbung stehen! ]
          1. Hello,

            ...und wenn man innerhalb einer Funktion ein Element in einem Globalen Array anlegt, dann ist das Element automatisch global. Stimmt das so, Tobias?

            na logisch, anders kann ja kaum sein.
            wie sollte ein array global sein, seine elemente aber nicht?

            Mach Dir nix draus. Jeder kann sich ja mal irren *gg*

            Und das mit der $_ Ausnahme hast Du auch verinnerlicht?

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. hi,

              Und das mit der $_ Ausnahme hast Du auch verinnerlicht?

              sagen wir, ich habe es zur kenntnis genommen - war da halt einfach von der benennung der anderen superglobalen arrays ausgegangen.

              verinnerlichen werde ich es wohl nicht, da ich globale variablen nicht brauche :-)

              gruß,
              wahsaga

              --
              [ Hier könnte Ihre Werbung stehen! ]
              1. Hello,

                verinnerlichen werde ich es wohl nicht, da ich globale variablen nicht brauche :-)

                Dazu kann ich nur sagen: ich habe auch irgend wann gelernt, an welcher Seite man den Hammer anfassen muss. wenn man damit effektiv Nägel in die Wand schlagen will ...

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau