Oliver Kurlvink: Check-Boxen werden immer mit dem checkt-value abgeschickt, auch wenn die box ancheckt ist...

hi :)

Das hier ist ein klein wenig strange... normalerweise gibt man einer Checkbox einen value und wenn man die box checkt, dann hat das Element diesen value, ist die uncheckt, ist value null (wird jedenfalls nach dem Abschicken von PHP als gefüllte oder leere Variable ausgelesen). Nun habe ich hier ein dickes Dokument, dessen erste 800 Zeilen alleine nur aus Funktionen bestehen, die die Eingaben überprüfen und bei jeder Kleinigkeit meckern.
Bei den Check-Boxen ist es so gelöst: Ist eine Checkbox aktiviert, so ist das Feld nebenan editierbar und es wird 8000 eingetragen. Ist eine Checkbox deaktiviert, so ist das Feld nebenan nicht editierbar und die 8000 wird wieder entfernt.

Wenn ich das ganze abschicke passiert folgendes:
Check Box unchecked: Wert der gecheckten Box (eheschliessung) landet in der Datenbank, 8000 wird nicht eingetragen.
Checkbox gecheckt: Wert der gecheckten Box landet in der Datenbank, 8000 wird eingetragen.

HTML der Checkbox sieht so aus:

<TR>
    <TD WIDTH="47" BGCOLOR="#cccccc" HEIGHT="10">
      <INPUT TYPE="checkbox" NAME="eFlitter" VALUE="Eheschliessung" onClick="fFlitter()"></TD>
    <TD WIDTH="732" BGCOLOR="#cccccc" HEIGHT="10">
    wenn kein Ehepartner älter als 40 Jahre ist und das Jahr
    der Eheschließung nicht länger als 5 Jahre zurückliegt</TD>
    <TD WIDTH="120" HEIGHT="10" BGCOLOR="#cccccc" ALIGN="RIGHT">
    <INPUT TYPE="text" SIZE="7" MAXLENGTH="7" NAME="eFlitterBetrag"
    onfocus="this.select()" onchange="fPruefziffer(this.form,this.name)"> DM  </TD>
  </TR>

fFlitter sieht so aus:

function fFlitter() {
if (document.Bestand1.eFlitter.checked) {
document.Bestand1.eFlitterBetrag.value = vFlitter;
} else {
document.Bestand1.eFlitterBetrag.value = "";
}
}

Javascript und HTML kommen nicht von mir :)

So wie ich es sehe passiert folgendes:

  • Dokument wird geladen
  • Value eheschliessung bleibt und wird gespeichert
  • ich checke das Ding
  • value wird auf vFlitter gesetzt
  • Dennoch speichert er als value eheschliessung
  • ich unchecke das Ding
  • value wird auf "" gesetzt
  • Dennoch speichert er als value eheschliessung in der DB ab...

Irgendwie wäre es für mich nur logisch, wenn er beim ersten öffnen des Dokumentes, wenn das Javascript noch nicht angesprungen ist, als value für die uncheckte Box eheschliessung rausschickt und sonst entweder den Wert vFlitter oder eben nix...

Hier nochmal wie das Speichern funktioniert:
Es werden zwei Frames aufgebaut. Im oberen ist das Formular, im unteren ebenfalls ein Formular mit den gleichen Elementen (hidden Fields allerdings). Klickt einer auf Speichern, werden mit diesem Javascript

function blubb() {

number = top.form.document.Bestand1.elements.length;  
var i = 0;  
while(i < number) {  

if (top.form.document.Bestand1.elements[i].type != "button" && top.form.document.Bestand1.elements[i].name != "beratungsnummer") {
   name=top.form.document.Bestand1.elements[i].name;
   eval("top.form.document.Bestand1."+name+".value = top.php3.document.hiddenform."+name+".value;");
  }
  i++;
}  
top.php3.document.hiddenform.beratungsnummer.value = top.form.document.Bestand1.beratungsnummer.value;
top.php3.document.hiddenform.submit();
}

die Sachen von oben unten eingefügt, das untere formular wird abgeschickt und lädt ein PHP-Skript, welches die Datenbank mit den Werten füllt.

Ich bin am Ende von meinem Latein und Javascript ist eh nicht sonderlich mein Fall :).

  1. aH... hab die Lösung :). Er übergibt zum Speichern ja den Value und der bleibt immer gleich, ob das ding nun gecheckt ist oder nicht. Ich darf also bei checkboxen nicht den value übergeben, sondern den Status :).