20 Checkboxen in separate DB-Tabellenfelder schreiben

Admi

Erfahrenes Mitglied
Ich habe ein sehr umfangreiches Formular geschrieben (so um die 400 Zeilen Quelltext).
Darin gibt es ca 20 Checkboxen, die für jeweils ein bestimmtes Recht (für ein anderes System) stehen. Die anderen Inputs (text, password, auswahlliste funktionieren und werden in die Datenbanktabelle eingetragen. Das Problem ergibt sich dann bei den Checkboxen.

Diese enthalten im value-Attribut den Wert "1". Nach Bestätigung des Formulares werden die Werte via POST an ein Verarbeitungsskript weitergegeben, welches dann die Werte in die Tabelle schreiben soll. 1 für eine aktivierte Checkbox und 0 für eine nicht aktivierte Checkbox. Gibt es eine schlanke Lösung, die Checkboxen auf Aktivität zu prüfen und jeden einzelnen Wert in seine eigene Spalte in der Tabelle einzutragen?

Bilder und Code kann ich derzeit leider nicht posten, da die Sache noch auf meinem Laptop auf Arbeit ist.

Tabelle etwa so im Ausschnitt: (tinyint-Feld mit 2 Möglichkeiten (1,0)
.....+ AAA + BBB + CCC + DDD + EEE .....
.....+ 1 + 0 + 0 + 1 + 0 .....
................................................................

Die Checkboxen würden über eine foreach-Schleife abgefragt. Allerdings will ich keine 23 foreachschleifen (inkl 3 Auswahllisten) ins Abfrageskript packen. Da muss es doch eine bessere Variante geben.

Ich hoffe mal, dass ganze ist so ungefähr verständlich beschrieben. Ansonsten würde ich auf Arbeit mal ein paar Bildausschnitte des ganzen und den derzeitigen Code hier reinstellen.

Danke im Voraus für jeden hilfreichen Tipp.
 
Viel wichtiger als der Wert der Checkboxen wäre zu wissen, wie ihr Name ist.

Mal angenommen, der Name wäre bspw. ebenfalls AAA, BBB, CCC usw., dann könntest du sie eindeutig identifizieren, abfragen ob sie übermittelt wurden, und dementsprechend den Wert setzen, ca. so

Code:
"UPDATE tabelle SET  
                         AAA=" . (isset($_POST['AAA']) ? 1 : 0)
                      .",BBB=" . (isset($_POST['BBB']) ? 1 : 0)
                      .",CCC=" . (isset($_POST['CCC']) ? 1 : 0)
                      .",DDD=" . (isset($_POST['DDD']) ? 1 : 0) //uswusf.
 
Der Name ist bisher einheitlich "rechte[]".
So dass er sie als Array annimmt. Aber wenns auch so geht, dann probier ich das mal so aus und geb je nach Ergebnis hier nochmal nen Laut :-)

So nebenbei. Die Datensätze werden neu erzeugt. Daher nutze ich die INSERT-Syntax. Kann man das so wie in deinem Beispiel auch über Update machen. Die Tabelle enthält ja nicht überall einen Default-Wert. Lediglich den Checkboxen habe ich den Default ' 0 ' zugewiesen.
 
Jo, klar kannst du das auch mit INSERT so machen.
Der default-Wert ist ja mehr oder weniger egal, da ja für jede Checkbox ein Wert eingetragen wird.
 
Dickes fettes THX :D
Habs hinbekommen mit den Conditionals. Der Denkanstoß hat mir noch gefehlt.

Habs im INSERT-VALUE mit:

PHP:
'".(isset($_POST['AAA']) ? 1: 0)."'
usw....

hinbekommen. Klappt einwandfrei. Da kann ich nu auch Feierabend machen :)
 
hi,
ich halte das ja für sehr unflexibel. Übergib doch einfach den Namen der Spalte als Value-Wert der checkbox. So kannst du das Formular sowohl dynamisch erzeugen als auch auswerten.
MfG
Flooo
 
Zurück