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. 😉