[TYPO3-german] Checkbox-Wert auslesen

Rainer Griess mynewnews at gmx.net
Thu Sep 28 10:26:58 CEST 2006


Bernd Wilke wrote:
> On Tue, 26 Sep 2006 14:21:53 +0200, Rainer Griess wrote
>>> Rainer Griess schrieb:
>>>> Wenn die Checkbox blau nun im Backend gewählt wurde, wird in der 
>>>> Datenbank im Feld farbe der Wert "1" gespeichert. Bei Auslesen im 
>>>> Frontend per sL() wird dann auch "blau" angegeben.
>>>>
>>>> Wenn ich nun aber z.B. *zwei* Checkboxen anklicke, enthält das Feld 
>>>> farbe den Wert '3'. Sind alle angeklickt enthält das Feld den Wert "7".
>>>>
>>> In der Datenbank werden die Werte der Checkboxen als Dualzahlen 
>>> ausgewertet und dann in Dezimalzahlen ausgewertet.
>>>
>>> Wenn ich nur die erste Checkbox ausgewählt habe ist die Dual
>>>
>>> 001 -> ergibt dezimal 1
>>>
>>> Wähle ich die ersten zwei aus
>>>
>>> 011 -> ergibt dezimal 3
>>>
>>> Alle drei:
>>>
>>> 111 -> dezimal 7
>>>
>>> So erhälst du für jede "Checkboxkombination" eine eindeutige Dezimalzahl.
>>>
>>>> Wie kann ich alle angeklickten Werte im Frontend ausgeben?
>>>>
>>> Du musst wahrscheinlich die dezimalzahl wieder in die dualzahl umwandeln 
>>> und dann entsprechend die 1en und 0en auswerten.
>>> Möglich, dass es dazu eine fertige Funktion in der API gibt, weiß ich 
>>> aber nich genau. Zur not eben mit den PHP Funktionen arbeiten.
>> Auch wenn du nicht weißt, wie das am elegantesten zu lösen ist. Für die 
>> Nachwelt möchte ich hiermit verkünden, dass ich an einem Hinweis dazu 
>> sehr interessiert wäre. Ich schätze nicht, dass das, was ich vorhabe, so 
>> unüblich ist, dass ich da selbst eine Funktion schreiben muss. Da gibt 
>> es doch sicher was.
>>
>> Oder wie macht ihr anderen das?
> 
> 
> for ($i=0; $i<$anzoptions; $i++) {
> 	if (($dbfeld >> $i) & 1) {
> 		$content.=$farbe[$i].' ist gewählt.<br />';
> 	}
> }
> 
> die entscheidenden Operatoren zum Nachlesen:
> 	>>  schiebe Wert bitweise um ... Stellen nach rechts
> 	&   bitweises und
> 
> schiebe die zahl bitweis enach rechts und dann betrachte nur das letzte Bit
> 
> eine Alternative, die evtl. verständlicher ist:
> 	if (($dbfeld & (1<<$i)) {
> bzw. genaugenommen:
> 	if ((($dbfeld & (1<<$i))!=0) {
> 
> hier:
> 	<< schiebe nach links
> 
> schiebe ein Bit (1) nach links und überprüfe ob dieses Bit in der zu
> überprüfenden Zahl gesetzt ist.

Hey Bernd,

danke. Hast mir sehr geholfen. Irgendwo muss es so etwas ja auch fertig 
schon in der API geben. Aber ich kann es nicht finden, drum habe ich mir 
nun eine Lösung nach deinem Beispiel gebastelt.

Danke && Gruß
rainer



More information about the TYPO3-german mailing list