From 27b676b7b2f79856fe72cd614372c7a9a0e58939 Mon Sep 17 00:00:00 2001 From: Frenck Lutke Date: Thu, 25 Feb 2021 12:24:23 +0100 Subject: [PATCH] fix checkboxes shown as checked when they're not with mysql The issue occurs because boolean/tinyint values are retrieved from mysql as strings, and in php/js all non-empty strings are cast as boolean true. Current PDO mysql driver doesn't support `PDO::ATTR_STRINGIFY_FETCHES = false`, and if I disable prepare-emulation so it uses the native MySQL driver instead which supposedly does support it, prepare statements no longer play nice with named parameters. Every remaining clean solution that comes to mind that can cover all cases, just for MySQL, adds an annoying amount of additional code / overhead. As long as the `App.FormFields.checkbox_tag()` JS function is the only one suffering from the lack of conversion, I'll go with easy ugly over here. --- js/App.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/App.js b/js/App.js index 67d932369..db1e7459e 100644 --- a/js/App.js +++ b/js/App.js @@ -43,8 +43,9 @@ const App = { return this.button_tag(value, "", {...{onclick: "App.dialogOf(this).hide()"}, ...attributes}); }, checkbox_tag: function(name, checked = false, value = "", attributes = {}, id = "") { + // checked !== '0' prevents mysql "boolean" false to be implicitly cast as true return `` },