4 6 Stimmen

PHP: Formular mit vielen Checkboxen komfortabel an Skript übergeben

Tipp von Progger99 | 08.01.2013 um 08:23 Uhr

Jedes mal, wenn wir ein Formular mit einer großen Anzahl von Checkboxen haben, stellt sich die Frage, wie wir diese am besten in PHP auswerten können. Schließlich kann es sehr umständlich werden, jede Checkbox einzeln anzusprechen und 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 die spätere Auswertung stellt.

Der HTML Code

Zunächst werfen wir ein Blick auf den HTML Code unseres Formulars:

<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 eine Submit-Button und 5 Checkboxen, mit denen Farbnamen ausgewählt werden können.

Das besondere: Alle Checkboxen haben den Namen "farben[]". Dies ermöglicht es, dass die Werte aus allen Checkboxen in nur einer Variable, eben dem Array "farben" an das PHP Skript gesendet werden. Ist keine Checkbox ausgewählt, bleibt der Array leer. Deswegen benutzen wir noch ein verstecktes Feld in der zweiten Zeile, das auf jeden Fall 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 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, ob das Formular abgesendet wurde (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 Array durch, so dass wir alle einzelnen Werte ausgeben können.

Welche Werte diese sind, bestimmen die Werte, die wir in "value" in unserem HTML Code geschrieben haben. Hier lassen sich natürlich auch Zahlenwerte oder beliebige andere Wörter verwenden.

AntwortenPositivNegativDatumStimmen
-13 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 Uhr

AntwortenPositiv Negativ

Progger99

Profil anzeigen | Nachricht
Avatar
33 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 gucken 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 Uhr

Positiv Negativ

Filledat

Profil anzeigen | Nachricht
Avatar
00 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 Uhr

AntwortenPositiv Negativ

Progger99

Profil anzeigen | Nachricht
Avatar
22 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 zu 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 Uhr

Positiv Negativ
00 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 Uhr

AntwortenPositiv Negativ

Progger99

Profil anzeigen | Nachricht
Avatar
00 Stimmen

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

In deinem Beispiel hat jedes Feld den gleichen Namen, das kann nicht funktionieren. Jede Checkbox wird in einem Array "fields" mit dem 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 Uhr

Positiv Negativ
00 Stimmen

Hey Progger99, 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 jeoch die Werte in einem Feld haben.

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

Positiv Negativ

Progger99

Profil anzeigen | Nachricht
Avatar
00 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 Uhr

Positiv Negativ
Antworten

Über den Autor

Avatar AutorDer Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen | Nachricht

 

Ähnliche Themen

Wichtiger Hinweis

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.