dedlfix: Kein Insert in meine MySQL Datenbank

Beitrag lesen

Tach!

ich habe nochmals geschaut und damit ist mir folgendes aufgefallen. Wenn alle Checkbox angeklickt sind, dann bekomme ich ein Insert. Es kann doch nicht sein, dass ich immer alle ausfüllen muss?

Ah, Checkboxen, gutes Stichwort. Generell, wenn irgendwas nicht so läuft wie erwartet, empfiehlt sich Debugging, wenn man die Ursache nicht allein durch Code-Anschauen findet. Das ist keine beliebte Tätigkeit, aber eine meist recht zielführende. Deswegen kann ich es nicht oft genug betonen, dass man sich diesbezüglich zumindest Grundfertigkeiten aneignet, und das recht zeitig, wenn man mit dem Programmieren anfängt.

Wenn das Insert nicht klappt, dann kann man sich mal anschauen, was für Werte man da übergibt, also mal ein var_dump($_POST) in deinem Fall. Damit könntest du sehen, dass für die nicht angehakten Checkboxen Einträge fehlen. In der Folge ist PHP nicht in der Lage, aus den fehlenden Einträgen etwas rauszulesen, um es dem Statement übergeben zu können. Stattdessen wird es wohl null beim Lesevorgang liefern und dann beschwert sich das execute(), weil die Datenbankfelder kein NULL annehmen dürfen, so zumindest meine Vermutung. Das Gejammer des execute() überhörst du aber, weil du nicht auswertest, dass es false zurückliefert und daraufhin auch nicht den Fehlermeldungstext aus der Eigenschaft $mysqli->error abfragst.

Warum aber sind die Einträge nicht vorhanden? Dazu befragt man am besten die Quelle, also den Browser, und da ist das Mittel der Wahl üblicherweise seine eingebauten Entwicklertools. Im Netzwerk-Tab kann man sehen, was er auf die Reise schickt, und auch, dass er nichts sendet, wenn die Checkbox nicht angehakt ist. Und das ist so definiert. Nicht gesetzte Checkboxen gehören nicht zu den erfolgreichen Eingabeelementen und werden deshalb ignoriert. Nur wenn sie ausgewählt ist, wird der Inhalt von name und value (oder on, wenn nicht vorhanden) der Checkbox übertragen.

Ein alter Trick ist, vor die Checkbox ein <input type="hidden"> mit dem Wert für eine nicht angehakte Checkbox im value zu notieren und dafür auch denselben name wie die Checkbox zu geben. Im Unausgewählt-Fall wird dieser Hidden-Input-Wert übertragen, wenn ausgewählt jedoch beide. PHP ignoriert aber den ersten Wert vom Hidden-Input und überschreibt ihn mit dem value der Checkbox.

dedlfix.