From 7de034980863857a1f3773f1dcf5a1eda6bfa355 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 3 Mar 2026 21:34:00 +0100 Subject: [PATCH] fix(select): Leerzeichen in Pipe-getrennten Select-Optionen trimmen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit field_options wie "Ferris|Digital 1 Richtung| Digital 2 Richtung" führten zu Leerzeichen nach split('|'), wodurch der Vergleich mit dem gespeicherten Wert fehlschlug und das Select-Feld beim Editieren leer blieb. Fix: opt.trim() in JS bei allen Select-Renderings (DynamicFields, SchematicEditor, PWA) + automatisches Trimmen beim Speichern in Admin. DB-Werte in Produktion bereinigt. Co-Authored-By: Claude Opus 4.6 --- admin/anlage_types.php | 8 ++++++++ admin/equipment_types.php | 8 ++++++++ js/kundenkarte.js | 8 ++++++-- js/pwa.js | 4 +++- 4 files changed, 25 insertions(+), 3 deletions(-) mode change 100755 => 100644 admin/equipment_types.php diff --git a/admin/anlage_types.php b/admin/anlage_types.php index 009a2bd..51ddae7 100644 --- a/admin/anlage_types.php +++ b/admin/anlage_types.php @@ -208,6 +208,10 @@ if ($action == 'add_field') { $fieldLabel = GETPOST('field_label', 'alphanohtml'); $fieldType = GETPOST('field_type', 'aZ09'); $fieldOptions = GETPOST('field_options', 'nohtml'); + // Leerzeichen um Pipe-Trennzeichen entfernen und leere Optionen entfernen + if ($fieldOptions) { + $fieldOptions = implode('|', array_filter(array_map('trim', explode('|', $fieldOptions)), 'strlen')); + } $showInTree = GETPOSTINT('show_in_tree'); $treeDisplayMode = GETPOST('tree_display_mode', 'aZ09'); if (empty($treeDisplayMode)) $treeDisplayMode = 'badge'; @@ -243,6 +247,10 @@ if ($action == 'update_field') { $fieldLabel = GETPOST('field_label', 'alphanohtml'); $fieldType = GETPOST('field_type', 'aZ09'); $fieldOptions = GETPOST('field_options', 'nohtml'); + // Leerzeichen um Pipe-Trennzeichen entfernen und leere Optionen entfernen + if ($fieldOptions) { + $fieldOptions = implode('|', array_filter(array_map('trim', explode('|', $fieldOptions)), 'strlen')); + } $showInTree = GETPOSTINT('show_in_tree'); $treeDisplayMode = GETPOST('tree_display_mode', 'aZ09'); if (empty($treeDisplayMode)) $treeDisplayMode = 'badge'; diff --git a/admin/equipment_types.php b/admin/equipment_types.php old mode 100755 new mode 100644 index 4427771..afb2db7 --- a/admin/equipment_types.php +++ b/admin/equipment_types.php @@ -228,6 +228,10 @@ if ($action == 'add_field') { $fieldLabel = GETPOST('field_label', 'alphanohtml'); $fieldType = GETPOST('field_type', 'aZ09'); $fieldOptions = GETPOST('field_options', 'nohtml'); + // Leerzeichen um Pipe-Trennzeichen entfernen und leere Optionen entfernen + if ($fieldOptions) { + $fieldOptions = implode('|', array_filter(array_map('trim', explode('|', $fieldOptions)), 'strlen')); + } $showInHover = GETPOSTINT('show_in_hover'); $showOnBlock = GETPOSTINT('show_on_block'); $isRequired = GETPOSTINT('is_required'); @@ -256,6 +260,10 @@ if ($action == 'update_field') { $fieldLabel = GETPOST('field_label', 'alphanohtml'); $fieldType = GETPOST('field_type', 'aZ09'); $fieldOptions = GETPOST('field_options', 'nohtml'); + // Leerzeichen um Pipe-Trennzeichen entfernen und leere Optionen entfernen + if ($fieldOptions) { + $fieldOptions = implode('|', array_filter(array_map('trim', explode('|', $fieldOptions)), 'strlen')); + } $showInHover = GETPOSTINT('show_in_hover'); $showOnBlock = GETPOSTINT('show_on_block'); $isRequired = GETPOSTINT('is_required'); diff --git a/js/kundenkarte.js b/js/kundenkarte.js index 3f28920..a8535db 100755 --- a/js/kundenkarte.js +++ b/js/kundenkarte.js @@ -1557,7 +1557,9 @@ if (field.options) { var options = field.options.split('|'); options.forEach(function(opt) { - var selected = (opt === value) ? ' selected' : ''; + opt = opt.trim(); + if (opt === '') return; + var selected = (opt === value.trim()) ? ' selected' : ''; html += ''; }); } @@ -8338,7 +8340,9 @@ html += ''; var options = field.field_options.split('|'); options.forEach(function(opt) { - var selected = (opt === value) ? ' selected' : ''; + opt = opt.trim(); + if (opt === '') return; + var selected = (opt === value.trim()) ? ' selected' : ''; html += ''; }); html += ''; diff --git a/js/pwa.js b/js/pwa.js index a31eb66..c499cc4 100644 --- a/js/pwa.js +++ b/js/pwa.js @@ -1614,7 +1614,9 @@ html += ``; if (field.options) { field.options.split('|').forEach(opt => { - const selected = (opt === val) ? ' selected' : ''; + opt = opt.trim(); + if (!opt) return; + const selected = (opt === val.trim()) ? ' selected' : ''; html += ``; }); }