Antworten auf deine Fragen:
Neues Thema erstellen

Checkboxen in einer Datenbank speichern und wieder auslesen.

Isometric

Powerproster

Hallo zusammen,

ich grüble momentan gerade darüber, wie man am einfachsten Checkboxen in einer Datenbank speichert und wieder ausliest.

Diese Methode habe ich inzwischen gefunden: Komfortable Checkboxen-Verwaltung mittels Binärwerte


Textauszug aus dem Link:
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?
Eine Tabelle mit einer Spalte für jede Checkbox hätte aber den Vorteil, dass sich Abfragen recht einfach gestalten lassen.

Bei der Methode alle Checkboxen in einer Spalte zu speichern stellt sich mir die Frage, wie muss man eine Abfrage gestalten, mit der sich alle Datensätze filtern lassen will, bei denen z.B. Checkbox 1 aktiviert ist.
 
Zuletzt bearbeitet:

DrEddison

Nicht mehr ganz neu hier

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Das funktioniert über bitweises verschieben. Schau mal unter Wiki nach. Da ist das ganz gut beschrieben. Bei Fragen: melden. :)
 

DrEddison

Nicht mehr ganz neu hier

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

CHECKBOX[ARRAY] | GECHECKT O/X | WERTIGKEIT | "SCHALTER"
Checkbox[1] | O | 1 | 0
Checkbox[2] | X | 2 | 1
Checkbox[3] | O | 4 | 0
Checkbox[4] | X | 8 | 1
Checkbox[5] | O | 16 | 0
Array Counter der Checkbox ist der Stellenwert der Binärzahl
Ergibt 01010 Binär -> ergibt unter php per bindec() "10" als in dezimal. Die "10" wird gespeichert. Beim Auslesen halt alles wieder rückwärts.
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Es kommt sehr auf deinen Anwendungsfall an und was du mit den Daten machen willst. Ist es immer das gleiche Formular oder gibt es mehrere mit verschiedenen Formaten? Muss es irgendwann erweitert werden oder gibt es eine Obergrenze an Checkboxen pro Ding?

Je nachdem gibt es zwei einfache Möglichkeiten. Die erste wurde schon genannt: eine Spalte mit einem Wert, der bitweise die einzelnen Checkboxen darstellt. Die zweite ist das Umsetzen der n:m-Relation (ein Formular hat mehrere Checkboxen, eine Checkbox kann mehreren Formularen zugewiesen werden) über eine Zwischentabelle. Letzteres ist einfacher zu erweitern als ersteres, aber im Ansatz etwas schwieriger zu implementieren.


Duddle
 

DrEddison

Nicht mehr ganz neu hier

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

@Duddle, warum meinst Du, dass Dein zweiter Vorschlag einfacher zu erweitern ist? Bei meinem ist das doch (wohl sogar noch)simple(r) zu realisieren. Einfach über Schleifen. Und ob ich nun

für 5 Checkboxen
bindec(10101) -> 21

oder

für 18 Checkboxen
bindec(101010111011101111) -> 175855

in das DB-Feld speicher dürfte egal sein. Über decbin() komme ich wieder an den Binärwert und kann so die Schalterstellung erneut abbilden.

Oder übersehe ich etwas?
 

Isometric

Powerproster

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Erst mal Danke für die Antworten :)

im Moment ist die Anzahl der Checkboxen noch nicht ganz klar,
wahrscheinlich werden es zwei Datenbereiche mit jeweils 8-10 Checkboxen.

Ich würde gerne die Variante mit der "binären" Methode probieren.

ich versuche im Moment folgendes:
PHP:
    $wertAbfrage = 4;
    $inhaltreturn = auswertung($wertAbfrage);
PHP:
function auswertung($uebergabe) {
    $checkboxen = 3;
    $wertAbfrage = $uebergabe;
    // Ueberpruefung ob ein Wert vorhanden ist
    if( !empty($wertAbfrage) )
        $bitmask = $wertAbfrage;
    else
        $bitmask = 0x0;
        
    // Durchlaeuft schrittweise alle Elemente von $bitmask.
    foreach(range(1,$checkboxen) as $position){
        
         if(isBit($bitmask,$position)) {
            $formCheck[$position] = "checked";
        }
    }
    return array ($formCheck);
}
Wenn ich jetzt den Inhalt des Array versuche auszugeben, dann erhalte ich nur das Wort "Array"
PHP:
    echo "Inhalt Checkbox: ".$inhaltreturn[0]."<br>";
 

Robbyn-

PHP / Flex Programmierer

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Weil dein $inhaltreturn[0] auch nochmal ein Array enthällt, versuche mal dein $inhaltreturn aufzuschlüssen. Das kannst du ganz einfach mit print_r($inhaltreturn) machen, dann siehst du die Verschachtellung deines Arrays und weißt wie du darauf zugreifen kannst.
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

@Duddle, warum meinst Du, dass Dein zweiter Vorschlag einfacher zu erweitern ist? Bei meinem ist das doch (wohl sogar noch)simple(r) zu realisieren. Einfach über Schleifen. Und ob ich nun

für 5 Checkboxen
bindec(10101) -> 21

oder

für 18 Checkboxen
bindec(101010111011101111) -> 175855

in das DB-Feld speicher dürfte egal sein. Über decbin() komme ich wieder an den Binärwert und kann so die Schalterstellung erneut abbilden.

Oder übersehe ich etwas?

http://catb.org/jargon/html/Z/Zero-One-Infinity-Rule.html

Was, wenn du 100 Checkboxen pro Formular brauchst? Kann dein Datenbanksystem problemlos und effizient 2^100 speichern? Was ist mit 2^2000? 2000 Datensätze pro Eintrag sind kein Problem. Ja, es ist nicht realistisch dass ein normales Formular 2000 Checkboxen hat, aber genau deshalb hatte ich nach dem Anwendungsfall gefragt.


Duddle
 

DrEddison

Nicht mehr ganz neu hier

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Duddle, Du hast natürlich recht. In solch einem Fall, sollte eine andere Lösung bevorzugt werden. Es gibt halt, wie Du schon sagst, für jedes "Problem" einen anderen Lösungsansatz. Oft überschneiden diese sich und man muss selbst entscheiden, welches für einen die beste Lösung ist.
 

Isometric

Powerproster

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

@alle: vielen Dank für eure Hilfe

erste Tests mit dem Ein- und Auslesen der "binären" Abspeicherung klappen schon mal.
Auch wie das Zugreifen auf das Rückgabearray funktioniert habe ich dank dem Tipp von Robbyn- jetzt verstanden.

Sobald ich wieder fest hänge melde ich mich wieder.

Vielleicht mal eine Frage vorab zu diesem Beitrag aus einem anderen Forum:
ich hab einen sack voll checkboxen wo ich ein array erzeuge und nun alle werte in einem array stehen hab. wie schreibe ich nun den inhalt des array in die datenbank?
Wäre das auch eine Möglichkeit des Abspeicherns von Inhaltes von mehrerern Checkboxen?
Dann spart man sich den Umweg der binären Codierung und Decodierung, die mir noch etwas mystisch erscheint.
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkboxen in einer Datenbank speichern und wieder auslesen.

Im Endeffekt musst du jede Lösung implementieren. Wenn du sehr gut mit Arrays zurechtkommst, kannst du die natürlich auch serialisiert in die DB schreiben.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben