dedlfix: dynamisches formular mit checkboxen kommt durcheinander

Beitrag lesen

echo $begrüßung;

echo "<input type="checkbox" name="spielt[".$row3["userid"]."]" value="ja">";

Man könnte den String auch in einfache Anführungszeichen einrahmen, dann kann man die Backslashs weglassen (echo 'foo"bar"';) Aber das nur nebenbei.

Ist etwas unübersichtlich und man darf nicht vergessen, das die Feldnamen von HTML keine Assoziativen Arrays sind. Das funktioniert als nicht mit Buchstaben o.ä. als Index.

"name" ist in HTML einfach nur ein Attribut. Bezeichnungen aus einer Programmiersprache (Feldname, Variable, ...) sind dafür unangebracht.

Das name-Attribut darf einen Inhalt vom Typ CDATA enthalten, also (mit geringen Ausnahmen) jedes Zeichen aus dem Zeichensatz des Dokuments. foo[bar] ist ebenso zulässig wie ]foo[

Das wird auch vom Browser so übertragen und kommt so bei PHP so an. (siehe *1)
Was PHP draus macht steht auf einem ganz anderen Blatt.  (siehe *2)

  
<form action="" method="post">  
  <input type="text" name="]foo[" value="bla">  
  <input type="text" name="foo[bar]" value="fasel">  
  <input type="text" name="foo[42]" value="blubb">  
  <input type="submit"/>  
</form>  
<pre>  
<?php  
echo urldecode($HTTP_RAW_POST_DATA); // [link:http://de.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data@title=always_populate_raw_post_data] muss dafür eingeschaltet sein  
echo "\n\n";  
print_r($_POST);  
?>

ergibt:

]foo[=bla&foo[bar]=fasel   *1

Array (
  []foo_] => bla           *2
  [foo] => Array (
      [bar] => fasel
      [42] => blubb
  )
)

Ein name-Attribut der Form foo[bar] wird also von PHP so interpretiert, dass es in $_GET/$_POST ein Element mit dem Schlüssel foo anlegt. Der Wert ist ein Array mit einem Element mit dem Schlüssel bar und dem Wert aus dem übertragenen Wert (Attribut value bzw. die Usereingabe).

Es ist PHP also egal, ob man Zahlen oder Buchstaben innerhalb des []-Teiles eines foo[bar]-ähnlich gestalteten name-Attributes verwendet.

echo "$verabschiedung $name";