Servus Markus,
McHubi hat geschrieben:Auch ein leerer Wert ist eine Information.
Ja, aber... nur dann, wenn der Wert auch übertragen wird, was im vorliegenden Fall nicht der Fall ist. Wenn Du einmal das übergebende $_POST-Array anschaust, so wirst Du feststellen, das dieses leer ist. Es wird also kein "leerer Wert" sondern, in deinem Sprachgebrauch zu bleiben, gar kein Wert übergeben.
McHubi hat geschrieben:Das ein hidden field erforderlich ist - was im übrigen auch keinerlei Inhalt aufweist - ist so wie "draußen nur Kännchen".
Da stimme ich Dir vollumfänglich zu, aber - und auch hier habe ich ein aber - besteht hier einfach der Unterschied, das bei einem hidden field, im Gegensatz zu einer nicht gewählten Checkbox, zumindest ein "leerer Wert" übergeben wird. Das beweist auch hier der Blick ins übergebene $_Post-Array.
Faar hat geschrieben:Das heißt, dass hier laut Ortwin bei einer einzelnen Checkbox erst gar kein $_POST['check'] ankommen dürfte
Und das ist genau so!
https://www.w3.org/TR/REC-html40/intera ... #h-17.13.2
Faar hat geschrieben:Da wir aber Contenido Platzhalter haben, checken wir diese Platzhalter.
Ähm... nein, checken wir nicht. In der entsprechenden Verarbeitung von Contenido wird ausschließlich auf vorhandene Contenido-Platzhalter im $_POST-Array geprüft. Nur wenn mindestens ein solcher Platzhalter erkannt wird, wird die Verarbeitung angestoßen. Diese macht im vorliegenden Fall aber nur äußerlich das was sie machen soll. Denn eigentlich wird in Fall 2 von Markus das leere HIDDEN-Feld erkennt, da es im $_POST-Array steht, dadurch alle Einträge für die Variablen (Platzhalter) dieses Modul-Inputs in der Datenbank gelöscht und dann NUR der Wert des leeren HIDDEN-Feldes wieder in die Datenbank geschrieben.
Dadurch sieht es nach Außen dann so aus, als wenn die Checkbox den Status zu False geswitcht hat, was aber eigentlich nicht stimmt, ein entsprechender Eintrag in der DB ist einfach nicht mehr vorhanden und damit die Checkbox leer.
Lösungsmöglichkeit(en): Man könnte generell hingehen und bei der Übergabe eines leeren $_POST-Array für ein Modul alle Einträge der Variablen (Platzhalter) in der DB löschen, wobei ich keine Ahnung habe welche "Nebenwirkungen" das haben könnte. Denn man muss sicherlich beachten, das die Konfiguration ja an verschiedenen Stellen möglich ist. Sowohl in der Template- als auch in der Artikel-Konfiguration kann ein Modul konfiguriert werden. Darauf muss man bei der Verarbeitung achten. Ob es noch weitere Stolperfallen gibt kann ich in der Kürze der Zeit jetzt nicht sagen, dazu sollte man einen entsprechenden Umbau genau testen.
Eine 2. Möglichkeit wäre eine Prüfung des Modul-Inputs selbst auf entsprechende Variablen (Platzhalter) und einen entsprechenden Quervergleich dann bei der Verarbeitung des $_POST-Array. Hierbei sollte man gegebenenfalls auch die Feldtypen (input, checkbox, etc.) passend zu den Variablen mit prüfen.
Es ist also grundsätzlich möglich diesen "Bug" zu fixen, bedarf aber etwas mehr an Aufwand wie Frank es mit seinen Schleifen darstellt.
Gruß aus Franken
Ortwin