Rolf B: FormData.append - überschreiben neuere Werte ältere?

Beitrag lesen

Hallo Manuel,

FormData kapselt lediglich die Daten eines <form> Elements.

formData.append("login", user.value);
formData.append("login", pass.value);

entspricht diesem HTML

<form>
  <input type="text" name="login">
  <input type="text" name="login">
</form>

Im realen Leben natürlich mit Labels und Buttons geschmückt.

Du kannst in beide inputs etwas eintragen, und wenn Du beim POST des Formulars an der Leitung schnupperst, findest Du im Body des Requests sowas ähnliches wie

login=foo&login=bar;

Also, eigentlich gar nicht so, weil FormData nicht urlencoded gesendet wird, sondern als multipart/form-data. Aber du weißt, was ich meine, oder? Und PHP kann das unterscheiden.

Eine Web-Application, die einen POST Content manuell auswertet, kann beide login-Werte herausholen und versuchen, damit etwas sinnvolles anzustellen. PHP tut das nicht, es speichert einfach im $_POST Array die Werte unter dem vorgefundenen Namen, und deswegen überschreibt der zweite den ersten. Das geschieht erst bei der Interpretation innerhalb von PHP.

Es ist eine PHP Konvention, diesen Fall mit dem Feldnamen login[] zu lösen. PHP interpretiert das beim Lesen des POST Content entsprechend und erzeugt ein Array aus Werten. Das ist aber eine reine PHP Sache. Dem Browser ist das komplett wurst, der ist mit einem Form, wo alle Felder den gleichen name haben, total glücklich.

Rolf

--
sumpsi - posui - obstruxi