1113 Stimmen

PHP: Formular mit vielen Checkboxen komfortabel an Skript übergeben

Tipp von Stefan Trost | Letztes Update am 29.12.2022 | Erstellt am 08.01.2013

Jedes mal, wenn wir ein Formular mit einer großen Anzahl von Checkboxen haben, stellt sich die Frage, wie wir diese am besten nach einer Nutzereingabe mit PHP auswerten können. Schließlich kann es sehr umständlich werden, jede Checkbox einzeln anzusprechen, um den Wert der Checkbox auszulesen.

In diesem Tipp möchte ich euch eine Möglichkeit zeigen, wie ihr dieses Problem in den Griff bekommt und schon im Formular die Weichen für eine später einfachere Auswertung stellt.

Der HTML Code

Zunächst möchten wir einen Blick auf den HTML-Code unseres Formulars werfen:

<form method="post" action="script.php">
  <input type="hidden" name="farbform" value="1">
  <label><input type="checkbox" name="farben[]" value="grün"> grün</label>
  <label><input type="checkbox" name="farben[]" value="blau"> blau</label>
  <label><input type="checkbox" name="farben[]" value="rot"> rot</label>
  <label><input type="checkbox" name="farben[]" value="gelb"> gelb</label>
  <label><input type="checkbox" name="farben[]" value="weiß"> weiß</label>
  <input type="submit" name="submitbutton">
</form>

Unser Formular besteht aus einem Submit-Button und beispielhaft aus 5 Checkboxen, mit denen Farbnamen ausgewählt werden können.

Das besondere: Alle Checkboxen haben den gleichen Namen "farben[]". Dies ermöglicht es, dass die Werte aus allen Checkboxen in nur einer einzigen Variable, eben dem Array "farben" an unser PHP-Skript gesendet werden und nicht in vielen einzelnen Variablen, wie es der Fall wäre, wenn wir jeder Checkbox einen anderen Namen geben würden.

Ist keine Checkbox ausgewählt, bleibt der Array bei der Übergabe an unser PHP-Script leer. Deswegen benutzen wir noch ein verstecktes Feld (hier mit dem Namen "farbform" in der zweiten Zeile), das auf jeden Fall mit einem vorhandenen Wert gesendet wird, um zu überprüfen, ob das Formular abgesendet wurde.

Der PHP-Code

Zuletzt brauchen wir nur noch den PHP-Code, um die Daten mit PHP entgegen zu nehmen:

if ($_POST["farbform"]) {
  $farben = $_POST["farben"];
  
  echo '<p>Die folgenden Farben wurden gewählt:</p>';
  echo '<p>';
  foreach ($farben as $value) {
    echo "$value <br>";
  }
  echo '</p>';
}

In der ersten Zeile prüfen wir zunächst, ob das Formular abgesendet wurde (die erkennen wir daran, dass unser verstecktes Feld existiert). Falls ja, geben wir eine Liste der gewählten Farben aus.

Dazu speichern wir den Array aus dem Formular in die Variable $farben und gehen mit foreach einmal durch den gesamten Array durch, so dass wir alle einzelnen Farbwerte mit echo ausgeben können.

Welche Werte wir hier erhalten, bestimmen die Werte, die wir in unserem HTML-Code in das Attribut "value" der jeweiligen ausgewählten Checkbox geschrieben haben. Hier lassen sich natürlich auch Zahlenwerte oder beliebige andere Strings verwenden.

AntwortenPositivNegativDatumStimmen
37 Stimmen

Das kann jeder Anfänger. Wie übergebe ich denn die Werte wenn die Checkbox nicht ausgewählt wurde???
01.04.2014 um 14:39

AntwortenPositiv Negativ
88 Stimmen

Wie meinst du das? Per POST werden ja nur die Checkboxen übertragen, die ausgewählt wurden.

Willst du die, die nicht ausgewählt wurden, ist es einfach das Gegenteil von den Ausgewählten. Also müsste man für diesen Fall nachsehen, ob die entsprechende Checkbox beim POST dabei ist und wenn sie nicht dabei ist, dann ist sie auch nicht ausgewählt.

Also im Beispiel den Array $farben untersuchen ob zum Beispiel "rot" nicht im Array drin ist. Und wenn nicht, ist diese Checkbox eben nicht ausgewählt.
02.04.2014 um 04:30

Positiv Negativ
Antworten
44 Stimmen

Hey, das Thema ist zwar bisschen älter, aber vllt kannst du mir meine Frage noch beantworten.

Gleiches Scriptgrundlage, aber dann folgendes:

Wenn er Farbe 1 wählt, wird er an Seite X weitergeleitet.

Wenn er Farbe 3 wählt, wird er an Seite Y weitergeleitet.

Wenn er Farbe 1 und 3 wählt, wird er an Seite Z weitergeleitet usw.

Kannst du mir da helfen?
26.11.2016 um 11:23

AntwortenPositiv Negativ
66 Stimmen

Was hat das mit dem Alter des Themas zu tun? Ein PHP-Skript hat doch kein Verfallsdatum wie Frischmilch! Natürlich ist das Thema noch aktuell und könnte in diesem Jahr noch genauso veröffentlicht worden sein.

Deine Frage hat allerdings nicht wirklich etwas mit dem Thema hier zu tun. Eröffne bitte ein neues Thema dafür. Dort werde ich dann auch gerne antworten. Dein Thema könnte zum Beispiel sowas wie "HTML Formular: Weiterleitung an Seite abhängig von Checkbox" heißen. In diesem Thema geht es ja um etwas ganz anderes.

Habe es mir anders überlegt. Das Thema ist eigentlich ganz nett für ein Tutorial. Ich werde mir ein paar Gedanken dazu machen, vermutlich bin ich innerhalb der nächsten Wochen damit fertig. Ich werde das Tutorial dann hier verlinken wenn es so weit ist.

Edit: Das Tutorial ist nun fertig, ich habe sowohl ein Beispiel für eine Checkbox-Weiterleitung als auch eine Radiobutton-Weiterleitung beschrieben.
26.11.2016 um 15:28

Positiv Negativ
Antworten
44 Stimmen

Hi, wie löse ich das Problem wenn ich zu einem Array, mehrere, durch Checkboxen ausgewählte Werte zuweisen möchte. Also mehrere Einträge über ein HTML-Formular in ein Feld übergeben möchte:

<input type="checkbox" name="fields[field90802]" value="1"><br>
<input type="checkbox" name="fields[field90802]" value="2"><br>
<input type="checkbox" name="fields[field90802]" value="3"><br>
<input type="checkbox" name="fields[field90802]" value="4"><br>

Hier ist der Code des PHP-Wrappers, funktioniert das überhaupt?

$fields = array ( // Use field_index to get all custom fields.
"fieldFirstName" => "Max",
"fieldLastName" => "Mustermann",
);

Danke für die Hilfe!
24.06.2019 um 08:58

AntwortenPositiv Negativ
44 Stimmen

Du möchtest einen Array mit benannten Feldern zurückbekommen?

In deinem Beispiel hat jedes Feld den gleichen Namen, das kann nicht funktionieren. Jede Checkbox wird mit deinem Code in einem Array "fields" mit dem immer gleichen Index "field90902" gesendet.

Du müsstest entweder fields[] oder fields[field90802][] schreiben oder jeder Checkbox einen sonstigen eindeutigen Namen geben.
24.06.2019 um 11:57

Positiv Negativ
44 Stimmen

Hey, herzlichen Dank für Deine schnelle Antwort.

Genau, bei meinem Beispiel, werden zwar Werte übertragen, es wird jedoch der Wert immer vom letzten Wert überschrieben.

Zu Deinen Vorschlägen:

- fields[]

Ich möchte das die in der Checkbox markierten Werte genau in das Feld: "field90902" zusammengefasst und kommagetrennt übertragen werden, geht das bei dieser Schreibweise?

- fields[field90802][] funktioniert leider nicht und weiß nicht warum.

- Jeder Checkbox einen eindeutigen Namen geben funktioniert in diesem Fall, ich möchte jedoch die Werte alle in einem Feld haben.

Nochmals vielen Dank für Deine tolle Hilfe.
25.06.2019 um 09:30

Positiv Negativ
33 Stimmen

Wenn du die Werte Komma-getrennt haben möchtest, musst du das mit PHP machen. Über das HTML-Formular geht das nicht.

Was funktioniert denn an fields[field90802][] nicht? Du solltest damit einen Array in $_POST['fields']['field90802'] bekommen.

Hast du überhaupt mehrere Checkboxen mit dem Namen "fields"? Ansonsten wäre es vermutlich sinnvoller den Checkboxen den Namen field90902[] zu geben. Dann bekommst du einen Array in $_POST['field90802'] und kannst in PHP mit implode(",", $_POST['field90802']) deine Komma getrennten Werte bekommen.
25.06.2019 um 15:20

Positiv Negativ
Antworten
22 Stimmen

Hey, das funktioniert perfekt.

Aber ich benötige einen Checkbox-Array für eine Liste von Vertragsoptionen, die ein Bewerber als Teil eines Bewerbungsformulars auswählt, das per E-Mail an mich gesendet wird.

Wie kann ich die ausgewählten Werte an meine Mailbox senden?
25.02.2022 um 17:26

AntwortenPositiv Negativ
33 Stimmen

Der einfachste Weg ist, die Werte in einem String zu speichern, anstatt sie auszugeben.

Verwenden Sie also in der Schleife so etwas wie:

$msg += $value;

Danach können Sie die Werte über die PHP-Mail-Funktion per E-Mail senden:

mail('mail@example.com', 'Betreff', $msg);

Mehr brauchst du nicht anzupassen.
25.02.2022 um 21:18

Positiv Negativ
Antworten
Antworten

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.