tropenberta: array in mail packen

hi leuts

wenn ich innerhalb einer schleife

  
echo"$y. ID: $fid[$y] Produkt: $produktname[$y] Preis: $produktpreis[$y]<br>";  

bekomm ich so ne ausgabe:

1. ID:34 Produkt:xyz Preis:xyz
2. ID:101 Produkt:xyz Preis:xyz
3. ID:2 Produkt:xyz Preis:xyz
...

wie lange die liste ist hängt davon ab wieviele produkte ausgewählt wurden. kann von 1 bis 1000 sein ($y=1-1000). nachdem das letzte produkt erreicht ist wird die schleife verlassen.

jetzt möchte ich gerne den inhalt von den array´s $fid[], $produktname[] und $produktpreis[] so in einen mail befehl packen das es in der mail genauso erscheint wie bei der echo ausgabe.

lg micha

  1. Hi!

    jetzt möchte ich gerne den inhalt von den array´s $fid[], $produktname[] und $produktpreis[] so in einen mail befehl packen das es in der mail genauso erscheint wie bei der echo ausgabe.

    Was genau ist denn Dein Problem dabei? Der Zeilenumbruch? "\n"

    --
    Signaturen sind bloed.
    1. moin

      danke für deine antwort steel.

      das problem ist das ich nicht weis wie lange die arrays sind. bzw ich weis nicht wie ich
      als erstes fid[1] produktname[1]  produktpreis[1], dann als zweites fid[2] ...
      ausgebe. in ner schleife könnte ich es, aber ich möchte ja nicht das die mail funktion öfters wiederholt wird. also müsste ich ne schleifen funktion machen die nur innerhalb der mail funktion die zahlen addiert.

      bitte bedenkt das ich nicht mal ansatzweise die möglichkeiten von php kenne. bin dabei nach und nach mir php zu erschliesen.

      mail ( schleife( fid[$x] ... ) )

      LG
      Micha

      1. moin leuts

        also hab mir folgendes überlegt:

          
        $p = "1";  
        while ( $p < 1000 ){  
          if ( $fid == "" ){  
          break;  
          } else {  
            $bestellung = "$p. ID:$fid[$p] Produkt:$produktname Preis:$produktpreis<br>";  
            $p++;  
          }  
        }  
          
        echo "$bestellung";  
        
        

        schaut auch schonmal gut aus, aber hab jetzt diese ausgabe:

        1. ID: 4. Produkt: xyz Preis: 2.50
        2. ID: 7. Produkt: abc Preis: 2.90
        3. ID: 8. Produkt: lop Preis: 3.50
        999. ID: Produkt:Array Preis:Array

        verstehe jetzt nicht ganz warum die 999. ausgegeben wird.

        lg
        micha

        1. uups - sry.

          mein vorheriger threat stimmt nicht - funktioniert doch noch nicht. ich hatte vergessen nen echo befehl raus zu nehmen.

            
          $p = "0";  
          while ( $p < 1000 ){  
            if ( $fid == "" ){  
            break;  
            } else {  
              $bestellung = "$p. ID:$fid[$p] Produkt:$produktname Preis:$produktpreis<br>";  
              $p++;  
            }  
          }  
          echo "$bestellung";  
          
          

          hiermit bekomme ich diese ausgabe:
          999. ID: Produkt:Array Preis:Array

          also er überschreibt die variable. muss aber an den string dranhängen, erweitern.

          geht doch irgendwie mit dem . oder ?

          LG
          micha

          1. Moin,

            warum so kompliziert?

            $p = "0";
            while ( $p < 1000 ){

            Sind es immer genau 1000 Elemente? Warum greifst du nicht auf die Anzahl der Elemente direkt zu? Beispielsweise so:

            for($p = 0; $p < sizeof($fid); $p++) {  
               ...  
            }
            

            else {
                $bestellung = "$p. ID:$fid[$p] Produkt:$produktname Preis:$produktpreis<br>";
                $p++;
              }

            Du kannst einfach an die Variable Bestellung anhängen. Das geht so:

            $bestellung .= "$p. ID:$fid[$p] Produkt:$produktname Preis:$produktpreis\n";  
            
            

            Grüße Marco

            --
            Ich spreche Spaghetticode - fließend.
            1. hi marco

              danke für deine antwort.

              hab mir erstmal das mit dem anhängen angeschaut und habs jetzt mal so gemacht;

                
              $p = "1";  
              while ( $p < 1000 ){  
                if ( $fid == "" ){  
                break;  
                } else {  
                  $bestellung .= "$p. ID:$fid[$p] Produkt:$produktname[$p] Preis:$produktpreis[$p]<br>";  
                  $p++;  
                }  
              }  
              echo "$bestellung";  
              
              

              bekomme jetzt die bestellung wie folgt ausgegeben:
              1. ID: 13. Produkt: abc Preis: 6.00
              2. ID: 14. Produkt: xyz Preis: 6.00
              3. ID: Produkt: Preis:
              4. ID: Produkt: Preis:
              ...
              999.

              was ich nicht versteh ist, ich sage doch wenn $fid leer ist steige aus der schleife aus.
              macht aber anscheinend nicht.

              lg
              micha

              1. Moin,

                bekomme jetzt die bestellung wie folgt ausgegeben:

                1. ID: 13. Produkt: abc Preis: 6.00
                2. ID: 14. Produkt: xyz Preis: 6.00
                3. ID: Produkt: Preis:
                4. ID: Produkt: Preis:
                  ...

                Hättest du error_reporting auf "ALL" stehen würdest du auch haufenweise Fehler (oder zumindest Warnings) bekommen, da das Array ja offensichtlich nicht so viele Einträge hat.

                was ich nicht versteh ist, ich sage doch wenn $fid leer ist steige aus der schleife aus.
                macht aber anscheinend nicht.

                Das liegt daran, dass du das ganze Array prüfst und nicht nur den aktuellen Satz. Das heißt, du musst in der Abfrage nicht nur $fid prüfen (weil das ja nicht leer ist), sondern $fid[$p].

                Aber ich habe schonmal darauf hingewiesen: Warum nimmst du nicht eine For-Schleife und gehst das Array durch? Das wäre IMHO die einfachste und effizienteste Variante.

                Grüße Marco

                --
                Ich spreche Spaghetticode - fließend.
        2. Der Code den Du uns zeigst kann nicht mit dem Code übereinstimmen, der das gezeigte Ergebnis liefert. Nur auf die Sache mit der 999 kann ich Dir Auskunft geben:

          Deine Abbruchbedingung greift nicht, weil ($fid == "") niemals wahr wird - es ist ja ein Array. Es greift also nur: while ( $p < 1000 ). Ergo ist p beim letzten Durchlauf gleich 999.

          Bemühe Dich um fundiertes Wissen darüber, was Du tust - bevor versuchst einen Shop zu schreiben.

          Jörg Reinholz

          1. hi jörg

            yo hab ich gemerkt. hab´s bissl umgeschrieben und macht jetzt was es soll.

              
            $p = "1";  
            while ( $p < 1000 ){  
              
              
              
              if ( $fid[$p] == "" ){  
              break;  
              } else {  
                $bestellung .= "$p. ID:$fid[$p] Produkt:$produktname[$p] Preis:$produktpreis[$p]<br>";  
                $p++;  
              }  
            }  
            
            

            ich danke euch allen für die unterstützung.

            lg
            micha

            Der Code den Du uns zeigst kann nicht mit dem Code übereinstimmen, der das gezeigte Ergebnis liefert. Nur auf die Sache mit der 999 kann ich Dir Auskunft geben:

            Deine Abbruchbedingung greift nicht, weil ($fid == "") niemals wahr wird - es ist ja ein Array. Es greift also nur: while ( $p < 1000 ). Ergo ist p beim letzten Durchlauf gleich 999.

            Bemühe Dich um fundiertes Wissen darüber, was Du tust - bevor versuchst einen Shop zu schreiben.

            Jörg Reinholz

            1. Hi!

              Was ich nicht verstehe: Warum 1000? Mehr darf nicht? Du haettest das ganze Problem nicht gehabt, wenn die Obergrenze der Schleife die Arraygroesse waere, wie es dir hier vorgeschlagen wurde.

              --
              Signaturen sind bloed.
              1. hi steel

                yo ich weis schon - habs ja auch mittlerweile gelöst.

                aber wenn ich jetzt die variable mit mail versende hab ich keinen umbruch mehr in der mail.
                stattdessen sehe ich das <br> - logisch ist ja auch kein html bei der mail.
                muss ich aber sauber aufgelistet bekommen.

                lg
                micha

                1. aber wenn ich jetzt die variable mit mail versende hab ich keinen umbruch mehr in der mail.
                  stattdessen sehe ich das <br>

                  Du bekommst, was Du gibst. Ersetze den HTML-Zeilenumbruch ("<br>") durch das Text-Zeichen für den Zeilenumbruch. Innerhalb von doppelten Quotas ist das sehr einfach zu machen: "\n".

                  Ich warne immer noch davor, das Ergebnis Deiner Bemühungen online zu stellen. Obiges können so fast alle Programmiersprachen - deshalb glaube ich, dass Du gar keine Programmierkenntnisse hast. Wer aber solche grundlegenden Dinge nicht beherrscht macht sehr wahrscheinlich grobe Fehler welche im Endeffekt zu einer Angreifbarkeit oder Missbrauchsmöglichkeit des Servers führen.

                  Jörg Reinholz

                  1. hi jörg

                    du liegst mit deiner vermutung schon richtig.

                    das ist nur zum üben. bin momentan bissl am rum probieren.

                    danke dir aber für den hinweis und deine hilfe.

                    lg
                    micha

                    1. Hallo,

                      bin momentan bissl am rum probieren.

                      und wie schmeckt er? Schon high? :-)

                      *scnr*
                       Martin

                      --
                      Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. ^^

                        mag sein

  2. Tja, mein Lieber,

    jetzt möchte ich gerne den inhalt von den array´s $fid[], $produktname[] und $produktpreis[] so in einen mail befehl packen das es in der mail genauso erscheint wie bei der echo ausgabe.

    Da musst Du Dich wohl oder übel mal mit dem MIME-Standard, Mutlipart-Messages befassen. Das läuft auf eine Entscheidung ob HTML-Mail oder ein druckbares Medium im Attachment, z.B. eine PDF-Datei.

    Auch im ersten Fall wird das eine MIME-Mail, idealerweise als multipart/alternative, es ist der Sache Rechnung zu tragen, dass manche Email-Clients eben nicht HTML darstellen können oder deren Nutzer das untersagen.

    Hast Du HTML oder PDF, so ist die Darstellung einer Rechnung oder eines Lieferscheins kein Thema mehr.

    Hast Du PHP, so stehen Dir viele Möglichkeiten offen, recherchiere, was es in der Sache schon gibt und entwickle nebenher Dein Verständnis, das ist unumgänglich.

    Gus

  3. so leuts

    hab noch ein kleines problem und zwar wenn ich die bestellung mit echo ausgebe habe ich die richtige form.

    versende ich das ganze aber als mail ist die ausgabe in der mail anders. an der stelle wo in der variablen die <br> kommt wird kein umbruch gemacht sondern das br ausgegeben. habs auch mal mit /n probiert ist aber das gleiche.

    würde aber gerne die ausgabe haben wie beim echo.
    vermute mal das hat was damit zu tun oder:

    $header = 'Content-type: text/plain; charset=UTF-8' . "\r\n";

    denk mal das hat was mit dem content-type zu tun oder ?

    wenn ich den auf html stelle klappt aber auch nicht.

    lg
    micha

    1. Moin!

      hab noch ein kleines problem und zwar wenn ich die bestellung mit echo ausgebe habe ich die richtige form.

      versende ich das ganze aber als mail ist die ausgabe in der mail anders. an der stelle wo in der variablen die <br> kommt wird kein umbruch gemacht sondern das br ausgegeben. habs auch mal mit /n probiert ist aber das gleiche.

      / ist nicht gleich \

      --
      Signaturen sind bloed.
      1. ja ich meine in der mail habe ich keinen umbruch und sehe /n.
        will ich natürlich nicht - brauch nen umbruch.

        lg
        micha

        1. sry

          hab /n gemacht anstatt \n

          jetzt gehts.

          lg
          micha

  4. hi leuts

    noch ne frage zu while und for schleifen.

    es wird meistens die for schleife verwendet, zumindest in den beispielen die ich betrachte.
    hat das einen grund ?
    ne while schleife macht doch das gleiche, oder ?

    bzw was ist der unterschied zwischen den beiden ?

    lg
    micha

    1. Hallo,

      es wird meistens die for schleife verwendet, zumindest in den beispielen die ich betrachte.
      hat das einen grund ?
      ne while schleife macht doch das gleiche, oder ?

      bzw was ist der unterschied zwischen den beiden ?

      prinzipiell lassen sie sich ineinander überführen. Die for-Schleife vereinigt halt eine Initialisierung, eine Bedingung und z.B. eine Zählfunktion zentral im Schleifenkopf, während man bei der while-Schleife diese beiden Ausdrücke vor der Schleife bzw. am Ende des Schleifenrumpfs zusätzlich formulieren muss.

      Klassisch wird eine for-Schleife verwendet, wenn die Anzahl der Schleifendurchläufe vorher bekannt ist und die Schleife im Grunde ein stures Durchzählen ist, während man die while-Schleife gern verwendet, wenn sich die Schleifenbedingung während des Durchlaufs immer wieder neu ergeben kann. Das ist aber nur eine Faustregel und kein Gesetz.

      Ciao,
       Martin

      PS: Du plenkst. Das ist sehr unangenehm zu lesen.

      --
      Viele Fachleute vertreten die Ansicht, jedes Feature eines Programms, das sich nicht auf Wunsch abstellen lässt, sei ein Bug.
      Außer bei Microsoft. Da ist es umgekehrt.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. danke für deine antwort martin.

        lg
        #micha