Sven Rautenberg: viele Input Type = Text als Array übertragen

Beitrag lesen

Moin!

Ich dachte man könnte Textfelder in einem Formular genau so einfach als Array übertragen, wie bei Checkboxen? Aber igrendwie geht das wohl nicht. (<input type=text name=$Menge[] value=12>)
Wie so ging das jedenfalls immr bei Checkboxen. Jedenfalls will ich eine unbestimmte Anzahl dieser Textfelder übertragen. Ich kann auch Menge[1...] schreiben, bringt alles nichts.
Wie könnte das funktionieren?

Üblicherweise kriegt man so ein Array mit den ganzen Inhalten hin:

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

PHP interpretiert den Variablennamen als Array wegen der eckigen Klammern hinten und legt das Array "$arrayname" an. Und das Weglassen des Index hat den schönen Effekt, daß PHP den jeweiligen Eintrag immer hinter den letzten bestehenden Eintrag anhängt, sofern das Array schon existiert.

Aber Vorsicht! Solch ein Vorgehen ist bei der Übermittlung der Zutatenliste eines Salates sicher ganz simpel machbar, weil es da auf die Reihenfolge nicht ankommt, aber ganz sicher nicht bei der Massenaktualisierung einer Datenbank - viel zu leicht kann durch einen dummen Fehler ein Eintrag verrutschen - und dann ist Alarm!

Besser ist, den Namen (wie du schon bei Amazon gesehen hast) mit einer eindeutigen ID anzureichern (die muß nicht verschlüsselt sein), und den Zugriff auf die Formulardaten ausschließlich über den Hash HTTP_POST_VARS zu erledigen.

<input type="text" name="headline123" value="...">
<input type="text" name="headline2768" value="...">

PHP kennt dann $HTTP_POST_VARS['headline123'] und $HTTP_POST_VARS['headline2768']. Man kann den Hash auch nach den Schlüsseln durchsuchen, diese auf bestimmte Anteile untersuchen (ein Schlüsselname mit "headline" vorn wird irgendeine Überschrift kennzeichnen), und die ID des Datensatzes dann abfragen, indem man die Zahl dahinter auswertet.

- Sven Rautenberg