Marcel: Checkboxen

Beitrag lesen

Hallo,

Wenn sie aber durch ein PHP-Script über $_GET[] oder $_POST[] ausgewertet werden, ist tatsächlich nur noch der letzte Eintrag verfügbar. Warum? Weil die vorhergehenden überschrieben werden.

Das ist der Fall: Es wird über ein PHP Skript verarbeitet. Ist ein Formmailer eines hier verlinkten Services.

Beispiel: Gegeben seien drei aktivierte Checkboxen.

<input type="checkbox" name="auswahl" value="eins">
  <input type="checkbox" name="auswahl" value="zwei">
  <input type="checkbox" name="auswahl" value="drei">

Beim Absenden des zugehörigen Formulars entsteht folgende Reihe von URL-Parametern:

?auswahl=eins&auswahl=zwei&auswahl=drei

Beim Befüllen des $_GET-Arrays geht PHP so vor, als stünden da einzelne Zuweisungen am Scriptanfang:

$_GET['auswahl'] = 'eins';
   $_GET['auswahl'] = 'zwei';
   $_GET['auswahl'] = 'drei';

Es ist offensichtlich, dass die ersten beiden Werte dabei verlorengehen.

Das ist anscheinend das Problem...

Allerdings kann ein Script durchaus auf den ungeparsten Original-Query zugreifen, der mit $_SERVER['QUERY_STRING'] zur Verfügung steht. Dann muss man die Parameter einzeln aufdröseln - das ist meistens unnötig, aber möglich.

Deswegen wird ja auch empfohlen, das name-Attribut mit einer eckigen Klammer als Bestandteil des Namens zu notieren. Dann sieht die PHP-interne Initialisierung nämlich so aus:

$_GET['auswahl'][] = 'eins';
   $_GET['auswahl'][] = 'zwei';
   $_GET['auswahl'][] = 'drei';

Hier wird in $_GET['auswahl'] also wiederum ein Array angelegt, das die Werte 'eins', 'zwei' und 'drei' enthält.

In "reinem" HTML dann so:

<input type="checkbox"  name="irgendwas[1]" value="eins">
<input type="checkbox"  name="irgendwas[2]" value="zwei">
<input type="checkbox"  name="irgendwas[3]" value="drei">

???

Marcel