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 Ansatzmöglichkeiten. So könnte die Tabelle, in der die Werte für 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 würde. Wäre es nicht schön, wenn alle Checkboxenwerte in einer Spalte gespeichert werden könnte? Dieses Beispiel zeigt wie es geht. Checkboxen können nur zwei Zustände annehmen und sind daher entweder aktiviert( TRUE bzw. 1 ) oder deaktiviert( FALSE bzw. 0 ). Dieses Merkmal findet man auch in der Binärdarstellung wieder und kann daher zur Verwendung für diese Technik herangezogen werden. Binärwerte werden nur durch die zwei Zahlen 1 und 0 dargestellt. Hat man z.B. 5 Checkboxen, von denen die erste, die zweite und die fünfte Checkbox aktiviert ist, so kann man dies auch mit folgender Schreibweise darstellen - 11001. Diese Darstellung sieht genau wie ein Binärwert aus und würde bei der Konvertierung in eine Dezimalzahl auch ein Ergebnis liefern. Um aber die Checkboxen auch in eine binäre Art zu bekommen, ist ein kleiner Umstrukturierungsvorgang von Nöten. Binärwerte werden grundsätzlich von rechts her aufgebaut (was auch Sinn macht, da man für 0000000000001 auch direkt 1 schreiben könnte), die Checkboxen aber von links bzw. von oben. Daher muss man den Binärwert einfach umdrehen und genau das erledigt das Skript von selbst, da die Werte bereits von rechts her bestückt werden. In unserem kleinen Beispiel wäre nun der Binärwert 10011. Diesen Binärwert in eine Dezimalzahl konvertiert, ergibt 19. Die Zahl 19 ist jetzt der Wert, der auch in die Datenbank gespeichert wird. Er enthält alle Informationen über die Aktivierungsart aller Checkboxen, da beim Aufbau der Checkboxen die Zahl 19 wieder in ein Binärwert konvertiert wird ( 10011 ). Allerdings müssen 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 können. 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 nötigen Felder zu initialisieren. 3.) Die Spalte für 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 Durchläufen die Checkboxen von links, während die Binärwerte 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 Binärwert mit der Anordnung 00 auch als Dezimalzahl 0 ergeben würde. 2.Durchlauf: Checkbox2 ist aktiviert und somit 1. Unser Binärwert wird nun von der rechten Seite her verändert. Die 2.Stelle des Binärwertes wird auf 1 gesetzt. Der Wert ist nun 10 3.Durchlauf: Checkbox3 ist aktiviert und somit 1. Unser Binärwert wird nun von der rechten Seite her verändert. Die 3.Stelle des Binärwertes 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 Binärwert wird nun von der rechten Seite her verändert. Die 6.Stelle des Binärwertes wird auf 1 gesetzt. Somit erhält 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 Lösung für ein grosses Problem. In Zukunft wird unser Skript nur noch mit der einzelnen dezimalen Zahl arbeiten um die Checkboxen zu bestücken. Achtung! Einen kleinen Haken gibt es aber. Wir können mit dieser Methode nur max. 32 Checkboxen verwalten, da wir bei dieser Zahl an die Grenze eines Integer-Wert gehen. Gruppen können aber in rauhen Mengen erstellt werden.