"leere" Antworten in den Postings nach Datenbank Import (General)

by cw, Wednesday, September 04, 2019, 08:56 (20 days ago)

Hallo,

ich versuche gerade unser Forum (V1.7) auf einem neuen Server zu installieren (testweise).

Auf dem alten Server haben ich mit "mysqldump" mir ein SQL File erzeugt, dieses dann auf dem neuen Server in die Datenbank importiert (mysql DBName < SQL-File). Die Foren Software habe ich ein zu eins auf den neuen kopiert (DBName / DBUser / DBPasswort angepasst).

Das sollten die größten Unterschiede der beiden Server sein
Alter Server: Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Neuer Server: mysql Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

In den Error-Log-Files sind keine Einträge vorhanden.


Nun habe ich das Problem das zwar alle Themen aufgelistet werden aber der Inhalt des Beitrag wird nicht anzeigt (bleibt leer) wenn ich einen Beitrag anklicke. Alles andere wie User Registrierung / Administrieren / ... funktioniert.
Die "vermissten" Inhalte der Beiträge sind definitiv in der Datenbank vorhanden.

Das ganz merkwürdige ist, erstelle ich ein neues Thema erscheint der wie gewohnt in der Übersicht, auch der Inhalt angezeigt. Selbst bei Antworten auf dieses Thema wird mir der Beitragsinhalt korrekt angezeigt.

Es betrifft nur die alten (importierten) Themen / Beiträge, die Neuen werden korrekt angezeigt (inkl. Inhalt).


Hat dazu jemand eine Idee, was da schief läuft?

Danke für eure Antworten und Grüße
Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Wednesday, September 04, 2019, 09:37 (20 days ago) @ cw

Hallo

ich versuche gerade unser Forum (V1.7) auf einem neuen Server zu installieren (testweise).

Wie lange ist die 1.7 bei dir schon gelaufen? Ich frage, um abschätzen zu können, unter welcher PHP- und MySQL-Version einstmals die Installation stattfand.

Das sollten die größten Unterschiede der beiden Server sein
Alter Server: Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Neuer Server: mysql Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

Ich habe bisher nie mit MariaDB gearbeitet, mir kommt aber MySQL 5.7 nicht gerade wie ein Fortschritt vor.

Nun habe ich das Problem das zwar alle Themen aufgelistet werden aber der Inhalt des Beitrag wird nicht anzeigt (bleibt leer) wenn ich einen Beitrag anklicke. Alles andere wie User Registrierung / Administrieren / ... funktioniert.
Die "vermissten" Inhalte der Beiträge sind definitiv in der Datenbank vorhanden.

Die Betreffe werden ja offensichtlich mindestens in der Übersichtsseite angezeigt. Werden zumindest sie angezeigt, wenn die Postings aufgerufen werden?

Das ganz merkwürdige ist, erstelle ich ein neues Thema erscheint der wie gewohnt in der Übersicht, auch der Inhalt angezeigt. Selbst bei Antworten auf dieses Thema wird mir der Beitragsinhalt korrekt angezeigt.

Es betrifft nur die alten (importierten) Themen / Beiträge, die Neuen werden korrekt angezeigt (inkl. Inhalt).

Hat dazu jemand eine Idee, was da schief läuft?

Ja, eine Idee habe ich.

Als der 1-er Zweig von MLF entwickelt wurde, wurden, zumindest in Mitteleuropa, die MySQL-Datenbanken der Hostingangebote üblicherweise in der Standardkonfiguration aufgesetzt, womit sie als Zeichenkodierung ISO-8859-1 (mit der schwedischen Sortierung (Kollation)) benutzten. Darauf hat sich MLF im 1-er Zweig auch verlassen. Wenn du nun dein Forum damals installiert hast und bei Updates des Webservers auch die Datenbankengine nur aktualisiert und nie neu installiert hast, wurde die technische Struktur der Datenbanktabellen für MLF über die ganze Zeit so belassen, wie sie bei der Installation angegeben wurde.

Bei einem Umzug euf einen neuen Server wurde der Datenbankserver mit den heute üblichen Vorgaben versehen. Dazu gehört als Standardzeichenkodierung utf8 (bis zu drei Bytes pro Zeichen) oder utf8mb4 (bis zu vier Bytes pro Zeichen).

Da MLF1 bei der Verbindungsaufnahme keine für die Verbindung zu benutzende Zeichenkodierung aushandelt, wird nun der Vorgabewert des Servers (utf8 oder utf8mb4) benutzt, obwohl die alten, importierten Inhalte des Forums in ISO-8859-1 vorliegen. Durch die Benutzung des Vorgabewertes für die Zeichenkodierung werden neuen Inhalte in der selben Kodierung geschrieben und gelesen, wodurch sie im Gegensatz zu den importierten Inhalten auch sichtbar sind, wenn du die Postings aufrufst.

Die unterschiedliche Zeichenkodierung kann, je nach Konfiguration des Servers, in der Ausgabe zu verkrüppelten Inhalten oder gar zu keinem Inhalt führen. Eine Lösungsansatz ist, bei der Verbindungsaufnahme auch die Aushandlung der Zeichenkodierung explizit vorzunehmen.

Welche MLF-Version hast du jetzt auf der neuen Maschine installiert?

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

"leere" Antworten in den Postings nach Datenbank Import

by cw, Wednesday, September 04, 2019, 10:04 (20 days ago) @ Auge

Hi Auge,

Danke für Deine Antwort.

Puh, danke so 10 Jahre wird es bestimmt schon her sein (war zu dem Zeitpunkt als Parsimony abgeschaltet wurde), zwischendurch war aber auch noch mal ein Serverwechsel.

Ok, ist nich wirklich aktuell ...

Beides mal ja, werde auf der Übersichtsseite und beim Öffnen angezeigt. wie geschrieben nur der Inhalt eines Betrages fehlt.

Noch mal Danke für die Ausführliche Erklärung, auf die Zeichenkodierung hatte ich jetzt nicht wirklich geachtet bzw. habe ich nicht gewusst das sich das im Laufe der Zeit geändert hatte.. => Teste ich heute noch.
Aber wurde wird der Betreff korrekt angezeigt, müsste der nicht auch "falsch /leer" sein?

Auf dem neuen Server verwende ich die gleich MLF v1.7, da ich das ganze Verzeichnis übernommen habe.

[EDIT] sehe gerade das ich nur im ISPConfig nur Default / Latin 1 / UTF-8 / UTF-8MB4 auswählen kann .... mmh?!

Viele Grüße ...Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Wednesday, September 04, 2019, 11:42 (20 days ago) @ cw

Hallo

Puh, danke so 10 Jahre wird es bestimmt schon her sein (war zu dem Zeitpunkt als Parsimony abgeschaltet wurde),

Wenn ich diese Nachricht richtig deute, fand die Abschaltung von Parsimony etwas Ende Mai 2008 statt.

Beides mal ja, werde auf der Übersichtsseite und beim Öffnen angezeigt. wie geschrieben nur der Inhalt eines Betrages fehlt.

Noch mal Danke für die Ausführliche Erklärung, auf die Zeichenkodierung hatte ich jetzt nicht wirklich geachtet bzw. habe ich nicht gewusst das sich das im Laufe der Zeit geändert hatte.. => Teste ich heute noch.
Aber wurde wird der Betreff korrekt angezeigt, müsste der nicht auch "falsch /leer" sein?

Wenn dort keine Zeichen vorhanden sind, die der Kodierung widersprechen, nicht, soweit ich es mir denke. Wir diskutieren hier meine Idee. Ich weiß ohne weitere Angaben nicht, ob ich richtig liege, mir riecht es nur nach einem Kodierungsproblem.

Auf dem neuen Server verwende ich die gleich MLF v1.7, da ich das ganze Verzeichnis übernommen habe.

Und welche ist es? Von der Version 1.7 gibt es satte neun "Unterversionen", nämlich 1.7.0 bis 1.7.8. Die Versionen bis zur 1.7.6 stammen noch von Alex, ab dann habe ich die Fehlerbehebung und Weiterentwicklung übernommen (Versionen 1.7.7 bis 1.7.8). Die Beantwortung meiner Frage ist wichtig für die Beantwortung deiner Frage, weil die Bibliothek der Datenbankfunktionen mit Version 1.7.8 ausgetauscht wurde.

[EDIT] sehe gerade das ich nur im ISPConfig nur Default / Latin 1 / UTF-8 / UTF-8MB4 auswählen kann .... mmh?!

Nee, das ist (vermutlich) die falsche Stelle. Dort dürftest du die Vorgabewerte für den Datenbankserver, neue Datenbanken und ihre Tabellen einstellen können. Zumal man sich in trügerischer Sicherheit wiegen kann, da es (zumindest hinter den Kulissen) einerseits die Einstellung CHARSET (Zeichensatzkodierung) und andererseits die COLLATION (Sortierreihenfolge) gibt, wobei COLLATION sehr viel prominenter, aber für unsere Zwecke unzutreffend ist.

Wenn ich weiß, welche Version (bis zur letzten Stelle der Versionsnummer) du benutzt, kann ich dir auch sagen, was du ausprobieren solltest.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

"leere" Antworten in den Postings nach Datenbank Import

by cw, Wednesday, September 04, 2019, 13:21 (20 days ago) @ Auge

Hi,

ui, so viele Version gab es?! Ich hatte nach Installation nie wieder ein Update gemacht da ja alles problemlos funktionierte.

Zur Version, unter den Foren Einstellungen => Erweitert ist 1.7 eingetragen (gehe jetzt mal von 1.7.0 aus) und in den PHP-Dateien finden sich Copyright Einträge zwischen 2004 und 2005 Von Alex.das Verzeichnis "js" beinhaltet Copyright Einträge von Thomas Fuchs aus dem Jahr 2005.

Hoffe Du kannst damit jetzt mehr anfangen.

Danke und Grüße
Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Wednesday, September 04, 2019, 14:39 (20 days ago) @ cw

Hallo

ui, so viele Version gab es?! Ich hatte nach Installation nie wieder ein Update gemacht da ja alles problemlos funktionierte.

Zur Version, unter den Foren Einstellungen => Erweitert ist 1.7 eingetragen (gehe jetzt mal von 1.7.0 aus) ...

Ja, das sollte stimmen.

Hoffe Du kannst damit jetzt mehr anfangen.

Klar.

1. Du hast auf deinem Server PHP noch mit einer 5.x-Version zu laufen. Wenn es PHP 7.irgendwas wäre, würde dein Forum grundsätzlich und vollständig nicht funktionieren.

2. Du solltest schon wegen der Behebung von Fehlern und Sicherheitslücken ein Update auf Version 1.7.8 durchführen. Wenn dein Server irgendwann mit einer PHP-Verion 7.x oder später laufen wird, ist das Update sowieso zwingend fällig.

3. Du solltest in der functions.php die Funktion connect_db finden. Mit der Suchen-Funktion eines Editors (in Windows zum Beispiel Notepad++ oder, mit einem aktuellen Windows 10, auch Notepad) kannst du nach "function connect_db" suchen, um an den Anfang des Codes der Funktion zu springen.

In den Versionen des 1.7.7-er Unterzweigs sieht die Funktion folgendermaßen aus:

 // connects to the database:
 function connect_db($host,$user,$pw,$db)
 {
  global $lang;
  $connid = @mysql_connect($host, $user, $pw);  // Datenbankverbindung herstellen
  if(!$connid) die($lang['db_error']);
  mysql_select_db($db, $connid) or die($lang['db_error']);
  return $connid;
 }

Ergänze den Code folgendermaßen (neue Zeilen durch Kommentare hervorgehoben):

 // connects to the database:
 function connect_db($host,$user,$pw,$db)
 {
  global $lang;
  $connid = @mysql_connect($host, $user, $pw);  // Datenbankverbindung herstellen
  if(!$connid) die($lang['db_error']);
  mysql_set_charset("utf8", $connid);  // <==== oder "utf8mb4" statt "utf8"
  mysql_select_db($db, $connid) or die($lang['db_error']);
  return $connid;
 }

Falls du vorher in deiner Testumgebung(!) auf die Version 1.7.8 updatest (beachte bitte die Namen der verwendeten Funktionen "mysqli_" statt "mysql_"), wird aus ...

// connects to the database:
function connect_db($host,$user,$pw,$db) {
 global $lang;
 $connid = @mysqli_connect($host, $user, $pw, $db);  // open database connection
 if (!$connid) die($lang['db_error']);
 return $connid;
}

... der ergänzte Code:

// connects to the database:
function connect_db($host,$user,$pw,$db) {
 global $lang;
 $connid = @mysqli_connect($host, $user, $pw, $db);  // open database connection
 if (!$connid) die($lang['db_error']);
 mysqli_set_charset($connid, "utf8")  // <==== oder "utf8mb4" statt "utf8"
 return $connid;
}

Allerdings kann es sein, dass dann die neuen Beiträge rumzicken. Es ist durchaus möglich, dass es notwenig ist, auf ISO-8859-1 "downzugraden". Dann müsstest du statt "utf8" oder "utf8mb4" die Kodierungsangabe "latin1" verwenden. Aber du solltest erst einmal mit "utf8" und "utf8mb4" testen. Am besten schaust du mit einem Tool wie phpMyAdmin in die Tabellenstruktur und liest dort den tatsächlich angegebenen Charset aus.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

"leere" Antworten in den Postings nach Datenbank Import

by cw, Thursday, September 05, 2019, 06:12 (19 days ago) @ Auge

Guten Morgen,

beten Dank dafür!
Heute und morgen bin ich beruflich unterwegs, werde am Wochenende das ausprobieren und Rückmeldung geben.

Viele Grüße ...Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Thursday, September 05, 2019, 06:29 (19 days ago) @ cw

Hallo

beten Dank dafür!
Heute und morgen bin ich beruflich unterwegs, werde am Wochenende das ausprobieren und Rückmeldung geben.

Tu das. Allerdings bitte ich folgende Ergänzung und Klarstellung zu beachten. Die Punkte, die ich in meinem vorherigen Posting beschrieb, führte ich in der Reihenfolge auf, in denen sie mir in den Sinn kamen. Bitte wende stattdessen die folgende Reihenfolge an.

1. Ermittle mit einem Tool wie phpMyAdmin den tatsächlichen Charset/die Zeichenkodierung der Datenbank(tabellen). Ich vermute, dass du auf eine der schon genannten Kodierungen "utf8" oder "utf8mb4" triffst.
2. Passe die Funktion connect_db, wie hier für den 1.7.7-er Zweig beschrieben, an und probiere, ob dir die Postings wieder angezeigt werden.
3. Wenn und falls mit dem ermittelten Charset keine Ausgabe gelingt, versuche es mit der Anpassung mysql_set_charset("latin1", $connid);.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

"leere" Antworten in den Postings nach Datenbank Import

by cw, Saturday, September 07, 2019, 09:06 (17 days ago) @ Auge

Morgen zusammen,

als erstes möchte ich mich recht herzlich für den Support bedanken!
Es hat funktioniert, die Einträge sind auf der Testumgebung wieder da, Danke! :-)

1. Ermittle mit einem Tool wie phpMyAdmin den tatsächlichen Charset/die Zeichenkodierung der Datenbank(tabellen). Ich vermute, dass du auf eine der schon genannten Kodierungen "utf8" oder "utf8mb4" triffst.

Es steht wirklich auf latin1
[image]

2. Passe die Funktion connect_db, wie hier für den 1.7.7-er Zweig beschrieben, an und probiere, ob dir die Postings wieder angezeigt werden.

Dieser wurde es denn (warum kommt gleich):
mysql_set_charset("utf8mb4", $connid);  // <==== oder "utf8mb4" statt "utf8"

3. Wenn und falls mit dem ermittelten Charset keine Ausgabe gelingt, versuche es mit der Anpassung mysql_set_charset("latin1", $connid);.

Der Eintrag hatte leider nicht funktioniert, die Antworten in den Themen blieben leer. :-|

Der Hinweis von Dir mit dem Zeichensatz hatte mir keine Ruhe gelassen (mysql_set_charset) und dadurch habe mir mal den Output vom mysqldump angesehen und siehe da (zumindest hier) wird utf8 als Default genutzt. Somit ging die "latin1 Einstellung" nicht.

Also mysqldump Manual dursucht und bin auf --default-character-set=utf8mb4 gestoßen. => Jugend forscht und warum nicht die Konvertierung gleich mysqldump machen lassen?

Alter Server:
mysqldump --default-character-set=utf8mb4 c1forum >forum.20190907.utf8mb4.sql

Neuer Server:
Neue DB gleich in utf8mb4 angelegt
[image]
mysql c1_forumbmw < forum.20190907.utf8mb4.sql
functions.php wie von Dir beschrieben angepasst (mysql_set_charset("utf8mb4", $connid);  // <==== oder "utf8mb4" statt "utf8").

Und ein strahlen im Gesicht! :-D


Noch mal Danke für die Hilfe, ich werde mich langsam an die Updates machen. Hoffentlich sind die Änderungen nicht zu dolle da ich einige Änderungen bei uns eingebracht hatte.


Wünsche ein schönes Wochenende und viele Grüße ...Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Saturday, September 07, 2019, 21:13 (16 days ago) @ cw

Hallo

als erstes möchte ich mich recht herzlich für den Support bedanken!
Es hat funktioniert, die Einträge sind auf der Testumgebung wieder da, Danke! :-)

Alter Server:
mysqldump --default-character-set=utf8mb4 c1forum >forum.20190907.utf8mb4.sql

Neuer Server:
Neue DB gleich in utf8mb4 angelegt

Und ein strahlen im Gesicht! :-D

Schön :-)

Noch mal Danke für die Hilfe, ich werde mich langsam an die Updates machen. Hoffentlich sind die Änderungen nicht zu dolle da ich einige Änderungen bei uns eingebracht hatte.

Sei dir des Umstands bewusst, dass auch die neueren Versionen von MLF1 bis einschließlich der 1.7.8 die Kodierung der Verbindung nicht explizit aushandeln. Da die Datenbank nun explizit utf8mb4 verwendet und die Verbindung implizit (ohne es ausdrücklich im Skript festzulegen) utf8mb4 verwendet, passt alles zueinander. Falls Oracle als Hersteller von MySQL jemals wieder die Vorgabe für die Kodierung ändern sollte, wird es mit diesen Versionen wieder nicht passen.

Die explizite Festlegung, wie ich sie in den Vorpostings gezeigt habe, vermeidet diese Malaise. Solange es keine nene Version gibt, in der die Kodierung festgelegt wird, solltest du die betreffende Codezeile im Quelltext nachtragen.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

"leere" Antworten in den Postings nach Datenbank Import

by cw, Sunday, September 08, 2019, 08:15 (16 days ago) @ Auge

Moin,

zumindest weiß ich jetzt an welcher Schraube ich drehen und in Zukunft daran denken muss. ;-)

Momentan denke ich das ich die mlf1.7.x Versionen überspringen werde und mich an der 2.2er versuchen, danach Stück für Stück nach "oben" arbeiten.

Viele Grüße ...Carsten

"leere" Antworten in den Postings nach Datenbank Import

by cw, Sunday, September 08, 2019, 10:19 (16 days ago) @ cw

Moin,

Nachtrag .... Danke für Deine "Step Up Anleitung", bin nun auf dem Testsystem bei der Version 2.4.20 angekommen.
Nur noch schauen wie ich meine Änderungen wieder reinbekommen, wie z.B. farbige Namen, "heutige bzw letzte Beiträge", die Datenbank bearbeiten da sich ja in einer Version z.B. die die Kennzeichnung für farbig geändert hat, ...

Bleibt noch vieles was angegangen werden muss .....


Schönen Sonntag noch ....Carsten

"leere" Antworten in den Postings nach Datenbank Import

by cw, Saturday, September 21, 2019, 10:43 (3 days ago) @ cw

Moin zusammen,

ich wollte nur noch mal Feedback geben, nun läuft die aktuelle Version auch auf dem Wirksystem. Nun fehlen mir noch die restlichen Anpassungen (Datei Upload, farbige Nutzernamen), dann sind alle wieder glücklich. :-D

Vielen Dank noch mal für die Hilfen!


Viele Grüße ...Carsten

Avatar

farbige Benutzernamen

by Auge ⌂ @, Sunday, September 22, 2019, 10:16 (1 day, 23 hours, 23 min. ago) @ cw

Hallo

Wegen der farbigen Benutzernamen hier ein Tip. Mit der Klasse registered_user kannst du die Namen registrierter Benutzer formtieren, mit mod die von Moderatoren und mit admin die der Admins. Eventuell brauchst du noch einen zusätzlichen Selektor, damit die Formatierung auf den Threadbaum und die Autoreninformationen der einzelnen Postings beschränkt bleibt.

.author .registered_user {
    /* Formatierung des Namens in den Autoreninfos des Postings */
}
.thread .registered_user {
    /* Formatierung des Namens im Threadbaum */
}
/* oder, wenn die Formatierung identisch sein soll, noch kürzer */
.author .registered_user, .thread .registered_user {
    /* Formatierung des Namens */
}

Das gleiche System gilt natürlich auch für die Klassen mod und admin. Individuelle Formatierungen für einzelne Namen abseits deren Gruppenzugehörigkeit sind so nicht möglich, fass das gewünscht sein sollte.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

farbige Benutzernamen

by cw, Monday, September 23, 2019, 07:33 (1 day, 2 hours, 6 min. ago) @ Auge

Moin,

Danke für die Hinweise, muss ich erst mal hinten anstellen, melde mich dazu wieder.


Viele Grüße ...Carsten

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Micha ⌂, Wednesday, September 04, 2019, 13:32 (20 days ago) @ cw

Hi,

Das ganz merkwürdige ist, erstelle ich ein neues Thema erscheint der wie gewohnt in der Übersicht, auch der Inhalt angezeigt. Selbst bei Antworten auf dieses Thema wird mir der Beitragsinhalt korrekt angezeigt.

Kannst Du bitte mal prüfen, ob die beiden Tabellen für die SPAM Klassifizierung (B8 bzw. Akismet) für _jeden_ Eintrag in Deinem Forum auch eine korrespondierende eid haben? Diese beiden Tabellen werden mit der Eintragstabelle verschnitten (JOIN), wobei nur vollständige Datensätze abgerufen werden.

Viele Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Auge ⌂ @, Wednesday, September 04, 2019, 14:14 (20 days ago) @ Micha

Hallo Micha

Kannst Du bitte mal prüfen, ob die beiden Tabellen für die SPAM Klassifizierung (B8 bzw. Akismet) für _jeden_ Eintrag in Deinem Forum auch eine korrespondierende eid haben?

Carsten (cw) benutzt MLF 1.7. Dort gibt es die Tabellen nicht. ;-)

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!

Avatar

"leere" Antworten in den Postings nach Datenbank Import

by Micha ⌂, Wednesday, September 04, 2019, 14:23 (20 days ago) @ Auge

Hi,

Carsten (cw) benutzt MLF 1.7. Dort gibt es die Tabellen nicht. ;-)

Das erklärt ... einiges ;-)

Danke für den Hinweis!

Ich bin dann mal wieder weg.
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

RSS Feed of thread
powered by my little forum