Superglobale Arrays - Elemente Ansprechen?
Ralf Heumann
- php
-3 Mario0 Ralf Heumann0 Daniel
-3 Bio0 wahsaga
1 Tobias Kloth0 Mario
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
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
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
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
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
Sup!
Was ist denn superglobal? Gibt's auch "galaktisch"?
Gruesse,
Bio
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
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
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
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
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
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.
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
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