array auslesen und versenden?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array auslesen und versenden?

    Hallo, ich schreibe an einem kleinen Script, welches ein Array (eine Auswahl über Checkboxen) auslesen soll und dieses verschickt.

    Ich benutze PHP-Mailer und möchte erreichen, dass erst ein kurzer Standardtext in der Mail erscheint, dann das Array ausgewertet wird, welches bestimmte Daten (Beschreibungen) included und diese dann darunter angezeigt werden.

    An einer anderen stelle wird die Auswahl (und die Beschreibung) angezeigt, die Schleife funktioniert Einwandfrei:
    PHP-Code:
    reset ($seminar);
    foreach(
    $seminar as $arr => $show){
            if(
    is_readable("../sem/".$show.".sem")){
                include(
    "../sem/".$show.".sem");
            }else{
                echo 
    "<b>".$show."</b> (Leider ...usw.)";
            }
        } 
    Ich möchte, dass jetzt aber der zu includende Text (und wenn die Beschreibung fehlt die Variable $show) in die eMail kommt (also am besten in eine Variable, die daraufhin versendet wird).

    Ich habe das mit einer Funktion versucht:
    PHP-Code:
    function listitems($seminar, &$show){
    //Schleife, die bereits oben steht
    }
    $body "Ein Benutzer ...usw. .... ausgew&auml;hlt:<br>\n".
        
    listitems($seminar$show).
        
    "weiterer Text, Variablen usw. ...."
    Jetzt passiert folgendes: Wenn ich mir $body ausgeben lasse, erscheint erst der includete text (bzw. die Funktion listitems), dann $body, aber ohne des Textes (der included wird).

    Wie kann ich jetzt erreichen, dass das Array ausgelesen wird und in der email an der richtigen Stelle erscheint?

    Danke und Grüße!

  • #2
    Das hat nichts mit includen oder sonstigem zu tun.

    die funktion listitems benutzt echo. Aber du willst es ja nicht ausgeben. sondern den string nachher mit einem anderen verbinen. also musst du den string mit return zurückgeben.

    functions

    Kommentar


    • #3
      Sowas in der richtung habe ich mir auch schon gedacht. Aber ich ging davon aus, dass wenn in einer function echo vorkommt, der auszugebende Text an der Stelle ausgegeben wird, an der die Funktion aufgerufen wird.

      Wie kann ich denn erreichen, dass die Vaiable übergeben (return beendet doch die Schleife, oder nicht?) und mein Text includet wird.

      Grüße

      Kommentar


      • #4
        Aber ich ging davon aus, dass wenn in einer function echo vorkommt, der auszugebende Text an der Stelle ausgegeben wird, an der die Funktion aufgerufen wird.
        So ist es auch.

        return beendet doch die Schleife, oder nicht?
        So ein Quatsch. In der Funktion verwendet, beendet es natürlich die Funktion, was am ende der Fkt so oder so der Fall ist. So what.

        Kommentar


        • #5
          Aber es wird ja nicht an der Stelle ausgegeben, an der die Funktion aufgerufen wird, sondern direkt am Anfang.

          beendet es natürlich die Funktion, was am ende der Fkt so oder so der Fall ist.
          Es ist ja eine foreach Schleife(-?), sodass sie bei jedem Durchlauf den internen Zeiger auf den nächsten Arrayeintrag setzt. Mit return passiert das nicht, weil sie unterbrochen wird.

          Kommentar


          • #6
            Aber es wird ja nicht an der Stelle ausgegeben, an der die Funktion aufgerufen wird, sondern direkt am Anfang.
            Aha, und welche ausgabe findet deiner Meinung nach VOR Aufruf der Funktion statt?

            Es ist ja eine foreach Schleife(-?), sodass sie bei jedem Durchlauf den internen Zeiger auf den nächsten Arrayeintrag setzt. Mit return passiert das nicht, weil sie unterbrochen wird.
            Kein Plan, was du mir damit sagen willst. Scheint mir irgendwie wenig relevant. Wenn du das return IN der Funktion AM ENDE setzt, ist es egal. Dadurch wird die funktion zwar beendet. Aber das soll dir egal sein, weil die funktion danach sowieso zuende ist.

            Kommentar


            • #7
              Aha, und welche ausgabe findet deiner Meinung nach VOR Aufruf der Funktion statt?
              Ich erhalte erst den Text, der in der zu includenden Datei steht und dann den Text, der zu anfang der $body Variable steht, die ich aufrufe, obwohl die Funktion listitems() erst nach dem Text aufgerufen wird.

              Wenn du das return IN der Funktion AM ENDE setzt, ist es egal. Dadurch wird die funktion zwar beendet. Aber das soll dir egal sein, weil die funktion danach sowieso zuende ist.
              Achso ja, aber wenn ich es erst am Ende setzte, dann erhalte ich ja nur den Wert des letzten Arrayeinrages.

              Wie würdest du denn das Array auslesen lassen? Würdest du es mittels einer Funktion machen? Welche Variablen würdest du übergeben lassen und wie würdest du sie innerhalb der $body Variable einbinden und den Text includen?

              Danke schonmal.
              Grüße

              Kommentar


              • #8
                Ich erhalte erst den Text, der in der zu includenden Datei steht und dann den Text, der zu anfang der $body Variable steht, die ich aufrufe, obwohl die Funktion listitems() erst nach dem Text aufgerufen wird.
                Ich habe dich gefragt, welche Ausgabe du vor dem Ausführen der Funktion gemacht hast? Also? Zeig sie mir konkret.

                Achso ja, aber wenn ich es erst am Ende setzte, dann erhalte ich ja nur den Wert des letzten Arrayeinrages.
                Dann speicherst du halt alle in einer variable (statt echo 'bla'; einfach $var.='bla') und returnst die.

                Kommentar


                • #9
                  ok, habe das gemacht, jetzt bekomme ich aber irgendwie die Zahl 11 raus !?
                  PHP-Code:
                  function listitems($seminar){
                      
                  $inc "";
                      
                  reset ($seminar);
                      foreach(
                  $seminar as $arr => $show){
                          if(
                  is_readable("../sem/".$show.".sem")){
                              
                  $inc .= include("../sem/".$show.".sem");
                              
                  //
                          
                  }else{
                              
                  $inc .= "<b>".$show."</b> (Leider...";
                          }
                      }
                      return 
                  $inc;
                  }

                  $put listitems($seminar);
                  echo 
                  $put

                  Kommentar


                  • #10
                    Damit kann ich als außenstehender wenig anfangen.

                    PHP-Code:
                    $inc .= include("../sem/".$show.".sem"); 
                    sowas geht natürlich nicht. schau mal ins manual.

                    Kommentar


                    • #11
                      Ok, ich habe jetzt in der Datei, die includet werden soll und die Beschreibung enthält, den gesamten Inhalt als Variable deklariert:

                      Datei:
                      PHP-Code:
                      <? $var = "Inhalt"; ?>
                      Meine function sieht jetzt so aus:

                      PHP-Code:
                      function listitems($seminar){
                          
                      $inc "";
                          
                      reset ($seminar);
                          foreach(
                      $seminar as $arr => $show){
                              if(
                      is_readable("../sem/".$show.".sem")){
                                  include(
                      "../sem/".$show.".sem");
                                  if (!isset(
                      $var)){
                                      
                      $inc .= "wird nicht gealden...";
                                  }else{
                                      
                      $inc .= $var;
                                      unset(
                      $var);
                                  }
                              }else{
                                  
                      $inc .= "wird nicht gealden...";
                              }
                          }
                          return 
                      $inc;

                      sie wird aufgerufen durch:
                      PHP-Code:

                      $body 
                      "Text.....".listitems($seminar)."Text...";
                          
                      echo 
                      $body
                      Das funktioniert fast alles so wie ich es gerne haben möchte, mit Ausnahme:
                      Es wir folgendes auf meinem Monitor ausgestrahlt:
                      1.: Der Beschreibungstext (der includet wird) (erscheint als aller erstes)
                      2.:der "Text...."
                      3.: hier nochmal der Text der includet wird (zum 2. mal) (hier gehört er hin!)
                      4.: "Text2..."

                      Wie bekomme ich 1. weg und warum wird es überhaupt angezeigt?

                      Grüße und Danke!
                      Zuletzt geändert von zero.delight; 30.08.2006, 12:51.

                      Kommentar


                      • #12
                        ??

                        Kommentar


                        • #13
                          hab die falsche Taste auf der Tastatur erwischt, sorry, habe aber den Beitrag jetzt richtig editiert.

                          Kommentar

                          Lädt...
                          X