Folgende Warnungen sind aufgetreten:
Warning [2] Undefined array key "7z" - Line: 4627 - File: inc/functions.php PHP 8.2.25 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/functions.php 4627 errorHandler->error_callback
/inc/functions_post.php 996 get_attachment_icon
/inc/functions_post.php 835 get_post_attachments
/showthread.php 1121 build_postbit
Warning [2] Trying to access array offset on value of type null - Line: 4627 - File: inc/functions.php PHP 8.2.25 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/functions.php 4627 errorHandler->error_callback
/inc/functions_post.php 996 get_attachment_icon
/inc/functions_post.php 835 get_post_attachments
/showthread.php 1121 build_postbit




Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Script zur Übertragung von Einträgen anderer Gästebücher (Textdatei)
#1
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
Code:
$filename = '';
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:
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
Das Script liest zuerst die komplette Datei ein. Aufgrund des Steuerzeichens, dass in Zeile 12 festgelegt wird
Code:
$break = chr(10);
werden 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.

Mit
Code:
$trennzeichen = '|';
werden 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.
Code:
$name = 1;
$city = 7;
$email = 2;
$icq = 4;
$aim = 5;
$msn = 16;
$hp = 3;
$message = 6;
$comment = 11;
$ip = 14;
$time = 9;
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.
Code:
0|1|2|3|4|5|6|7|8| u.s.w.
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 mit
Code:
Name=Testuser1
gespeichert. 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 127
Code:
$replace_umlauts = 1; // 1 = Ja, 0 = Nein
noch festlegen, ob HTML-Umlaute ersetzt werden sollen. In Zeile 143 wird mit
Code:
$unix = 0; // Setze diese Variable auf 1, falls der Zeitstempel im UNIX-Format vorliegt.
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:
Code:
01.01.1970, 12:00
Ist dies nicht der Fall, ist eine vorherige Bearbeitung von Hand notwendig, sonst kann er nicht korrekt umgerechnet werden.

Ach ja... Ändert man
Code:
for ($i = $a; $i >= 0; $i--)
in Zeile 63 in
Code:
for ($i = 0; $i <= $a; $i++)
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. Lachen


Angehängte Dateien
.7z   import.php.7z (Größe: 2,13 KB / Downloads: 116)
.zip   import.php.zip (Größe: 2,15 KB / Downloads: 374)
Zitieren
#2
Hallo,

leider funktioniert das Script scheinbar nicht. Ich bekomme immer nur einen HTTP 500 Fehler gemeldet:

"Die Seite kann nicht angezeigt werden, da der Websiteserver möglicherweise gewartet wird oder ein Programmierfehler vorliegt."

Das Script befindet sich bei mir direkt unter dem Gästebuchroot. Inclusive der Datei mit den alten Einträgen. "...mgb/Import/" dort dann die import.php sowie die alte.txt

Ich habe die beiden Dateien mal mit drangehängt. In der import.php sind in Zeile 10 und 11 evtl. noch jeweils die beiden ' zuviel. Egal ob mit oder ohne ' - gleicher Fehler.

Meine PHP-Version ist die 5.6. Weiter runter erlaubt der Hoster nicht. Rauf kann ich noch auf die Version 7.0. (Derzeit aber ungern)

Grüße Kai-Uwe


Angehängte Dateien
.zip   Import und Eintraege.zip (Größe: 176,65 KB / Downloads: 317)
Zitieren
#3
Du hast eine PN.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste