Ralf Heumann: Superglobale Arrays - Elemente Ansprechen?

Hallo,

ich habe einen Frage zu den Superglobalen Arrays, wie z.B. $_POST.

Die Elemente normaler Arrays sind ja beispielsweise mit $array[2] anzusprechen. Wie kann ich denn beispielsweise das 2. Element von $_POST ansprechen?
Nehmen wir mal an ich habe davor eine Form abgeschickt, das 2. Element heisst beispielsweise $_POST["absender"] und ich möchte eine for-Schleife bauen die mir egal wieviele Form-Elemente per POST abgeschickt wurden alles untereinander auflistet:

for($i = 0; $i < count($_POST); $i++)
  {
  echo $_POST[$i]."<br />\n";
  }

$_POST[$i] funktioniert in dem Fall nicht. Mir ist zwar klar, dass das 2. Element $_POST["absender"] heisst, aber ich möchte es eben so programmieren, dass es auch noch funktioniert, wenn ich den absender auf einmal in "Sender" umbenenne..

MFG und Danke im voraus.

Ralf Heumann

  1. Ich vermute einmal, dass PHP die Reihenfolge egal ist und alle Werte des POST's nur in einem assoziativen Array speichert und nicht in einem Numerischen.

    Lasse mich gern eines Besseren belehren, aber ich würde sagen, dass Dein Problem in PHP nicht lösbar ist.

    cu, Mario

    1. Ich vermute einmal, dass PHP die Reihenfolge egal ist und alle Werte des POST's nur in einem assoziativen Array speichert und nicht in einem Numerischen.

      Lasse mich gern eines Besseren belehren, aber ich würde sagen, dass Dein Problem in PHP nicht lösbar ist.

      cu, Mario

      Nach langem ausprobieren und durchforsten sämtlicher Array-Funktionen in der PHP-Docu habe ich es letztendlich doch selbst hinbekommen. Hier die Lösung mit der ich es geschafft habe auf dem Screen alle übergebenen Elemente von $_POST und deren Value auszugeben:

      for($i = 0; $i < count($_POST); $i++)
        {
      $elementName = key($_POST);
      echo $elementName."=>".$_POST[$elementName]."<br />\n";
      next($_POST);
      }

      War etwas knifflig, wenn man nicht weiß wie man vorgehen muss.. aber ein Überblick über alle array-Funktionen war zwar zeitaufwendig, aber hilfreich.

      Wozu ist das nun gut wozu ich das gebraucht habe? Ich denke damit kann man vieles Anfangen. Für mich dient es für folgenden Zweck:

      Ich kann nun ein ganzes Formular bauen wie ich möchte und in der nachfolgenden Funktion werden alle elemente erkannt und ermittelt.
      Beispielsweise kann man damit nun eine E-Mail generieren die eine E-Mail nach folgendem Schema generiert:

      Name: Neubert
      Vorname: Peter
      Strasse: Sandbacherstr. 12
      .
      .
      .
      usw.

      Danke trotzdem für Eueren Supply :)

      Grüßle Ralf

      1. Hi,

        for($i = 0; $i < count($_POST); $i++)
          {
        $elementName = key($_POST);
        echo $elementName."=>".$_POST[$elementName]."<br />\n";
        next($_POST);
        }

        also ich würde es so machen:

          
        while($elementName = key($_POST))  
        {  
          echo $elementName."=>".$_POST[$elementName]."<br />\n";  
          next($_POST);  
        }  
        
        

        Solange kein element den namen 0 hat läuft dies so ohne probleme

        MfG

        1. Hallo Daniel,

          also ich würde es so machen:

          while($elementName = key($_POST))
          {
            echo $elementName."=>".$_POST[$elementName]."<br />\n";
            next($_POST);
          }

            
          ich eher so:  
          ~~~php
          foreach($_POST as $key => $value){  
              echo $key.'=>'.$value."<br />\n";  
          }
          

          Grüße aus Nürnberg
          Tobias

  2. Sup!

    Was ist denn superglobal? Gibt's auch "galaktisch"?

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. hi Bio,

      Was ist denn superglobal? Gibt's auch "galaktisch"?

      wenn du an anderen stellen deine trollige "kritik" an PHP loswerden musst, bitteschön.

      aber in sachbezogenen threads könntest auch du öfter mal an dieter nuhr denken.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo Ralf,

    Nehmen wir mal an ich habe davor eine Form abgeschickt, das 2. Element heisst beispielsweise $_POST["absender"] und ich möchte eine for-Schleife bauen die mir egal wieviele Form-Elemente per POST abgeschickt wurden alles untereinander auflistet:

    Du suchst foreach.

    Grüße aus Nürnberg
    Tobias

    1. Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe. ;-)

      cya

      1. hi,

        Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe.

        darauf kannst du dich m.E. weder "mit foreach", noch auf _irgendeine_ andere weise verlassen.

        gruß,
        wahsaga

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

          Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe.

          darauf kannst du dich m.E. weder "mit foreach", noch auf _irgendeine_ andere weise verlassen.

          Nun ich brauchte das ganze ja auch nicht unbedingt in de rgleichen Reihenfolge wie die <form> aufgebaut ist, vielleicht hab ich mich da zu ungenau ausgedrückt. Klar wäre es schön, wenn es so wäre, aber das ist nun erstmal zweitrangig.

          Allerdings musste ich feststellen, dass die Ausgabe doch tatsächlich in gleicher Reihenfolge ausgegeben wurde, wie mein Formular aufgebaut war.

          Gruß Ralf

      2. Moin!

        Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe. ;-)

        Doch, darauf kann man sich verlassen. Im Gegensatz zu den assoziativen Arrays von Perl, bei denen eine Reihenfolge eben gerade nicht garantiert werden kann, sind die Reihenfolgen der Elemente in PHP-Arrays stabil.

        • Sven Rautenberg
        1. Tag Sven.

          Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe. ;-)
          Doch, darauf kann man sich verlassen.

          Rein interessenhalber: gibt es dazu eine Quelle, dass jeder Browser die Name/Werte-Paare entsprechend der Reihenfolge im HTML-Quellcode übermittelt? Ich darf die Beobachtung einflechten, dass die Name/Werte-Paare dynamisch erzeugter Formularelemente zumindest im Firefox 1.0.4 nach den "hardcodierten" Formularelementen übermittelt werden, unabhängig davon, an welcher Stelle im Dokumentenbaum sie eingehängt wurden.

          Siechfred

        2. Hi,

          Auch mit foreach würde ich mich nicht darauf verlassen, dass alle Formularfelder in der Reihenfolge ankommen wie ich diese in meinen <form> Tag angegeben habe. ;-)
          Doch, darauf kann man sich verlassen. Im Gegensatz zu den assoziativen Arrays von Perl, bei denen eine Reihenfolge eben gerade nicht garantiert werden kann, sind die Reihenfolgen der Elemente in PHP-Arrays stabil.

          Wenn es erstmal im PHP-Array angekommen ist, mag sich die Reihenfolge nicht mehr ändern.

          Im HTML-Standard ist aber nicht festgelegt, in welcher Reihenfolge die name-value-Pärchen der successful controls versendet werden.
          Insofern kann man sich nicht auf die Reihenfolge aus dem form-Element verlassen.
          (man kann sich ja noch nichtmal darauf verlassen, daß nur die name-value-Pärchen der successful controls versendet werden - siehe button-Element und IE)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.