[4.9.12] Fehler, Checkbox in Modul-Eingabe

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

[4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von McHubi » Fr 24. Feb 2017, 20:34

Wer die Modul-Eingabe nutzt um über den Artikel-Reiter "Konfiguration" sein Modul für den entsprechenden Artikel zu konfigurieren, erlebt sein blaues Wunder wenn lediglich eine einzelne Checkbox verwendet wird. Also zum Beispiel dann, wenn einfach nur ein

[ ] blende Inhalt aus

per

Code: Alles auswählen

echo '<input type="checkbox" name="CMS_VAR[3]" value="true"';
if ("CMS_VALUE[3]" == "true") echo ' checked="checked"';
echo '/>  blende Inhalt aus';
umgesetzt wird.

Was passiert ist, dass die einmal gesetzte Checkbox nie wieder herausgenommen werden kann. Sie bleibt aktiviert, komme was wolle. Sie funktioniert nur dann, wenn ein weiteres input-Feld dazu kommt. Also wenn die Modul-Eingabe in dem Fall so aussieht:

Code: Alles auswählen

echo '<input type="checkbox" name="CMS_VAR[3]" value="true"';
if ("CMS_VALUE[3]" == "true") echo ' checked="checked"';
echo '/>  blende Inhalt aus';
echo '<input type="hidden" name="CMS_VAR[0]">';
"Interessant" ist, dass dieser Fehler wohl schon seit der 4.4 :!: existiert:
http://forum.contenido.org/viewtopic.ph ... x&start=15
http://forum.contenido.org/viewtopic.ph ... 7&start=13
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Faar » Sa 25. Feb 2017, 11:44

Hast Du mal geschaut, was in diesem Fall bei "CMS_VALUE[3]" drin steht?
Praktisch müsste dann ja immer das Wörtchen true drin stehen?

Ich habe das in meinen Codes etwas anders gelöst:

Code: Alles auswählen

if ("CMS_VALUE[3]") $checked="checked";
Aber das sollte eigentlich auf das gleiche herauskommen, zumal mir jetzt kein eigenes Modul bekannt ist, das nur eine einzige Checkbox hat uns sonst nichts.
Mindestens ein Input davor oder danach ist immer dabei.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von McHubi » Sa 25. Feb 2017, 17:12

Richtig, es steht immer "true" drin. Ich hab auch schon alle möglichen Varianten durch - auch Deine. Immer der gleiche Fehler. Und es gibt durchaus Konfis nur mit einer Checkbox, gerade wenn die Modulausgabe komplett mal temporär on- oder offline sein soll. Insofern schon blöd wenn man erst sucht wie'n Hirni warum dieser simple Zweizeiler einfach nicht funktioniert. Nuja, der workaround mit dem hidden field klappt ja. Aber da erst mal drauf kommen...

Ein echter "vintage-bug"! :lol:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Oldperl » Mo 27. Feb 2017, 13:31

Moin :)

*Hust* - das ist in dem Sinne kein Bug, sondern erst einmal ein normales Verhalten des Formulars. Da bei einem Formular im Normalfall nur gesetzte Checkboxen im POST übertragen werden und keine ungesetzten bzw. abgewählten, kommt bei nur einer Checkbox im Fall eines unchecked dann auch nur ein "leeres" Formular bzw. POST-Array an. Ein "leeres" Formular stößt dann aber auch nicht die Verarbeitung an, in der geprüft wird, ob es Felder wie eben diese Checkbox gibt. Daher funktioniert aber dann ein Formular mit zusätzlichem HIDDEN-Field.
Du solltest das gleiche Fehlerverhalten mit 2 Checkboxen haben wenn Du bei beiden den Status abgewählt nimmst, denn auch in diesem Fall würde nur ein leeres Formular übertragen.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von McHubi » Mo 27. Feb 2017, 14:06

Hallo Ortwin,

seh ich anders. Auch ein leerer Wert ist eine Information. Das ein hidden field erforderlich ist - was im übrigen auch keinerlei Inhalt aufweist - ist so wie "draußen nur Kännchen". :mrgreen:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Faar » Mo 27. Feb 2017, 14:15

Ich sehe das auch als Bug, denn ohne Contenido checkt man das so:

Code: Alles auswählen

$check = $_POST['check'];
if ($check != 'true') {
    $check = 'false';
}
Das heißt, dass hier laut Ortwin bei einer einzelnen Checkbox erst gar kein $_POST['check'] ankommen dürfte und dann müsste es so lauten:

Code: Alles auswählen

if($_POST['check']){
  $check = 'true');
}else{
    $check = 'false';
}
Da wir aber Contenido Platzhalter haben, checken wir diese Platzhalter.

Kaffee? Gerne! :)
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Oldperl » Mo 27. Feb 2017, 22:59

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". :mrgreen:
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! :arrow: 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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Faar » Di 28. Feb 2017, 11:20

Oldperl hat geschrieben:
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.
Na doch ist es das:

Code: Alles auswählen

if($_Post['dingens'])...
Damit checke ich, ob es die Variable namens "dingens" gibt oder nicht. Das ist eine Information.
Wie beim Auto: Kein rotes Signal--->alles in Ordnung, rote Motorleuchte brennt---> doch nicht alles in Ordnung
Der Programmierer weiß, dass es beim Häckchen setzen ein "Signal" in Form einer $_POST Variable geben müsste.
Fehlt diese, wurde kein Häckchen gesetzt.
:mrgreen:
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.
Wie oben, kein Signal ist auch eine Information.
Oder hältst Du stundenlang an einem unbeschrankten Bahnübergang, weil kein Signal erscheint?
Du bekommst da 2 Informationen: kein Licht --> freie Fahrt, rotes Licht--> Zug kommt
Aber du bekommst nur 1 Signal.
:mrgreen:
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.
Aha... :roll:
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.
Dann haben wir doch den Problemkern gut erkannt, die Verarbeitung innerhalb Contenidos ist hier falsch.
Ein BUG :twisted:
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,
Das wäre logisch, denn wenn kein Signal "Häkchen gesetzt" kommt, kann es also nur ungesetzt sein.
Ungesetzt heißt, auch in der DB muss auch dieser Wert auf "false" gesetzt werden.
Es bleibt ein BUG :twisted:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Oldperl » Di 28. Feb 2017, 12:59

Faar hat geschrieben:Na doch ist es das:

Code: Alles auswählen

if($_Post['dingens'])...
Damit checke ich, ob es die Variable namens "dingens" gibt oder nicht.
Dazu sollte man besser isset nutzen :arrow: http://php.net/manual/de/function.isset.php
Faar hat geschrieben:Oder hältst Du stundenlang an einem unbeschrankten Bahnübergang, weil kein Signal erscheint?
Du bekommst da 2 Informationen: kein Licht --> freie Fahrt, rotes Licht--> Zug kommt
Aber du bekommst nur 1 Signal.
:mrgreen:
Der Vergleich hinkt. Denn es ist ja immer noch die Lichtzeichenanlage ($_POST-Var) vorhanden, die halt in diesem Moment den Inhalt "Licht aus" (False) hat - wobei ich trotzdem nach einem Zug Ausschau halten würde. :mrgreen:
Faar hat geschrieben:Es bleibt ein BUG :twisted:
Von mir aus nenn es halt einen Bug. :P
Ihr habt aber definitiv beide Recht das dieses Verhalten so nicht gewünscht sein kann und daher geändert gehört. Wobei es sicherlich nun kein existentielles Problem von Con 4.9 ist, da gibt es weiß Gott genug andere.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Faar » Di 28. Feb 2017, 15:31

Oldperl hat geschrieben: Von mir aus nenn es halt einen Bug. :P
Bugs eben...

Ihr habt aber definitiv beide Recht das dieses Verhalten so nicht gewünscht sein kann und daher geändert gehört.
Sollte schon mal gemacht werden.
Wobei es sicherlich nun kein existentielles Problem von Con 4.9 ist, da gibt es weiß Gott genug andere.
Ja, wenn man diesen Fehler kennt, kann man ihn umschiffen.
Aber wer weiß, ob daraus nicht Folgefehler entstehen könnten?
Wie könnte eine Lösung dieses Problems aussehen?
Dateianhänge
zwei_Bugs.JPG
zwei_Bugs.JPG (113.88 KiB) 3801 mal betrachtet
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von McHubi » Do 2. Mär 2017, 00:01

N'Abend ihr zwei,
Wobei es sicherlich nun kein existentielles Problem von Con 4.9 ist, da gibt es weiß Gott genug andere.
Dem stimme ich zu. Der Workararound ist ja auch kein Hexenwerk, das fällt letztlich unter nervendes Gezicke. Man muss halt erst mal drauf kommen... Und da das hier jetzt schön dokumentiert ist, wird's hoffentlich auch von anderen gefunden die sich grad mit dem gleichen Phänomen rumschlagen...

Finde, wir haben uns jetzt alle nen Kaffee verdient! :D
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Faar » Do 2. Mär 2017, 13:00

McHubi hat geschrieben:Finde, wir haben uns jetzt alle nen Kaffee verdient! :D
Dinitiv! :D
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [4.9.12] Fehler, Checkbox in Modul-Eingabe

Beitrag von Oldperl » Do 2. Mär 2017, 13:11

Faar hat geschrieben:Dinitiv! :D
Heißt das nicht "Genitiv"??? :mrgreen:

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Antworten