Hallöle,
ich grüble schon lange über eine elegante Lösung nach, wie ich abgemeldete Checkboxen erkennen kann.
Für eine große Anzahl von Möglichkeiten (ca. 60 aus einer Datenbank) kann sich ein Teilnehmer per Checkbox an- oder abmelden.
Nun gibt es DREI Zustände der Checkboxen, die mit Einträgen in der Datenbank korrespondieren:
- NICHT angemeldet (kann angemeldet werden),
- angemeldet (kann abgemeldet werden),
- Anmeldung bereits gebucht und gegen Änderung gesperrt:
<input type='hidden' name='person_id' value='5054'>
<input type='checkbox' name='chkbox[]' value='123'>
<input type='checkbox' name='chkbox[]' value='456' checked>
<input type='checkbox' name='chkbox[]' value='789' checked disabled>
...
Wenn ich '123' anklicke, hat $HTTP_POST_VARS['chkbox'][0] den Wert '123' und ich kann für Person 5054 einen Satz anlegen.
Wenn aber '456' weggeklickt wurde, ist $HTTP_POST_VARS['chkbox'] leer (auch die gesperrte Checkbox wird nicht gemeldet).
Es gibt also keine Meldung, WAS weggeklickt wurde und welche Sätze ich löschen muss.
Also habe ich ALLE (ausser gesperrte) gelöscht und die angehakten neu angelegt: Quick and dirty.
Eine Lösung mit Sessions scheidet aus, das PHP bei dem Provider (okay, eine alte, aber zuverlässige Domain) kennt schon session_start() nicht. Ein anderer Provider (terions) mit PHP 5 steht zur Verfügung, ist zwar günstig, dafür aber unzuverlässig erreichbar und dann langsam. Das Formular selbst muss also bei Rücksendung die Änderung erkennen lassen.
Versuche z.Z. mit zusätzlichem hidden-Attribut pro Checkbox zu arbeiten:
<input type='hidden' name='chkbox_alt[]' value='123-0'> // AUS
<input type='hidden' name='chkbox_alt[]' value='456-1'> // AN
<input type='hidden' name='chkbox_alt[]' value='789-3'> // GESPERRT
und bekomme dann sowas:
chkbox_alt chkbox
---------- ------
842-0 573 Haken ist geblieben
573-1 876 Neu angemeldet
123-0 579 Haken ist geblieben
876-0
929-0
333-1
579-1
Demnach wäre 333 zu löschen.
Mein Problem ist doch ganz alltäglich. Habe ich vielleicht einen anderen Lösungsansatz übersehen?
Lieben Gruß, Kalle