weblurch: include innerhalb Variable

Hallo,
ich möchte eine Zeichenkette per INCLUDE in einer Variablen wieder als Zeichenkette ausgeben.
Hier meine stark vereinfachten Scripte:

Script "aufruf.php"
<?
 $ausgabe = "Der rote ".
 include ("kette.php");

print ("$ausgabe");
?>

Script "kette.php"

<?
print "Hugo";
?>

Die Ausgabe ist derzeit:
"HugoDer rote 1"
soll aber lauten
"Der rote Hugo".

Wer mag mir dabei helfen?

  1. Hallo weblurch,

    Script "aufruf.php"
    <?
    $ausgabe = "Der rote ".
    include ("kette.php");

    print ("$ausgabe");
    ?>

    Mit include bindest du den Quelltext ein und führst ihn gleich aus, d.h. zuerst wird logischerweise Hugo ausgegeben.

    Die Ausgabe ist derzeit:
    "HugoDer rote 1"
    soll aber lauten
    "Der rote Hugo".

    in der Datei kette.php sollte folgender PHP-Code stehen:
    <?php
     $ausgabe.="Hugo";
    ?>

    Dann wird der Text "Hugo" an die (durch den Include bestehende) Variable $ausgabe angehängt.

    Wer mag mir dabei helfen?

    Ich, ich, ich!!

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  2. Hallo weblurch.

    Versuch's mal so:

    Script "aufruf.php":
    <?
     $ausgabe = "Der rote ";
     echo ($ausgabe);
     include ("kette.php");
    ?>

    Script "kette.php":
    <?
    echo "Hugo";
    ?>

    Mls, H2O

    --
    #*~!:     Inaktiv...
    Selfcode: ie:% fl:( br:< va:) ls:[ fo:| rl:( n4:( ss:) de:> js:| ch:? sh:( mo:| zu:}
                              Decoder    -    Infos
  3. ich möchte eine Zeichenkette per INCLUDE in einer Variablen wieder als Zeichenkette ausgeben.

    Wenn du schon include als Funktion missbrauchst, dann musst du den Rückgabewert wie bei einer Funktion auch mit return zurückgeben.

    1. Das klingt gut.
      Ich komm aber mit der Ausführung nicht klar.
      Kannst Du mir die Anweisung bitte eben in das Script einfügen?
      Danke

      1. Ich komm aber mit der Ausführung nicht klar.

        Schau mal da, da stehts doch mit Beispiel: http://de.php.net/manual/de/function.include.php

        Du musst nur die inkludierte Datei mit return "blafasel"; verlassen.

        1. Danke, klappt.

        2. Hallo,neues Problem:
          im geposteten Beispiel klappts, aber im eigentlichen Script gebe ich im Rahmen einer FOREACH-Schleife per print ein Array aus.
          Ersetze ich nun print durch return, Erscheint nur noch das erste Feld des Arrays.

          Hier das richtige Script, welches includiert werden soll:

          <?php
          include ("dbopen.php");
          foreach  ($Wohnung as $ID) {

          $ergeb = mysql_query ("SELECT  ID_whg, plz_ort, strasse  FROM wohnung WHERE ID_whg=$ID");

          while ( $daten = mysql_fetch_row ($ergeb)) {

          print "<br>";
               foreach ( $daten as $feld )
                  return"\t$feld<br>";                //ursprüngl. print
           }

          print "<br>";

          }
          include ("dbclose.php");
          ?>

          Der vollständigkeit halber hier auch das aufruf-script:

          <?

          $webmaster = "form_wohnung@xxx.de";  /*  Adressat  */

          $absender = "Formmailer-Wohnungsinteressent";  /*Absender */

          $betreffwebmaster = 'Wohnungsinteressent';  /*Betreff*/
          $koerperwebmaster =

          'ABSENDER: $Vorname $Nachname
           STRASSE: $Strasse
           WOHNORT: $Wohnort

          TELEFON: $Telefon
             EMAIL: $Email

          hat über das Formular WOHNUNGSINTERESSENT der Webseite folgende Nachricht hinterlassen:

          Zusätzliche Meldung:

          $Meldung

          Ich interessiere mich für folgende Wohnung:'.

          include ("DIE DATEI UM DIES GEHT");
          ;

          if ($Vorname == "" || $Nachname == "" || $Strasse == "" || $Wohnort == ""  || $Telefon == "")

          {
            header ("Location: 1zimmer2.php");
           }
            else
             {

          mail("$webmaster","$betreffwebmaster","$koerperwebmaster\n","FROM: $absender\n");

          header ("Location: main_danke.php"); /* Mail wurde versandt, Umleitung auf Dankseite  */

          }

          ?>

          1. hi,

            im geposteten Beispiel klappts, aber im eigentlichen Script gebe ich im Rahmen einer FOREACH-Schleife per print ein Array aus.
            Ersetze ich nun print durch return, Erscheint nur noch das erste Feld des Arrays.

            du wurdest doch bereits darauf hingewiesen, dass dein wunsch, include als funktion zu missbrauchen, nicht sonderlich sinnvoll ist - also halte bitte nicht krampfhaft daran fest.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. Na ja,
              ich kenn halt nicht viel von PHP.
              Was gibts denn für Alternativen?
              Ich bin ja für jeden Vorschlag dankbar.

              1. hi,

                ich kenn halt nicht viel von PHP.
                Was gibts denn für Alternativen?
                Ich bin ja für jeden Vorschlag dankbar.

                muss das schon mehrmals in diesem thread gefalle stichwort dir erst auf den kopf fallen, bis du es zur kenntnis nimmst und dich darüber informierst?

                gruß,
                wahsaga

                --
                "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
              2. Nabend weblurch,

                Na ja, ich kenn halt nicht viel von PHP.

                das läßt sich schnell ändern http://de.php.net/manual/de/

                Was gibts denn für Alternativen? Ich bin ja für jeden Vorschlag dankbar.

                Grob übers Knie gebrochen: include() erzeugt einen Lesezugriff auf eine weitere Datei, gefolgt von einem Parsen (vgl.: http://de.wikipedia.org/wiki/Parser). Sollte ein PHP-Einschluß (<?php ... ?>) in der eingebundenen Datei sein, werden die Anweisungen umgesetzt. Alles in allem ist dies ein rechenaufwändiger Prozeß.

                Genaugenommen brauchst Du nicht mehr als den reinen Lesezugriff auf eine Datei:

                ########### Dein jetziges Script ###############################

                <?php

                Hier Deine Anweisungen

                Beispiel für vorzunehmenden Ersetzungen:

                $str=array(
                      '&bgr;' =>'Hallo Welt!',
                      '&time;'=>date("H.i.s"),
                      '&abs;'=>'Tschüß');

                Einlesen der Datei

                $d   ='die.Datei';
                $dat =fopen($d,'r');
                $text=fread($dat,filezize($d));
                fclose($dat);

                Beispiel für eine Ersetzung:

                foreach($str as $k=>$v)
                   $text=str_replace($k,$v,$text);

                echo $text;
                ?>

                ########### die.Datei ########################################

                <p>&bgr;</p>
                <p>
                Heute ist ein schöner Tag. Aber es ist schon spät! Wie spät?
                Es ist &time;.
                </p>
                <p>&abs;</p>

                ###############################################################

                Gruß aus Berlin!
                eddi

          2. im eigentlichen Script gebe ich im Rahmen einer FOREACH-Schleife per print ein Array aus.
            Ersetze ich nun print durch return, Erscheint nur noch das erste Feld des Arrays.

            Das hat das return so an sich. Du musst erst die Daten irgendwo sammeln und die erst nach der Schleife dem return übergeben.

            Prinzipiell geht das so:

            $ergebnis = '';
            foreach(... as $wert) {
              $ergebnis .= $wert;
            }
            return $ergebnis;

            Im Allgemeines ist es, so auch in PHP, üblich, Funktionalitäten in Funktionen zu kapseln. Diese können durchaus auch in Dateien deklariert sein, die mit include/require eingebunden werden können.

            Ich nehme mal an, dass du das include-Prinzip verwendest, weil du es entweder irgendwo abgeschaut hast und es nicht besser weißt, oder weil du damit Probleme mit dem Geltungsbereich von Variablen umgehen willst.
            Der optimale Weg ist, Funktionalitäten so zu kapseln, dass sie ohne Verwendung von globalen Variablen, nur aus den übergebenen Parameteren das Ergebnis ermitteln. Versuche das bei der Lösungsfindung zu einem Problem zu berücksichtigen. Du kannst dir dabei auch vorstellen, dass du einem Außenstehenden die Aufgabe übertragen musst, der während seiner Arbeit keinen Zugriff auf deine lokalen Ressourcen hat. Zwischendurch rückfragen scheidet auch aus.

            Bei objektorientiertem Programmieren sieht das Ganze etwas anders aus, aber Grundvoraussetzung dafür ist auch hier die gewünschten Funktionalitäten kapseln zu können.