Eigenreparatur phpMyAdmin

Einschlägigen Schmähungen zum Trotz nutze ich die Weboberfläche phpMyAdmin ganz gerne zum Bearbeiten von MyMSQL-Datenbanken auf meinen Servern. Allerdings hat phpMyAdmin, wie es bei Debian mitgeliefert wird, seit mindestens zwei Debian-Versionen (Wheezy und Jessie) einen für mich recht lästigen Bug: Man kann seit einiger Zeit in phpMyAdmin konfigurieren, ob für Eingabe in char- und varchar-Datenbankfelder <input>– oder <textarea>-Eingabefelder verwendet werden sollen. Allerdings ignoriert phpMyAdmin die Konfigurationseinstellung und verwendet immer <textarea>. Das ist für mich lästig, weil ich oft gleiche oder zumindest ähnliche Eingaben tätige und dafür die Webformular-Ausfüll-Historie meines Browsers nutze – die funktioniert aber nur bei <input>-, aber nicht bei <textarea>-Feldern.

Also habe ich mich heute ‘mal hingesetzt und mich durch den Code gebissen. Herausgekommen ist folgender Patch für die Datei libraries/insert_edit.lib.php, der das Problem behebt:

@@ -1198,10 +1198,18 @@
                 . 'max="' . $min_max_values[1] . '" ';
         }
     }
+
+    if ($column['is_char']) {
+        $extracted_columnspec = PMA_Util::extractColumnSpec($column['Type']);
+        $maxlength = $extracted_columnspec['spec_in_brackets'];
+    } else {
+        $maxlength = $fieldsize;
+    }
+
     return '<input type="' . $input_type . '"'
         . ' name="fields' . $column_name_appendix . '"'
         . ' value="' . $special_chars . '" size="' . $fieldsize . '"'
-        . ((isset($column['is_char']) && $column['is_char']) ? ' maxlength="' . $fieldsize . '"' : '')
+        . ((isset($column['is_char']) && $column['is_char']) ? ' maxlength="' . $maxlength . '"' : '')
         . ($input_min_max !== false ? ' ' . $input_min_max : '')
         . ($input_type === 'time' ? ' step="1"' : '')
         . ' class="' . $the_class . '" ' . $unnullify_trigger
@@ -1310,7 +1318,8 @@
     $fieldsize = PMA_getColumnSize($column, $extracted_columnspec);
     $html_output = $backup_field . "\n";
     if ($column['is_char']
-        && ($GLOBALS['cfg']['CharEditing'] == 'textarea'
+//         && ($GLOBALS['cfg']['CharEditing'] == 'textarea'
+        && ($default_char_editing == 'textarea'
         || strpos($data, "\n") !== false)
     ) {
         $html_output .= "\n";
@@ -1321,6 +1330,7 @@
             $special_chars_encoded
         );
     } else {
+        $GLOBALS['cfg']['CharEditing'] = $default_char_editing;
         $html_output .= PMA_getHTMLinput(
             $column, $column_name_appendix, $special_chars,
             $fieldsize, $unnullify_trigger, $tabindex, $tabindex_for_value, $idindex
@@ -2893,7 +2903,7 @@
 
     //store the default value for CharEditing
     $default_char_editing  = $GLOBALS['cfg']['CharEditing'];
-
+
     $odd_row = true;
     for ($i = 0; $i < $columns_cnt; $i++) {
         $html_output .= PMA_getHtmlForInsertEditFormColumn(

Ob das nun den Programmierkonventionen der phpMyAdmin-Entwicklern entspricht, weiß ich nicht. Aber vielleicht hilft’s trotzdem dem einen oder anderen Leser. 😉

Schreibe einen Kommentar