Input-Felder in PHP verarbeiten
Danny
- php
Habe ein vielleicht simples Problem in PHP komme aber nicht auf die Lösung.
Ich habe eine verschiedene Anzahl Input-Felder, die an ein PHP-Script per get oder post übergeben werden. Die Struktur sieht so aus:
...
<input type=text name=wert_1 value=blabla>
<input type=text name=wert_2 value=blabla>
<input type=text name=wert_3 value=blabla>
<input type=text name=wert_4 value=blabla>
...
Ich weiss wie ich direkt die werte in PHP erhalte, habe aber das Problem, dass an das Script mal wert_1, wert_2, wert_3 übergeben wird und dann geht es mal wieder von wert1 bis wert8 (aber immer durchnumeriert). Ich komme jetzt nicht darauf, wie ich überprüfen kann, bis wohin die variable "wert_x" geht. Also wie ich es automatisieren kann, dass die Input-Felder bis zu den vorhanden - übergebenen Werten abgefragt werden. Ich kann direkt $wert_1 oder $wert_4 abfragen - wäre aber nicht automatisiert, da es mal bis $wert_120 gehen kann und mal nur bis $wert_2.
Ich hoffe ich habe es nicht zu kompliziert erklärt. Bin für jeden Tipp dankbar. Ich denke mal, es ist wieder nur eine ganz simple Sache...
Danke schonmal...
cya
Danny
Hallo Danny,
dann kennst Du auch schon $_GET[$i] ?
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
Mit den Post-Variablen geht das genauso.
Grüße
Tom
Hallo Danny,
dann kennst Du auch schon $_GET[$i] ?
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
oder du benennst deine input felder alle in "wert[]" um, dann bekommst du ein array $wert mit allen werten. (Vorteil: fals noch andere input felder vorhanden sind, würde die auch in $_GET stehen)
Heizer
Hallo Danny,
dann kennst Du auch schon $_GET[$i] ?
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
oder du benennst deine input felder alle in "wert[]" um, dann bekommst du ein array $wert mit allen werten. (Vorteil: fals noch andere input felder vorhanden sind, würde die auch in $_GET stehen)
Heizer
Ne, das kann ich leider nicht machen. Wäre die schönste und einfachste Sache der Welt. Ich kann aber an dem Formular nix ändern. Das hat verschiedene Gründe... :( Ich muss mit dem auskommen, was vom Formular übergeben wird - so wie es ist :(
Hi nochmal,
Du kannst mit Arrays ne Menge machen.
Sortieren
umkopieren
durchlaufen von vorne bei hinten wie durch eine verkettete Liste Es gibt einen Zeiger auf das gerade aktuelle Element und den kannst Du mit next weiterrücken.
Ich würde mit ein zweites Array nehmen und durch das erste durchlaufen, Immer wenn die Variable substr(...[key],0,4)=="wert" ist, dann wird der Eintrag in das andere Array kopiert.
Hier haben wir ja eine Liste von Wertepaaren, da würde sich ein Konstrukt mit for ... each() anbieten.
Grüße
Tom
Hi
oder du benennst deine input felder alle in "wert[]" um, dann bekommst du ein array $wert mit allen werten. (Vorteil: fals noch andere input felder vorhanden sind, würde die auch in $_GET stehen)
Guck Dir mal die Liste der Zeichen an, die HTML in name-Attributwerten erlaubt. [ und ] sind nicht dabei.
Andreas
Hi
oder du benennst deine input felder alle in "wert[]" um, dann bekommst du ein array $wert mit allen werten. (Vorteil: fals noch andere input felder vorhanden sind, würde die auch in $_GET stehen)
Guck Dir mal die Liste der Zeichen an, die HTML in name-Attributwerten erlaubt. [ und ] sind nicht dabei.
Oh, wieder ein Fall, wo Theorie und Praxis auseinanderklaffen...
Aber: der validator hat bei mir noch nie gemeckert, und ich validiere alle meine Seiten; und daß wo er doch sonst so streng ist.
Heizer
Hallo Andreas
oder du benennst deine input felder alle in "wert[]" um, dann bekommst du ein array $wert mit allen werten. (Vorteil: fals noch andere input felder vorhanden sind, würde die auch in $_GET stehen)
Guck Dir mal die Liste der Zeichen an, die HTML in name-Attributwerten erlaubt. [ und ] sind nicht dabei.
Da ist PHP wohl ein bischen tumb. An der Stelle finde ich aber auch z.B. die W3C-Spec _etwas_ "verwirrend": http://www.w3.org/TR/html4/interact/forms.html#adef-name-INPUT beschreibt den Inhalt des name-Attributes als CDATA und http://www.w3.org/TR/html4/types.html#type-name schränkt dies wiederum ein. Schaut man also nicht weiter, als die entsprechenden Links vorgeben, muss man zu dem Schluß kommen, [ und ] wären erlaubt (was sie ja wohl nicht sind). Dieser Umstand wird aber leider unter einem anderen - wenn auch direkt anschließenden - Punkt behandelt. Vermutlich haben die PHP-Entwickler auch nicht weiter gelesen, als ich (zumindest anfänglich, denn man lernt ja irgendwann, sich in die Schreibe der Spec-Autoren zumindest rudimentär einzudenken ;)).
Aber Spaß beiseite. Ist dies nicht ein echter meldepflichtiger Bug, oder soll man einfach weiter mit diesem Umstand leben?
Es sollte ja nicht Schwierig sein, im Zuge der Weiterentwicklung von PHP dieses zu berücksichtigen (immerhin mussten vor kurzem schon mal etliche/alle? PHP-Skripte wegen register_globals=off angepasst werden). Schließlich ist es imho kein großer Aufwand zu erkennen, ob Formularelemente mit gleichem Namen mehrfach übermittelt wurden. Zur Not können die PHP-Entwickler ja im CPAN unter CGI.pm nachschlagen. ;))
Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
Hallo,
Ich ziehe die Behauptung zurück (siehe auch </?m=146378&t=26821>).
[ und ] sind tatsächlich erlaubt in name-Attributwerten.
Nicht jedoch in id-Attributwerten.
type-name ist nur für das id-Attribut aller Elemente sowie für
das name-Attribut des meta-Elements und das http-equiv Attribut des Meta-Elements festgelegt.
Alle übrigen name-Attribute erlauben tatsächlich cdata.
Habs gestern auch noch mit dem Validator getestet:
<input name="blabla[]" id="laber[]">
^ ^
^ angemeckert
^
nicht angemeckert
An der Stelle finde ich aber auch z.B. die W3C-Spec _etwas_ "verwirrend"
Ja, ich hab mich da auch verwirren lassen.
Und schlimmer noch, ich habe andere auch verwirrt...
Andreas
Hallo Danny,
dann kennst Du auch schon $_GET[$i] ?
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
Mit den Post-Variablen geht das genauso.
Grüße
Tom
Hey das ging ja fix. Danke.
Das ist ja wieder simpel :) Hm. Habe ich vorher nicht erwähnt: Es werden nicht nur diese wert_x Input-Felder übergeben, sondern noch eine Unmenge an anderen Werten - z.B. über hidden inputs... Deswegen ist quasi die menge von wert_x-input-feldern wichtig - da siehts schon wieder komplizierter aus, oder? Hast Du noch einen Tipp für mich :) Danke.
Hi,
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
Mit den Post-Variablen geht das genauso.
Fast, $_POST statt $_GET verwenden... ;-)
Das ist ja wieder simpel :) Hm. Habe ich vorher nicht erwähnt: Es werden nicht nur diese wert_x Input-Felder übergeben, sondern noch eine Unmenge an anderen Werten - z.B. über hidden inputs... Deswegen ist quasi die menge von wert_x-input-feldern wichtig - da siehts schon wieder komplizierter aus, oder? Hast Du noch einen Tipp für mich :) Danke.
Wenn die immer von 1 bis x durchnumeriert sind:
in einer Schleife von $i von 1 aufsteigend zählen und prüfen, ob isset($_GET["wert_" + $i]) true ist.
Wenn ja, Wert übernehmen, wenn nein: alle Werte gefunden, Schleife abbrechen.
Andreas
Moin,
isset($_GET["wert_" + $i]) true ist.
^ ersetze durch .
Sonst könnte man auch noch mit Variablen spielen:
<?php
$wert_1 = "wert 1";
$wert_2 = "wert 2";
$wert_3 = "wert 3";
$prefix = "wert_";
$startWert = 1;
$myInput = $prefix .$startWert;
$doCount = true;
while($doCount) {
$myInput = $prefix .$startWert;
if(isset($$myInput)) {
$startWert++;
} else {
break;
}
}
echo "Endergebnis: " .($startWert-1);
?>
Gruß, Uschi
Hi,
Frage einfach das Array der Get-Variablen, wieviele Elemente es hat:
$anzahl=sizeof($_GET);
Mit den Post-Variablen geht das genauso.
Fast, $_POST statt $_GET verwenden... ;-)
Das ist ja wieder simpel :) Hm. Habe ich vorher nicht erwähnt: Es werden nicht nur diese wert_x Input-Felder übergeben, sondern noch eine Unmenge an anderen Werten - z.B. über hidden inputs... Deswegen ist quasi die menge von wert_x-input-feldern wichtig - da siehts schon wieder komplizierter aus, oder? Hast Du noch einen Tipp für mich :) Danke.
Wenn die immer von 1 bis x durchnumeriert sind:
in einer Schleife von $i von 1 aufsteigend zählen und prüfen, ob isset($_GET["wert_" + $i]) true ist.
Wenn ja, Wert übernehmen, wenn nein: alle Werte gefunden, Schleife abbrechen.
Andreas
Ja das scheint wirklich erstmal die einfachste Lösung zu sein (natürlich wirklich den . statt +) - zumindest, wenn ich das Formular selbst nicht verändern kann.
Also vielen Dank nochmal
Danny