griever: array aus formular per post

Mahlzeit.

ist es möglich, aus einem Formular für PHP ein Array auszugeben?

  
<form action="emailformbearbeitung.php" method="post">  
 <input type="text" value="wert 1" name="liste">  
 <input type="text" value="wert 2" name="liste">  
 <input type="text" value="wert 3" name="liste">  
 <input type="text" value="wert 4" name="liste">  
 <input type="text" value="wert 5" name="liste">  
</form>  

Nun möchte ich dies als Array in PHP auslesen ...

  
echo $liste[0]."<br>";  
echo $liste[1]."<br>";  
echo $liste[2]."<br>";  
echo $liste[3]."<br>";  
echo $liste[4]."<br>";  

Funktioniert das in der Form oder muss ich da anderweitig versuchen darauf zuzugreifen?

MFG
Griever

--
LOOK MY PAGE!
  1. Hallo,

    ist es möglich, aus einem Formular für PHP ein Array auszugeben?

    Ja, es ist PHP möglich, aus den Name-Value-Pärchen, die beim Post übermittelt werden, ein "Array" zu machen.

    <form action="emailformbearbeitung.php" method="post">
    <input type="text" value="wert 1" name="liste">
    <input type="text" value="wert 2" name="liste">
    <input type="text" value="wert 3" name="liste">
    <input type="text" value="wert 4" name="liste">
    <input type="text" value="wert 5" name="liste">
    </form>

      
    Schreib dafür einfach:  
      
    ~~~html
      
    <form action="emailformbearbeitung.php" method="post">  
      <input type="text" value="wert 1" name="liste[1]">  
      <input type="text" value="wert 2" name="liste[2]">  
      <input type="text" value="wert 3" name="liste[3]">  
      <input type="text" value="wert 4" name="liste[4]">  
      <input type="text" value="wert 5" name="liste[5]">  
    </form>  
    
    

    wenn Du bestimmte Indexe haben willst,
    oder schreib

      
    <form action="emailformbearbeitung.php" method="post">  
      <input type="text" value="wert 1" name="liste[]">  
      <input type="text" value="wert 2" name="liste[]">  
      <input type="text" value="wert 3" name="liste[]">  
      <input type="text" value="wert 4" name="liste[]">  
      <input type="text" value="wert 5" name="liste[]">  
    </form>  
    
    

    wenn die Indexe nicht relevant sind.

    Der Index-Bezeichner selber darf im HTML-Code _nicht_ in Häkchen stehen, nur in PHP wird er

    $_POST['liste']['a']

    geschrieben (bei alphanumerischen Indexen).

    dann kannst Du auch

    echo $liste[0]."<br>";
    echo $liste[1]."<br>";
    echo $liste[2]."<br>";
    echo $liste[3]."<br>";
    echo $liste[4]."<br>";

    
    >   
      
    auslesen.  
      
      
    LG  
    Chris
    
    1. Mahlzeit.

      Danke. Das wollte ich wissen. Genau so. Also macht er bei:

        
      <input type="text" value="blubbel" name="arrayname[]">  
      usw...  
      
      

      eine Automatische durchnummerierung beginnend bei 0, oder was?
      So dass ich dann mit einer For-Schleife in PHP darauf zugreifen kann, oder?

      MFG
      Griever

      --
      LOOK MY PAGE!
      1. Hallo Griever,

        Danke. Das wollte ich wissen. Genau so. Also macht er bei:

        Wer ist 'er'? *g*

        <input type="text" value="blubbel" name="arrayname[]">
        usw...

        
        >   
        > eine Automatische durchnummerierung beginnend bei 0, oder was?  
        > So dass ich dann mit einer For-Schleife in PHP darauf zugreifen kann, oder?  
          
        Ja, die Indexe werden bei 0 beginnend hochgezählt.  
        Allerdings sollte man sich nicht auf die Einhaltung der Reihenfolge für die Elemente HTML -> Post -> PHP verlassen.  
          
        Manche Browser fangen z.B. von hinten an.  
          
        Die Abarbeitung in PHP bitte nicht mit einer dedizierten Schleife (for) durchführen, sondern mit der speziellen "Listenschleife" (foreach).  
          
          
          if(isset($\_POST['liste']) and is\_array($\_POST['liste'])  
          {  
            foreach($\_POST['liste'] as $key => $val)  
            {  
              echo "<p>liste[".$key."]: $val</p>\n";  
            }  
          }  
          
          
        Probier es mal aus.  
          
          
        LG  
        Chris  
          
          
          
          
          
          
          
        
        
        1. Mahlzeit.

          Das hört sich jetzt vielleicht blöd an, aber ich schreibe dieses PHP blind. (ohne vorschau oder ähnliches).

          Ich bin komplett auf meine Kenntnisse angewiesen und überprüfe sämtliche zusammenhänge via papier-linien-system.

          aber ich kann dir mal erklären, was genau ich vor habe.

          Zuerst übergibt ein Formular ein durch Javascript zusammengefügten String mit der Post-Methode an die PHP-Seite.
               (Variiert stark wegen Auswahl des Kunden (onlineshop))

            
          <form action="mail.php" method="post" target="dasjavascriptfenster">  
          <!-- Wird erst durch javascript aufgerufen und dann wird das Forumlar abgesendet -->  
            
          <input type="text" value="bezeichnung1*artikelnummer1*preis1#bezeichnung2*artikelnummer2*preis2|zusammengerechneterpreis" name="liste">  
          <!-- ist dann noch versteckt und mit mehr inhalt -->  
          </form>  
          
          

          Die Preise sind alle als Cent bearbeitet, sodass kein Komma steht und nur eine Zahl herauskommt. Ist aber glaube ich nicht relevant.

          Nun möchte ich eine (optisch und verhältnismäßig gleichgroße) A4-Seite anzeigen lassen, die wie ein Bestellbrief oder so aussieht. Darin möchte ich in einer sauberen Liste die Artikelbezeichnung, Artikelnummer und den Einzelpreis (mal Menge, welche noch mit eingearbeitet wird) ausgeben. Dieses mach ich mit einer Tabelle, welche ich ebenfalls mit einer Javascript-funktion ausgebe. Die Funktion ist leicht aufgebaut. (hab mich da irgendwie auf PHP-Synthax verspielt)

            
          function teilen(trennzeichen,s) {  
           s=s.split(trennzeichen);  
           return s;  
          }  
          string_list=teilen("|",liste)              // Zuerst den gesamtpreis abtrennen  
          gp=string_list[1]  
          string_list=teilen("#",string_list[0])     // Nun die einzelnen Artikel voneinander trennen  
          for(var i=0;i<string_list.lengt;i++)  
          {  
           string_list[i]=teilen("*",string_list[i]) // Hier werden die Artikel-Strings nochmals in die 3 Unterpunkte geteilt  
          }  
          // Hier folgt die verschachtelte For-Kombination für die Tabellenausgabe, die dann im HTML-Code an die passende Stelle gelegt wird  
          // Dabei werden auch die Formularfelder gleich als type="hidden" mitgeliefert, wo ich dann die Info für den Array brauchte  
          
          

          So. Nun bin ich dabei, die Version zu erstelle, wo alles formschön in HTML (und als Ausweich nur Text) zusammengelegt wird und dann an die entsprechende Emailadresse gesendet wird. Natürlich mit mail() in PHP

          So ist derzeit mein Stand des Fortschrittes.

          Wenn du Kritik oder Verbesserungsvorschläge hast, nur zu!

          MFG
          Griever

          --
          LOOK MY PAGE!
          1. Hallo Griever,

            <input type="text" value="bezeichnung1*artikelnummer1*preis1#bezeichnung2*artikelnummer2*preis2|zusammengerechneterpreis" name="liste">

            Warum stützt Du DIch da auf JavaScript?
            Ich würde versuchen, das mittels Session und "Ping-Pong-Technik" rein auf HTML und PHP sowie die DB zu stützen.

            Und dann kannst Du für jeden Paramter auch ein eigenes Dialog-Element verwenden. Du kannst es doch auch auf read-only setzen, damit der User nicht verwirrt wird.

            LG
            Chris

            1. Mahlzeit.

              Ähm. Die ganze Seite basiert zu 60% (ungefähr) auf Javascript. Nun möchte ich die Geschwindigkeit, wie die Seite Arbeitet (durch das Javascript) auch auf das Formular übernehmen. Da ich nicht mit PHP ein String aufsprengen möchte, mache ich das mit Javascript. Dadurch wird nicht erst ein weißes Blatt für 30 Sekunden angezeigt sondern man sieht, wie es aussehen soll und eh man sich versieht, steht da auch die Liste mit drin. Da mir PHP nur zum versand und verarbeitung der E-Mail helfen soll, lasse ich Javascript die ganze arbeit machen. ist auch schon stärker darauf ausgerichtet, dass es bei allen gängigen Browsern läuft. Nur Safari bringt nicht ganz das gewünschte ergebnis.

              Den Quellcode der Seite gebe ich hier mit absicht nicht aus, da dies später eine Online-Shop seite werden soll, wo Grafik und Design angeboten wird und dadurch dann eine Betrugsgefahr bestehen würde.

              Nun bin ich dabei, das Mailformular in 1 Document zu schreiben und mit PHP die Weichen zu stellen (ist gesendet? ist geprüft? ist leer? usw.)

              Da die Datei nach kurzer Zeit sehr groß wird und immer längere Ladezeiten benötigt, verzichte ich auf For- oder Foreach-Schleifen in PHP um die Ladezeiten unten zu halten.

              Meine Java-Script-Funktionen starten immer erst bei vollständiger Anzeige der Seite und sind Objektorientiert.

              MFG
              Griever

              --
              LOOK MY PAGE!
              1. hi,

                Da ich nicht mit PHP ein String aufsprengen möchte, mache ich das mit Javascript. Dadurch wird nicht erst ein weißes Blatt für 30 Sekunden angezeigt sondern man sieht, wie es aussehen soll und eh man sich versieht, steht da auch die Liste mit drin.

                Nur bei Benutzern, die kein Javascript haben, dauert es geringfügig länger - statt 30 Sekunden lang sehen nie überhaupt etwas davon.

                Da mir PHP nur zum versand und verarbeitung der E-Mail helfen soll, lasse ich Javascript die ganze arbeit machen.

                Ich nehme an, du arbeitest immer noch an deinem "Shop", von dem hier schon öfters die Rede war.
                Warum du da mit solcher Hartnäckigkeit versuchst, Besucher auszuschließen, verstehe ich nicht.

                Den Quellcode der Seite gebe ich hier mit absicht nicht aus, da dies später eine Online-Shop seite werden soll, wo Grafik und Design angeboten wird und dadurch dann eine Betrugsgefahr bestehen würde.

                Dann vergiss bloß nicht, eine Rechtsklicksperre einzubauen!!!1elf

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Mahlzeit.

                  Nur bei Benutzern, die kein Javascript haben, dauert es geringfügig länger - statt 30 Sekunden lang sehen nie überhaupt etwas davon.

                  Na denkst du, daran hätte ich nicht gedacht. Sollte ein User JavaScript deaktiviert haben, wird die Seite immernoch vollständig angezeigt. Jedoch enthält die Seite dann einen Vermerk, dass der Inhalt nur mit JavaScript zu 100% angezeigt und dessen Funktionen erst kontinuierlich funktionieren.

                  Ich nehme an, du arbeitest immer noch an deinem "Shop", von dem hier schon öfters die Rede war.
                  Warum du da mit solcher Hartnäckigkeit versuchst, Besucher auszuschließen, verstehe ich nicht.

                  Ja. Ich arbeit noch an dem Shop.
                  Die Frage ist berechtigt. Dazu müßte ich erstmal den Inhalt klären :

                  Auf diesem Shop werden artikel angeboten, die über Kunst und Design handeln. Sollte sich da vielleicht jemand auffinden, der einfach mal nur "durchschnuppern" möchte, sollte dann auch JavaScript aktiviert haben.
                  Außerdem soll die Seite für die Geschwindigkeit dienen. Man geht auf die Seite, sucht sich seine Kathegorie aus und muss dann (wenn JavaScript aktiviert ist) nich so lange, wie bei normalen HTML-Verlinkungen auf die Anzeige warten, nur weil dort 200 Bilder im Format 200x140 enthalten sind. Diese werden schon im Voraus geladen und während der User noch durch das Menü klickt, was aber nicht allzuviel Zeit in Anspruch nimmt, sind die Bilder im Hintergrund schon existent. Im Weiteren kennt man das Problem mit den "etwas größeren Bildern" bei der Anzeige, die dann einfach bei der Mitte aufhören. Da muss man dem Browser schon sagen, dass das Bild nochmals richtig geladen werden soll. Dazu benutze ich aber Javascript, welches alle 2 Sekunden überprüft, ob auch alle Bilder angezeigt werden.

                  Dann vergiss bloß nicht, eine Rechtsklicksperre einzubauen!!!1elf

                  Das mit der Rechts-Click-Sperre ist eigentlich schon so gut wie gelöst. Doch wenn du meinst, dass JavaScript nicht ausreicht, warum empfielst du mir dann soetwas? (Aus meiner Sicht nur mit JavaScript teils lösbar.)

                  MFG
                  Griever

                  --
                  LOOK MY PAGE!
        2. echo $begrüßung;

          Ja, die Indexe werden bei 0 beginnend hochgezählt.
          Allerdings sollte man sich nicht auf die Einhaltung der Reihenfolge für die Elemente HTML -> Post -> PHP verlassen.

          Manche Browser fangen z.B. von hinten an.

          Zum einen würde mich interessieren, welche Browser das z.B. wären.
          Zum anderen würde ich gern wissen, was du unter "fangen von hinten an" verstehst. Wenn du meinst, dass der Browser die Index-Nummerierung einfügt, liegst du damit im Irrtum. Das ist weder Aufgabe des Bowsers noch ist von der HTML-Spezifikation erlaubt, den Inhalt des name-Attributes zu ändern.

          echo "$verabschiedung $name";

          1. hi,

            Zum anderen würde ich gern wissen, was du unter "fangen von hinten an" verstehst. Wenn du meinst, dass der Browser die Index-Nummerierung einfügt, liegst du damit im Irrtum. Das ist weder Aufgabe des Bowsers noch ist von der HTML-Spezifikation erlaubt, den Inhalt des name-Attributes zu ändern.

            Wenn der Browser die Name-Value-Paare für Formularfelder mit einem Namen "test[]" in "anderer" Reihenfolge in den Querystring einhängt - dann ergibt sich daraus in PHP natürlich auch eine andere Reihenfolge im daraus erstellten Array.

            ?test[]=a&test[]=b&test[]=c
            ?test[]=c&test[]=b&test[]=a

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. echo $begrüßung;

              Wenn der Browser die Name-Value-Paare für Formularfelder mit einem Namen "test[]" in "anderer" Reihenfolge in den Querystring einhängt - dann ergibt sich daraus in PHP natürlich auch eine andere Reihenfolge im daraus erstellten Array.

              Das ist mir natürlich klar, und die Empfängerseite war auch nicht Gegenstand meiner Nachfrage. Meine Anwort (der Teil, der mit "Zum anderen" beginnt) bezog sich auf eine, meiner Meinung nach, nicht richtige oder zumindest falsch deutbare Beschreibung des Sendeverhaltens.

              echo "$verabschiedung $name";

              1. Hallo,

                es ist dem Browser überlassen, in welcher Reihenfolge er die Name-Value-Pärchen in den Post überträgt.

                Gutes Testbeispiel ist die Verwendung mehrerer Submit-Buttons und Absendung mittels RETURN.

                Nun bitte nicht wieder nörgeln, sondern vielleicht mal selber das Szenario für die Fehlermöglichkeiten suchen. Sonst bist Du doch auch so kreativ  (42) ;-))

                LG
                Chris

                1. echo $begrüßung;

                  es ist dem Browser überlassen, in welcher Reihenfolge er die Name-Value-Pärchen in den Post überträgt.

                  Gutes Testbeispiel ist die Verwendung mehrerer Submit-Buttons und Absendung mittels RETURN.

                  Und das halte ich immer noch für einen Fehler des Browsers wenn er ein name-value-Paar eines nicht gedückten Buttons mitsendet.

                  Nun bitte nicht wieder nörgeln, sondern vielleicht mal selber das Szenario für die Fehlermöglichkeiten suchen.

                  Ich nörgle nicht, ich hinterfrage nur, und habe den Eindruck, dass du meinen Fragen ausweichst.

                  echo "$verabschiedung $name";

                  1. Hallo Dedlfix,

                    Ich nörgle nicht, ich hinterfrage nur, und habe den Eindruck, dass du meinen Fragen ausweichst.

                    Was hast DU mich denn gefragt und nicht beantwortet bekommen?

                    LG
                    Chris

                    1. echo $begrüßung;

                      Was hast DU mich denn gefragt und nicht beantwortet bekommen?

                      Ach... nichts wichtiges.

                      echo "$verabschiedung $name";