Matti Maekitalo: Checkbox-Protokoll onChange

Beitrag lesen

use Mosche;

Dann binde es mit #include virtual="..." ein, dann kannst du auch GET-Parameter übergeben.

Das Problem ist, dass ich gar keine GET-Parameter bekomme, da ich das Logging ja nicht über einen Submit-Button o.ä. anstoßen will, sondern jedesmal, wenn jemand den Checkbox-Wert verändert.
Bindet "#include virtual..." nicht einfach nur den Inhalt der Datei als Text ein?

Du wolltest doch Parameter mit ?bla=blub&bims=bams übergeben. Dies nennt man GET-Parameter. Bei mir funktioniert folgendes:
<!--#include virtual="/inc/shead.shtml?$QUERY_STRING" -->

POST-Parameter kannst du hingegen an eine Datei, die als SSI geparst wird, nicht schicken, da beschwert sich zumindest der Apache.

Aber jetzt habe ich das ganze erst verstanden. Du willst also, wenn jemand den Zustand einer Checkbox verändert, diese Zustandsveränderung an den Server senden.
Einerseits wäre es möglich, einfach das gesamte Formular abschicken zu lassen (also bei onChange="document.forms[0].submit();") und dann dein Perl-Script entsprechend reagieren zu lassen. Allerdings ist das sehr umständlich.
Zweite Möglichkeit wäre es, die Zustandsveränderung erstmal mit Javascript zu sammeln und dann gemeinsam (wenn deine Zustandsveränderungen "abgespeichert"/verarbeitet werden) als schon vorbeireitete Log-Meldung an den Server mitgesendet werden. Sicherlich am einfachsten zu realisieren.

Nächste Möglichkeit lehnt sich an die erste an:
Du musst jedesmal, wenn eine Zustandveränderung eintritt, vom Server eine Ressource laden. Üblicherweise wird dazu einfach ein kleines Bild genommen (meist ein 1x1-Transparant-GIF), welches von einem Perl-Script ausgegeben wird. Dieses schreibt auch die Log-Meldung, und du kannst die entsprechenden Daten, die du in dein Log schreiben willst, als GET-Parameter an das Bild hängen. Du musst dann als onChange-Event einfach nur angeben, dass ein entsprechendes Bild neu geladen wird.

Das ganze ist allerdings alles ziemlich umständlich, da je keine dauerhafte Kommunikation zwischen Browser und Server besteht, und sind daher alles nur Krücken. Was passiert, wenn jemand JS deaktiviert?

use Tschoe qw(Matti);

--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.