Patrick190195: Variablenübergabe zwischen zwei Scripten

Hallo zusammen!

Ich habe auf einer Seite 2 PHP-Scripte, Script1 und Script2. Nun gebe ich in Script2 einer Variable einen Wert. Kann ich diese Variable mit dem zugewiesenen Wert jetzt in Script1 aufrufen? Und wenn ja, wie?

Danke im Voraus und Grüße,

Patrick

  1. Hallo,

    Ich habe auf einer Seite 2 PHP-Scripte, Script1 und Script2. Nun gebe ich in Script2 einer Variable einen Wert. Kann ich diese Variable mit dem zugewiesenen Wert jetzt in Script1 aufrufen? Und wenn ja, wie?

    ich bin mir nicht sicher, wie du das im einzelnen meinst, aber ich vermute, du suchst Sessions.

    So long,
     Martin

    --
    Wenn ein Räuber eine deutsche Amtsstube überfällt, welchen Satz kann er sich dann sparen?
    "Keine Bewegung!"
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Also ich versuche das einmal bestmöglich zu erklären:

    Ich arbeite mit der Anweisungsübergabe bei meinen Seiten ("?id=..."). Die Hauptseite ist dynamisch aufgebaut, also wenn "?id=news" wird mit dem include-Befehl gearbeitet. Nun möchte ich den Titel der Seite allerdings anpassen. Ich dachte mir, ich könnte in die Datei, die "includet" wird, wenn "?id=news" gilt, <?php $title = "News"; ?> schreiben und auf der Hauptseite in die Titelleiste ein PHP-Script, das diese Variable $title ausliest und ausgibt.

    Ich hoffe, ich konnte das verständlich mitteilen.

    1. Hallo,

      Ich dachte mir, ich könnte in die Datei, die "includet" wird, wenn "?id=news" gilt, <?php $title = "News"; ?> schreiben und auf der Hauptseite in die Titelleiste ein PHP-Script, das diese Variable $title ausliest und ausgibt.

      ja, das ist ohne weiteres möglich - hast du es nicht ausprobiert? Wenn ja, warum nicht?

      Includierter Code ist genauso zu sehen, als würde er direkt im Hauptdokument stehen - mit einer Ausnahme: Am Anfang der include-Datei gilt der PHP-Modus zunächst als aufgehoben. PHP-Code muss in der includierten Datei also wieder mit <?php eingeleitet werden.

      Da lag ich also mit meiner Vermutung bezüglich Sessions falsch, das geht in eine ganz andere Richtung.

      So long,
       Martin

      --
      Wenn man keine Ahnung hat - einfach mal Fresse halten.
        (Dieter Nuhr, deutscher Kabarettist)
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Also ich habe es schon versucht. Vermutlich aber mit dem falschen Code.
        Der Quelltext der  Datei, in der die "title"-Angabe gemacht wird, sieht so aus:

        <?php $title = "News"; ?>

        Und dann habe ich in "index.php", die die Seit inkludiert, in die "title"-Zeile geschrieben:

        <?php echo $title; ?>

        Da ich jedoch noch nicht allzu viele Erfahrungen mit PHP habe, gehe ich davon aus, dass dies falsch ist.

        Könnt Ihr mir da helfen?

        P.S.: Danke übrigens, für die schnellen Antworten!

        1. Hi,

          Der Quelltext der  Datei, in der die "title"-Angabe gemacht wird, sieht so aus:

          <?php $title = "News"; ?>

          Und dann habe ich in "index.php", die die Seit inkludiert, in die "title"-Zeile geschrieben:

          <?php echo $title; ?>

          prima. Wenn nun auch die Reihenfolge stimmt - also die Zuweisung vor der Ausgabe erfolgt - dann ist das einwandfrei.

          Da ich jedoch noch nicht allzu viele Erfahrungen mit PHP habe, gehe ich davon aus, dass dies falsch ist.

          Eigentlich nicht - wie kommst du darauf?

          Ciao,
           Martin

          --
          F: Was ist schneller: Das Licht oder der Schall?
          A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Genau das ist mein Problem!
            Die Ausgabe kommt vor der Zuweisung.
            Also die Seite sieht für den Besucher fertig inkludiert dann so aus:

            ...
            <?php echo $title; ?>
            ...
            <?php $title = "News"; ?>
            ...

            Gibt es da irgendeinen Trick, dass der die Seite - sagen wir mal - nochmal lädt?

            Danke im Voraus,

            Patrick

            1. Hi,

              Genau das ist mein Problem!
              Die Ausgabe kommt vor der Zuweisung.

              dann solltest du dein Konzept korrigieren. Ausgabe sollte immer der letzte Schritt sein.

              Gibt es da irgendeinen Trick, dass der die Seite - sagen wir mal - nochmal lädt?

              Ja. Konsequente Anwendung des EVA-Prinzips: Eingabe, Verarbeitung, Ausgabe. In dieser Reihenfolge.

              Ciao,
               Martin

              --
              The other line moves faster. (from Murphy's Law)
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Ok. Wie kriege ich das denn hin mit dem "EVA"-Prinzip? Also am besten mit Quellcode.

                Danke für die Antwort!

                1. [latex]Mae  govannen![/latex]

                  Ok. Wie kriege ich das denn hin mit dem "EVA"-Prinzip?

                  Google, Wikipedia, SelfHTML-Suchfunktion...

                  Also am besten mit Quellcode.

                  1824

                  Stur lächeln und winken, Männer!
                  Kai

                  --
                  Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                  in Richtung "Mess up the Web".(suit)
                  SelfHTML-Forum-Stylesheet
                  1. Danke für den Tipp.
                    Ich habe mir das EVA-Prinzip jetzt auch auf mehreren Seiten angeschaut, aber keine Lösung gefunden, wie ich das für mein Problem anwenden könnte.
                    Ich weiß ja wie ich die Einlesung und die Ausgabe mache - aber bei der Verarbeitung hapert's. Gibt es da irgendwie eine Möglichkeit, dass ich Seite vielleicht nochmal laden kann und dabei die neu festgelegte Variable übergeben wird?
                    Denn bei mir steht ja die Ausgabe vor der Einlesung.

                    Ich erwarte keine fertigen Code; aber Code-Teile mit Erklärung natürlich wären schon nett.

                    Danke,

                    Patrick

                    1. Hallo,

                      Denn bei mir steht ja die Ausgabe vor der Einlesung.

                      und warum??
                      Was hindert dich, erst alle Eingabe- und Verarbeitungsschritte zu machen und die Ausgaben, die sich in dieser Phase schon ergeben, einfach in einem String zu sammeln? Oder halt in mehreren Strings, die du zum Schluss der Reihe nach ausgibst?

                      Ich erwarte keine fertigen Code; aber Code-Teile mit Erklärung natürlich wären schon nett.

                      Es geht um das Konzept, das Prinzip. Die konkrete Umsetzung in Programmcode würde ich von einem technikbegabten Sechzehnjährigen schon erwarten, wenn er einigermaßen analytisch-logisch denken kann.

                      Ciao,
                       Martin

                      --
                      Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. Bei mir kommt ja aus technischen Gründen die Auslesung zuerst - denn zuerst steht ja die <title>-Zeile im <head>-Bereich. Und dann wird erst im <body>-Bereich der Variable ein Wert zugewiesen. Und ich verstehe nicht, wie ich diesen Wert dann nochmal am Anfang ausgeben lassen kann - auch nicht durch Strings!

                        Danke,

                        Patrick

                        1. [latex]Mae  govannen![/latex]

                          Bei mir kommt ja aus technischen Gründen die Auslesung zuerst - denn zuerst steht ja die <title>-Zeile im <head>-Bereich. Und dann wird erst im <body>-Bereich der Variable ein Wert zugewiesen. Und ich verstehe nicht, wie ich diesen Wert dann nochmal am Anfang ausgeben lassen kann - auch nicht durch Strings!

                          Dieser Text zeigt, daß du das EVA-Prinzip nicht verstanden hast. Du gibst *nichts* - nicht einmal ein einziges Zeichen(!) - aus, bevor du nicht sämtliche(!) benötigte Werte eingesammelt, berechnet oder zugewiesen hast. Erst, wenn das wirklich _alles_ fertig ist, _beginnt_ die Ausgabe. Dazu benutzt man Variablen (idealerweise als assoziatives Array[1]) und fügt die Werte genau da ein, wo man sie braucht [echo, (s)print(f) oder Ersetzen von Platzhaltern, es gibt viele Möglichkeiten]. Man kann also jeden Wert beliebeig oft ausgeben und auch wo immer man will.

                          [1] z.B.

                          $werte['titel_head'] = 'Titel';  
                          $werte['ueberschrift'] = 'Bla bla';  
                          $werte['antwort'] = 42;
                          

                          (wobei $werte als Name blöd ist, bin aber gerade zu müde für einen schöneren Namen)

                          Stur lächeln und winken, Männer!
                          Kai

                          --
                          Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                          in Richtung "Mess up the Web".(suit)
                          SelfHTML-Forum-Stylesheet
                        2. Mahlzeit Patrick190195,

                          Bei mir kommt ja aus technischen Gründen die Auslesung zuerst - denn zuerst steht ja die <title>-Zeile im <head>-Bereich.

                          Das ist bereits Teil der *Ausgabe*.

                          Und dann wird erst im <body>-Bereich der Variable ein Wert zugewiesen.

                          Das ist ungünstig, denn auch dort befindest Du Dich bereits in der *Ausgabe*.

                          Und ich verstehe nicht, wie ich diesen Wert dann nochmal am Anfang ausgeben lassen kann - auch nicht durch Strings!

                          Dann versuch bitte mal zu erkennen, wie in diesem kurzen Grundgerüst das EVA-Prinzip umgesetzt wurde:

                          <?php  
                            
                          // Eingabe  
                          $bla = check_variable($_GET['bla']);  
                            
                            
                          // Verarbeitung  
                          include('foo/bar/file.php');  
                            
                          $username = get_username_from_some_kind_of_magic_source();  
                            
                            
                          // Ausgabe  
                          ?>
                          ~~~~~~html
                          <!doctype html>  
                          <html>  
                            <head>  
                              <title><?php echo $title; ?></title>  
                            </head>  
                            
                            <body>  
                              <h1>Lustige Seite</h1>  
                            
                              <p>  
                                Hallo <?php echo $username; ?>!  
                              </p>  
                            </body>  
                          </html>
                          

                          Grundidee ist, dass Du - wie Kai345 bereits beschrieb - *SÄMTLICHE* Ausgaben erst dann tätigst, wenn Du mit der Eingabe und der Verarbeitung fertig bist ... das bedeutet aber insbesondere auch, dass Du *KEINERLEI* Includes, die noch irgendetwas manipulieren oder Werte von Variablen verändern, unkontrolliert irgendwo im Bereich der Ausgabe einsetzt.

                          MfG,
                          EKKi

                          --
                          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            2. Hello,

              Genau das ist mein Problem!
              Die Ausgabe kommt vor der Zuweisung.
              Also die Seite sieht für den Besucher fertig inkludiert dann so aus:

              ...
              <?php echo $title; ?>
              ...
              <?php $title = "News"; ?>
              ...

              Gibt es da irgendeinen Trick, dass der die Seite - sagen wir mal - nochmal lädt?

              Ja, einen Trick gibt es auch. Du kannst das Echo verzögern.
              siehe ob_start() http://de2.php.net/manual/en/function.ob-start.php

              Es wäre aber besser, Du würdest dein Konzept ändern.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
    2. Hi!

      Ich dachte mir, ich könnte in die Datei, die "includet" wird, wenn "?id=news" gilt, <?php $title = "News"; ?> schreiben und auf der Hauptseite in die Titelleiste ein PHP-Script, das diese Variable $title ausliest und ausgibt.

      Ja, und was geht daran nicht? Inkludierter Code wird so behandelt, als ob er an der inkludierenden Stelle stünde.

      Lo!

  3. Hello Patrick,

    Ich habe auf einer Seite 2 PHP-Scripte, Script1 und Script2. Nun gebe ich in Script2 einer Variable einen Wert. Kann ich diese Variable mit dem zugewiesenen Wert jetzt in Script1 aufrufen? Und wenn ja, wie?

    Handelt es sich um zwei getrennte Requests?
    Oder wird das eine Script beim Request aufgerufen und lädt sich noch das zweite dazu?

    Wieviele Teilscripte zu einem einzigen Request gehören, ist PHP so ziemlich egal. Das erste ist quasi das ausschlaggebende und eröffnet dann einen Gültigkeitsbereich, in den alle anderen, während dessselben Requests hinzugenommen Scripte, eingebunden werden.

    Anders sieht es aus, wenn Du von einem Request zum nächsten Werte sichern möchtest. Dann käme eine Session für Dich in Frage...

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  4. Hallo noch einmal.

    Ich danke Euch nochmals für Eure Hilfe - ich habe eine andere und für mich einfachere Lösung gefunden.
    Und zwar überprüfe ich erst, welche Variablen mit dem Link übergeben wurden (ich habe die Variablen wie "pageid", "cat", "date", ...) - diese kommen aber nur in bestimmten Kombinationen vor (also "pageid", dann "cat", dann "date", ...). Nach dieser Überprüfung ruft das Script dann im Ordner "[pageid]/[cat]/[date]/" die Datei "title.txt" auf, wo der Titel drin steht.

    Liebe Grüße und viel Erfolg weiterhin,

    Patrick