mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-10-19 18:05:02 +02:00
105 lines
5.2 KiB
Plaintext
105 lines
5.2 KiB
Plaintext
|
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<7A>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<EFBFBD>re es nicht sch<63>n, wenn alle Checkboxenwerte in einer Spalte gespeichert werden
|
|||
|
k<EFBFBD>nnte?
|
|||
|
|
|||
|
Dieses Beispiel zeigt wie es geht.
|
|||
|
Checkboxen k<>nnen nur zwei Zust<73>nde annehmen und sind daher entweder
|
|||
|
aktiviert( TRUE bzw. 1 ) oder deaktiviert( FALSE bzw. 0 ). Dieses Merkmal findet
|
|||
|
man auch in der Bin<69>rdarstellung wieder und kann daher zur Verwendung f<>r diese
|
|||
|
Technik herangezogen werden. Bin<69>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<69>rwert aus und w<>rde bei der Konvertierung
|
|||
|
in eine Dezimalzahl auch ein Ergebnis liefern.
|
|||
|
Um aber die Checkboxen auch in eine bin<69>re Art zu bekommen, ist ein kleiner
|
|||
|
Umstrukturierungsvorgang von N<>ten. Bin<69>rwerte werden grunds<64>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<69>rwert einfach umdrehen und genau das erledigt das Skript von selbst,
|
|||
|
da die Werte bereits von rechts her best<73>ckt werden. In unserem kleinen Beispiel w<>re nun der
|
|||
|
Bin<EFBFBD>rwert 10011. Diesen Bin<69>rwert in eine Dezimalzahl konvertiert, ergibt 19.
|
|||
|
Die Zahl 19 ist jetzt der Wert, der auch in die Datenbank gespeichert wird. Er enth<74>lt alle
|
|||
|
Informationen <20>ber die Aktivierungsart aller Checkboxen, da beim Aufbau der Checkboxen die
|
|||
|
Zahl 19 wieder in ein Bin<69>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
|
|||
|
<EFBFBD>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<EFBFBD>nnen. Zur Erinnerung, nichtaktivierte Checkboxen werden nicht <20>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<68>ufen die Checkboxen von links, w<>hrend die Bin<69>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<69>rwert
|
|||
|
mit der Anordnung 00 auch als Dezimalzahl 0 ergeben w<>rde.
|
|||
|
|
|||
|
2.Durchlauf:
|
|||
|
Checkbox2 ist aktiviert und somit 1.
|
|||
|
Unser Bin<69>rwert wird nun von der rechten Seite her ver<65>ndert.
|
|||
|
Die 2.Stelle des Bin<69>rwertes wird auf 1 gesetzt.
|
|||
|
Der Wert ist nun 10
|
|||
|
|
|||
|
3.Durchlauf:
|
|||
|
Checkbox3 ist aktiviert und somit 1.
|
|||
|
Unser Bin<69>rwert wird nun von der rechten Seite her ver<65>ndert.
|
|||
|
Die 3.Stelle des Bin<69>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<69>rwert wird nun von der rechten Seite her ver<65>ndert.
|
|||
|
Die 6.Stelle des Bin<69>rwertes wird auf 1 gesetzt. Somit erh<72>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<73>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.
|