Wie speichert man z.B. 32 Checkboxen in einer Datenbank?
Diese Frage stellt sich sehr oft bei der Programmierung und sicherlich gibt es da 
verschiedene Ansatzmglichkeiten. So knnte die Tabelle, in der die Werte fr die 
Checkboxen ( 1 oder 0, bzw. TRUE oder FALSE ) gespeichert werden, in 32 Spalten
aufgeteilt werden. Dieses Technik ist aber eher die schlechteste Wahl, da die Tabelle
sehr schnell zu einem Giganten anwachsen wrde.
Wre es nicht schn, wenn alle Checkboxenwerte in einer Spalte gespeichert werden
knnte?

Dieses Beispiel zeigt wie es geht.
Checkboxen knnen nur zwei Zustnde annehmen und sind daher entweder 
aktiviert( TRUE bzw. 1 ) oder deaktiviert( FALSE bzw. 0 ). Dieses Merkmal findet
man auch in der Binrdarstellung wieder und kann daher zur Verwendung fr diese
Technik herangezogen werden. Binrwerte werden nur durch die zwei Zahlen 1 und 0
dargestellt. 
Hat man z.B. 5 Checkboxen, von denen die erste, die zweite und die fnfte Checkbox 
aktiviert ist, so kann man dies auch mit folgender Schreibweise darstellen - 11001.
Diese Darstellung sieht genau wie ein Binrwert aus und wrde bei der Konvertierung
in eine Dezimalzahl auch ein Ergebnis liefern.
Um aber die Checkboxen auch in eine binre Art zu bekommen, ist ein kleiner 
Umstrukturierungsvorgang von Nten. Binrwerte werden grundstzlich von rechts her
aufgebaut (was auch Sinn macht, da man fr 0000000000001 auch direkt 1 schreiben knnte),
die Checkboxen aber von links bzw. von oben.
Daher muss man den Binrwert einfach umdrehen und genau das erledigt das Skript von selbst,
da die Werte bereits von rechts her bestckt werden. In unserem kleinen Beispiel wre nun der
Binrwert 10011. Diesen Binrwert in eine Dezimalzahl konvertiert, ergibt 19.
Die Zahl 19 ist jetzt der Wert, der auch in die Datenbank gespeichert wird. Er enthlt alle
Informationen ber die Aktivierungsart aller Checkboxen, da beim Aufbau der Checkboxen die
Zahl 19 wieder in ein Binrwert konvertiert wird ( 10011 ).

Allerdings mssen im Vorfeld die Checkboxen ein wenig angepasst werden.

1.) Die Checkboxen erhalten alle den gleichen Namen und werden somit als Array
bermittelt. In unserem Fall heissen die Checkboxen alle checkbox_name[] (wichtig
sind hier die eckigen Klammern, da nur so ein Array aufgebaut wird).
Somit kann man hier auch von einer Gruppe sprechen.

2.) Alle Checkboxen werden im Value-Wert durchnummeriert (1- max.32). Dieses ist
ein wichtiger Punkt, da nur so die richtigen Checkboxen aktiviert oder deaktiviert werden
knnen. Zur Erinnerung, nichtaktivierte Checkboxen werden nicht bermittelt. Auch wenn
Sie 32 Checkboxen haben und nur 16 aktivieren, so erhalten wir beim Absenden auch nur
ein Array mit 16 Elementen. Da wir aber als Value-Wert die "Position" gespeichert haben, 
ist es ein leichtes die ntigen Felder zu initialisieren.

3.) Die Spalte fr die Speicherung des Wertes in der Datenbank muss auf Integer
eingestellt werden.



Beispiel:
Bei der Initialisierung unserer Variablen, setzen wir den Startwert auf 0. Wird nun das
untenstehende Beispiel abgeschickt, so passiert folgendes. Bitte beachten Sie aber,
das bei den Durchlufen die Checkboxen von links, whrend die Binrwerte von rechts 
gelesen werden.

 ----------------------------------------------------------------------------------------------
|     0        |      1        |      1        |      0        |      0        |       1       |
|----------------------------------------------------------------------------------------------
|Checkbox1 - - | Checkbox2 -X- | Checkbox3 -X- | Checkbox4 - - | Checkbox5 - - | Checkbox6 -X- |
 ----------------------------------------------------------------------------------------------


1.Durchlauf: 
Checkbox1 ist deaktiviert und somit 0.
In diesem Fall bleibt unser Wert bei 0, da der Startwert ja schon 0 war und ein Binrwert
mit der Anordnung 00 auch als Dezimalzahl 0 ergeben wrde.

2.Durchlauf: 
Checkbox2 ist aktiviert und somit 1.
Unser Binrwert wird nun von der rechten Seite her verndert.
Die 2.Stelle des Binrwertes wird auf 1 gesetzt.
Der Wert ist nun 10

3.Durchlauf: 
Checkbox3 ist aktiviert und somit 1.
Unser Binrwert wird nun von der rechten Seite her verndert.
Die 3.Stelle des Binrwertes wird auf 1 gesetzt.
Der Wert ist nun 110

4.Durchlauf: 
Checkbox4 ist deaktiviert und somit 0.
In diesem Fall bleibt unser Wert bei 110. 

5.Durchlauf: 
Checkbox5 ist deaktiviert und somit 0.
In diesem Fall bleibt unser Wert bei 110. 

6.Durchlauf: 
Checkbox6 ist aktiviert und somit 1.
Unser Binrwert wird nun von der rechten Seite her verndert.
Die 6.Stelle des Binrwertes wird auf 1 gesetzt. Somit erhlt
auch nun die 4. und 5.Stelle Ihren Wert, jeweils die 0.
Der Wert ist nun 100110

Den Wert 100110 lassen wir uns nun mit der Funktion bindec() als Dezimalzahl ausgeben 
und erhalten als Ergebnis die Zahl 38. Diese Zahl speichern wir nun in unsere Tabelle ab. 
Das war es schon! 
Wir haben nun eine schlanke Lsung fr ein grosses Problem. In Zukunft
wird unser Skript nur noch mit der einzelnen dezimalen Zahl arbeiten um die Checkboxen
zu bestcken.

Achtung!
Einen kleinen Haken gibt es aber. Wir knnen mit dieser Methode nur max. 32 Checkboxen
verwalten, da wir bei dieser Zahl an die Grenze eines Integer-Wert gehen.
Gruppen knnen aber in rauhen Mengen erstellt werden.