18.02.2015, 18:51:42
Ich habe ein kleines Script geschrieben, welches die Portierung von Einträgen aus anderen Gästebüchern in das MGB 0.7 erleichtern soll. Es wurde speziell für Gästebücher geschrieben, deren Einträge als Textdatei vorliegen und für deren Nutzung bisher keine Datenbank notwendig war. Das Script wurde mit der Sicherungsdatei des "PHP-Gästebuch 1.63" getestet, und kann auch an andere Gästebücher angepasst werden. Dafür sind allerdings etwas Programmierkenntnisse erforderlich. Wahlweise besteht auch die Möglichkeit mir die Datei in der die Einträge gespeichert sind zu schicken, und ich passe das Script dann an.
Das Script muss in einem Ordner namens "import" im Hauptverzeichnis des MGB liegen. Also z.B. "htdocs/www/mgb/import". Die Datei mit den Gästebucheinträgen sollte im selben Ordner liegen. Es kann aber auch ein Pfad angegeben werden. Die einzubindende Datei wird ganz am Anfang des Scripts in der Variable festgelegt.
Ich erkläre jetzt mal wie es funktioniert. Mal angenommen es handelt sich wie im Beispiel um das PHP-Gästebuch 1.63. Dessen Eintragsdatei sieht wie folgt aus, wenn man sie öffnet:Das Script liest zuerst die komplette Datei ein. Aufgrund des Steuerzeichens, dass in Zeile 12 festgelegt wirdwerden Zeilenumbrüche erkannt.
chr(10) ist dabei das LF (line feed) Zeichen und
chr(13) ist das CR (carriage return) Zeichen.
Diese werden nur benötigt, wenn die verschiedenen Einträge sich in jeweils neuen Zeilen befinden. Einfach ausprobieren, welches funktioniert. Sollten die Einträge alle in einer Zeile stehen, müssen sie ebenfalls durch ein Zeichen getrennt sein. Dann bitte ebendies hier eintragen.
Mitwerden die verschiedenen Werte eines einzelnen Eintrags erkannt. Gut am Beispiel zu sehen. Sollte hier ein anderes Zeichen verwendet worden sein, dann auch dies bitte ersetzen.
Von Zeile 16-26 werden die Positionen der zu übernehmenden Werte innerhalb eines Eintrags festgelegt.Dabei ist zu beachten, dass der erste Wert eines Eintrags (im Beispiel die Nummer des Eintrags) den Wert '0' bekommt. Bitte die Werte der Variablen mit den obigen Beispieleinträgen vergleichen um zu sehen, was ich meine. Die Nachricht des Eintrages ist z.B. an siebter Stelle, wird jedoch mit der ID 6 eingelesen, da die erste ID die 0 erhält.Um auch wirklich nur die Werte der Einträge an sich zu erhalten, werden bestimmte Zeichen rausgeschnitten. Sehen wir uns das am Beispiel des "Name"-Feldes an. Jeder Name wird mitgespeichert. Natürlich ist nur Testuser1 der Name des Eintragers. Würde man nun den Wert innerhalb der beiden "|" Trennzeichen einfach übernehmen, würde als Name Name=Testuser1 in der Datenbank stehen. Das wollen wir natürlich nicht. Deshalb kann man in Zeile 29-39 Strings festlegen, die automatisch gelöscht werden sollen.
Zu guter Letzt kann man in Zeile 111 und 127noch festlegen, ob HTML-Umlaute ersetzt werden sollen. In Zeile 143 wird mit angegeben, ob der Zeitstempel bereits im UNIX-Format vorliegt, oder umgerechnet werden soll. Liegt er nicht im UNIX-Format vor, muss das Format allerdings so aussehen:Ist dies nicht der Fall, ist eine vorherige Bearbeitung von Hand notwendig, sonst kann er nicht korrekt umgerechnet werden.
Ach ja... Ändert man in Zeile 63 in werden die Einträge in der umgekehrten Reihenfolge eingelesen. Für das PHP-Gästebuch ist jedoch die erste Variante notwendig, da hier neue Einträge an den Anfang der Datei geschrieben werden.
Ja, das sollte es wohl auch gewesen sein. Schreibt mir Eure Erfahrungen mit dem Script oder passt es an Eure Bedürfnisse an und postet es wieder hier. Ich würde mich freuen. Natürlich könnt Ihr Euch auch bei Problemen melden.
Das Script muss in einem Ordner namens "import" im Hauptverzeichnis des MGB liegen. Also z.B. "htdocs/www/mgb/import". Die Datei mit den Gästebucheinträgen sollte im selben Ordner liegen. Es kann aber auch ein Pfad angegeben werden. Die einzubindende Datei wird ganz am Anfang des Scripts in der Variable
Code:
$filename = '';
Ich erkläre jetzt mal wie es funktioniert. Mal angenommen es handelt sich wie im Beispiel um das PHP-Gästebuch 1.63. Dessen Eintragsdatei sieht wie folgt aus, wenn man sie öffnet:
Code:
3|name=Testuser3|email=testuser3@m-gb.org|url=|icq=no|aim=no|text=Test 1, 2, 3|city=no|country=no|Date=18.02.2015, 12:02:00|answer=no|awtext=|awname=|awdate=|123.45.6.789|yahoo=no|msn=no
2|name=Testuser2|email=testuser2@m-gb.org|url=|icq=no|aim=no|text=Test 1, 2, 3|city=no|country=no|Date=18.02.2015, 12:01:00|answer=no|awtext=|awname=|awdate=|123.45.6.789|yahoo=no|msn=no
1|name=Testuser1|email=testuser1@m-gb.org|url=|icq=no|aim=no|text=Test 1, 2, 3|city=no|country=no|Date=18.02.2015, 12:00:00|answer=no|awtext=|awname=|awdate=|123.45.6.789|yahoo=no|msn=no
Code:
$break = chr(10);
chr(10) ist dabei das LF (line feed) Zeichen und
chr(13) ist das CR (carriage return) Zeichen.
Diese werden nur benötigt, wenn die verschiedenen Einträge sich in jeweils neuen Zeilen befinden. Einfach ausprobieren, welches funktioniert. Sollten die Einträge alle in einer Zeile stehen, müssen sie ebenfalls durch ein Zeichen getrennt sein. Dann bitte ebendies hier eintragen.
Mit
Code:
$trennzeichen = '|';
Von Zeile 16-26 werden die Positionen der zu übernehmenden Werte innerhalb eines Eintrags festgelegt.
Code:
$name = 1;
$city = 7;
$email = 2;
$icq = 4;
$aim = 5;
$msn = 16;
$hp = 3;
$message = 6;
$comment = 11;
$ip = 14;
$time = 9;
Code:
0|1|2|3|4|5|6|7|8| u.s.w.
Code:
Name=Testuser1
Zu guter Letzt kann man in Zeile 111 und 127
Code:
$replace_umlauts = 1; // 1 = Ja, 0 = Nein
Code:
$unix = 0; // Setze diese Variable auf 1, falls der Zeitstempel im UNIX-Format vorliegt.
Code:
01.01.1970, 12:00
Ach ja... Ändert man
Code:
for ($i = $a; $i >= 0; $i--)
Code:
for ($i = 0; $i <= $a; $i++)
Ja, das sollte es wohl auch gewesen sein. Schreibt mir Eure Erfahrungen mit dem Script oder passt es an Eure Bedürfnisse an und postet es wieder hier. Ich würde mich freuen. Natürlich könnt Ihr Euch auch bei Problemen melden.