[TYPO3-german] Checkbox-Wert auslesen
Bernd Wilke
xoonsji02 at sneakemail.com
Wed Sep 27 00:10:57 CEST 2006
On Tue, 26 Sep 2006 14:21:53 +0200, Rainer Griess wrote
with subject "Re: [TYPO3-german] Checkbox-Wert auslesen":
> Hi Micha,
>
> erster Mann (oder Frau) zur Stelle... Bist immer so schnell mit der
> Antwort. Danke. Noch eine Nachfrage...
>
> Michael Feinbier wrote:
> > Hi Rainer,
> >
> > 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.
Bernd
--
----------------
Bernd Wilke
Annweilerstr.20
40229 Düsseldorf
0211/229 2800
More information about the TYPO3-german
mailing list