PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : YaBB -> vB - Converter


Boothby
20.10.2001, 22:24
Ich bin nen absoluter Newbie in Sachen PHP und MySQL und da ich mich da reinfinden will hab ich vor nen YaBB Converter zu basteln.

Ich hab mal angefangen die Memberdaten ins vB zu bekommen.

Aufbau einer Memberdatei. (Liegen alle im Pfad /Members und lauten Username.dat)

Password
Username
email@domain.de
Webseitenname
http://www.meine-domain.de
Signatur (Incl. BB-Code)
88 (Anzahl Postings)
Usergroup
ICQ
AIM
YIM
Geschlecht
Usertitle
Rank.gif
Wohnort

So hier nun die settings.php. Die sind eigentlich klar.
<?php
//settings.php

$yabb_path="D:/yabb";
$members_path="$yabb_path/Members";
$boards_path="$yabb_path/Boards";
$messages_path="$yabb_path/Messages";

$insert_members=1;
$insert_categories=1;
$insert_boards=1;
$insert_messages=1;

$servername="localhost";

$dbusername="vbulletin";

$dbpassword="";

$dbname="vbulletin";

$forum_id="2"; //Forum ID

//settings ende

$yabb_path=preg_replace("/\\\/","/",$yabb_path);
$members_path=preg_replace("/\\\/","/",$members_path);
$boards_path=preg_replace("/\\\/","/",$boards_path);
$messages_path=preg_replace("/\\\/","/",$messages_path);


?>

Jetzt die members.php


<?php

/* members.php
Fügt die Memberdaten ein.
*/

require "settings.php";

//special settings

$usergroupid="2"; //registered Member
$styleid="0"; //Style ID
$parentemail="";
$coppauser="0";
$yahoo="";
$adminemail="";
$showemail="";
$invisible="";
$usertitle="";
$customtitle="";
$joindate=time();
$cookieuser="1";
$daysprune="-1";
$lastvisit=time();
$lastactivity=time();
$lastpost=time();
$timezoneoffset="0";
$emailnotification="1";
$buddylist="";
$ignorelist="";
$pmfolders="";
$receivepm="0";
$emailonpm="0";
$pmpopup="0";
$avatarid="0";
$options="15";
$birthday="0000-00-00";
$maxposts="-1";
$startofweek="1";
$ipaddress="0.0.0.0";
$referrerid="0";
$nosessionhash="0";

$userid=3;

//special settings ende

$handle=opendir("$members_path");
if ($handle){
while ($file=readdir($handle)){
if (($file != ".") && ($file != "..")){
if (preg_match("/.dat/",$file)){$members_filelist[]=$file;}
}
}
closedir ($handle);
}
//print_r($members_filelist);

$insertdata="userid, usergroupid, username, password, email, styleid, parentemail, coppauser, homepage, icq, aim, yahoo, signature, adminemail, showemail, invisible, usertitle, customtitle, joindate, cookieuser, daysprune, lastvisit, lastactivity, lastpost, posts, timezoneoffset, emailnotification, buddylist, ignorelist, pmfolders, receivepm, emailonpm, pmpopup, avatarid, options, birthday, maxposts, startofweek, ipaddress, referrerid, nosessionhash";

mysql_connect ($servername,$dbusername,$dbpassword);
mysql_select_db ($dbname);

foreach ($members_filelist as $index =>$file){
$userdata=array ();
echo "<b>$file = $userid</b><br>";
$fh=fopen("$members_path/$file","r");
while ($line=fgets($fh,1024)){
$line=preg_replace("/[\n\r]/","",$line);

$userdata[]=$line;
// echo "$line<br>";
}
if ($fh){fclose($fh);}
$username=$userdata[1];
$username=preg_replace("/_/","\" \" ",$username);

$passwort=$userdata[0];
$email=$userdata[2];
$homepage=$userdata[4];
$icq=$userdata[8];
$aim=$userdata[9];
$signature=$userdata[5];
$posts=$userdata[6];

# $insertvalues="\$userid\",\"$usergroupid\",\"$username\",\"$password\",\"$email\",\"$styleid\",\"$parentemail\",\"$coppauser\",\"$homepage\",\"$icq\",\"$aim\",\"$yahoo\",\"$signature\",\"$adminemail\",\"$showemail\",\"$invisible\",\"$usertitle\",\"$customtitle\",\"$joindate\",\"$cookieuser\",\"$daysprune\",\"$lastvisit\",\"$lastactivity\",\"$lastpost\",\"$posts\",\"$timezoneoffset\",\"$emailnotification\",\"$buddylist\",\"$ignorelist\",\"$pmfolders\",\"$receivepm\",\"$emailonpm\",\"$pmpopup\",\"$avatarid\",\"$options\",\"$birthday\",\"$maxposts\",\"$startofweek\",\"$ipaddress\",\"$referrerid\",\"$nosessionhash\"";
$insertvalues="NULL,\"$usergroupid\",\"$username\",\"$password\",\"$email\",\"$styleid\",\"$parentemail\",\"$coppauser\",\"$homepage\",\"$icq\",\"$aim\",\"$yahoo\",\"$signature\",\"$adminemail\",\"$showemail\",\"$invisible\",\"$usertitle\",\"$customtitle\",\"$joindate\",\"$cookieuser\",\"$daysprune\",\"$lastvisit\",\"$lastactivity\",\"$lastpost\",\"$posts\",\"$timezoneoffset\",\"$emailnotification\",\"$buddylist\",\"$ignorelist\",\"$pmfolders\",\"$receivepm\",\"$emailonpm\",\"$pmpopup\",\"$avatarid\",\"$options\",\"$birthday\",\"$maxposts\",\"$startofweek\",\"$ipaddress\",\"$referrerid\",\"$nosessionhash\"";

$query="INSERT INTO user ($insertdata) VALUES ($insertvalues)";
mysql_query($query);

$insertdata2="userid, field1, field2, field3, field4";

$insertvalues2="\"$userid\",\"$field1\",\"$field2\",\"$field3\",\"$field4\"";
# $insertvalues2="NULL,\"$field1\",\"$field2\",\"$field3\",\"$field4\"";


$query2="INSERT INTO userfield ($insertdata2) VALUES ($insertvalues2)";

mysql_query($query2);

$userid++;

}

mysql_close();


?>


Ich habe jetzt speziell das Prob mit der userid. Wie kann ich die per Script ermitteln. Hier in meinem Code hab ich sie festgelegt ($userid=3; ).

s.molinari
20.10.2001, 22:50
Hallo Boothby,

Könntest Du einen Ausschnitt der Members Datei hier posten? Dann können wir sehen wie sie zerlegt werden muss um dann in der vB Datenbank einzufügen.

Scott

Boothby
20.10.2001, 23:03
Hab ich so ziemlich am Anfang gemacht. :)

s.molinari
21.10.2001, 11:42
Ja klar, ich will aber den Inhalt der Datei sehen. Nur so kann festgestellt werden wie die Daten ausgelesen werden.

Scott

Boothby
21.10.2001, 20:50
pass1234
Boothby
boothby@usshornet.de
Rebellion Alpha
http://rebellion-alpha.de
Join The Resistance (http://www.rebellion-alpha.de)
44
Administrator

boothby8472

männlich
Vice Intendant
b_o_09.gif
Terra


ich hab das Teil nochmals auf meinen Server gebracht.

http://www.boothby.de/vBulletin/

Die Zeilen für YIM (Benutze ich gar nicht) und ICQ (nur selten) sind jetzt leer.

Aber das mit dem Auslesen der Daten aus der Dateio ist nicht so das Prob. Ich habe bisher Perl gemacht und dort ist es ähnlich. Schwieriger ist eher das Handling mit MySQL.

s.molinari
21.10.2001, 22:39
Also, da in diener Datei keine userid vorhanden ist, musst du nur "NULL" als userid in der Query für die 'user' Tabelle benutzen. Das Feld 'userid' ist als "auto increment" festgesetzt. D.h. die Benutzer werden automatisch eine userid zugeteilt(von 1 bis 9999999999) wenn ihre Daten in der Datenbank hinzugefügt werden. Für die 'userfield' Tabelle musst Du dann deinen Counter($userid++) benutzen und $userid für das 'userid' Feld setzen. Dazu muss $userid mit 1 anfangen einstatt 3.

Wenn Du weiter mit MySql arbeitest wirst Du schnell herausfinden dass es ganz simpel ist und tausend mal besser ist als flat files.:)

Scott

ah übrigens....herzlichen Glückwünsch zum Geburtstag.:)

Boothby
25.10.2001, 20:38
Danke,

das mit der userid=3 kommt daher, dass auf meiner lokalen installation die id's 1 und 2 schon vergeben sind. deswegen ja auch meine frage, wie ermittel ich die userid. das prog soll dub-tauglich sein. :D ok, man könnte vorher nachschauen, wie groß die letzte userid ist, aber ich möchte das per script ermitteln. zudem möchte ich durch das programmieren ja noch was lernen. :)

s.molinari
25.10.2001, 21:12
Wenn 'userid' 1 und 2 schon vergeben sind wird dein INSERT automatisch mit 3 anfangen.:)

Scott

Boothby
26.10.2001, 20:25
Jo ist schon klar, aber in der Tabelle "userfield" muß die ID übernommen werden. Dafür brauch ich's.

B.T.W. wofür ist diese Tabelle eigentlich gut?

s.molinari
27.10.2001, 10:37
Achso, Du willst vorher wissen wieviele Benutzer schon in der Datenbank eingetragen sind bevor das import Script läuft sodass die neuen importtierten Benutzer obendrauf geladen werden. Richtig?

Ich habe folgendes gefunden, versuchs einfach mal:
$numberofusers = mysql_query("select LAST_INSERT_ID(userid) from user");
$userid=$numberofusers+1;

Die 'userfield' Tabelle enthält die Daten für Felder wie z.B. Beruf, Wohnort und andere Profilfelder die Du im Forum/Board hinzufügen kannst.

Scott

Boothby
27.10.2001, 21:45
Jo das ist richtig.

mal ne andere Frage, wenn ich jetzt in phpMyAdmin gucke dann sind Spalten aber nicht in der Reihenfolge der ID's sortiert sondern wild durcheinander. Ist das richtig so? oder ist die Sortierung vollkommen wurscht?

s.molinari
27.10.2001, 22:03
Sorry, aber ich verstehe dich nicht ganz. Die Daten in den verschiedenen Spalten passen nicht mit den Ids uberein? Das sollte nicht sein. Kannst Du ein Beispiel posten?

Scott

Boothby
15.11.2001, 20:58
Ich hab mal nen bisserl weiter geproggt. Die Übernahme der Members-Daten sollte nun klappen.



<?php
//settings

$vb_path="C:/apache/htdocs/forum";

$yabb_path='D:/yabb';
$members_path="$yabb_path/Members";
$boards_path="$yabb_path/Boards";
$messages_path="$yabb_path/Messages";

$insert_members=1;
$insert_categories=1;
$insert_boards=1;
$insert_messages=1;

$servername="localhost";

$dbusername="vbulletin";

$dbpassword="";

$dbname="vbulletin";

$forum_id="2"; //Forum ID

//settings ende

$yabb_path=preg_replace("/\\\/","/",$yabb_path);
$members_path=preg_replace("/\\\/","/",$members_path);
$boards_path=preg_replace("/\\\/","/",$boards_path);
$messages_path=preg_replace("/\\\/","/",$messages_path);


?>

[php]
<?php

/* members.php
Fügt die Memberdaten ein.
*/

require "settings.php";
require "functions.php";

//special settings

$usergroupid="2"; //registered Member
$styleid="0"; //Style ID
$parentemail="";
$coppauser="0";
$yahoo="";
$adminemail="";
$showemail="";
$invisible="";
$usertitle="";
$customtitle="";
$joindate=time();
$cookieuser="1";
$daysprune="-1";
$lastvisit=time();
$lastactivity=time();
$lastpost=time();
$timezoneoffset="0";
$emailnotification="1";
$buddylist="";
$ignorelist="";
$pmfolders="";
$receivepm="0";
$emailonpm="0";
$pmpopup="0";
$avatarid="0";
$options="15";
$birthday="0000-00-00";

$maxposts="-1";
$startofweek="1";
$ipaddress="0.0.0.0";
$referrerid="0";
$nosessionhash="0";
$inforum="0";

//special settings ende

$handle=opendir("$members_path");
if ($handle){
while ($file=readdir($handle)){
if (($file != ".") && ($file != "..")){
if (preg_match("/.dat/",$file)){$members_filelist[]=$file;}
}
}
closedir ($handle);
}
//print_r($members_filelist);


#$insertdata="userid, usergroupid, username, password, email, styleid, parentemail, coppauser, homepage, icq, aim, yahoo, signature, adminemail, showemail, invisible, usertitle, customtitle, joindate, cookieuser, daysprune, lastvisit, lastactivity, lastpost, posts, timezoneoffset, emailnotification, buddylist, ignorelist, pmfolders, receivepm, emailonpm, pmpopup, avatarid, options, birthday, maxposts, startofweek, ipaddress, referrerid, nosessionhash, inforum";
$insertdata=get_tables_head("user");
$link_id=mysql_connect ($servername,$dbusername,$dbpassword);
mysql_select_db ($dbname);

foreach ($members_filelist as $file){

$userdata=array ();

$fh=fopen("$members_path/$file","r");
if ($fh){
$userdata=file("$members_path/$file");
fclose($fh);
}

$userdata=preg_replace("/[\n\r]/","",$userdata);

$username=$userdata[1];

$username=preg_replace("/_/"," ",$username);
$username=str_replace("'", "\\'", $username);
$username=str_replace("\"", "\\\"", $username);


$password=md5($userdata[0]);
$email=$userdata[2];
$homepage=$userdata[4];
$icq=$userdata[8];
$aim=$userdata[9];
$signature=$userdata[5];
$signature=str_replace("&lt;","&amp;lt;",$signature);
$signature=str_replace("&gt;","&amp;gt;",$signature);
$signature=str_replace("<","&lt;",$signature);
$signature=str_replace(">","&gt;",$signature);
$signature=str_replace("'", "\'", $signature);
$signature=str_replace("\"", "\\\"", $signature);
$signature=str_replace("[br]", "\n", $signature);

$posts=$userdata[6];

if($userdata[7] == "Administrator" or $userdata[7] == "YaBB Administrator"){

s.molinari
15.11.2001, 21:15
Hallo Boothby,

Mit deiner Genehmigung werde ich dieses Thema im Hacks Forum verschieben. OK?

Scott

dionarap
19.11.2001, 17:34
das ist ne supper sache was ihr hier gebastelt habt!

echt cool, ersparrt wirklich eine menge arbeit...
habt ihr denn auch geplannt, mal ein import-script für die nachrichten (posts/threats) selber zu machen?

wäre echt super...

Boothby
23.11.2001, 20:45
Das Teil ist noch lange nicht fertig. Bei mir zu Hause hab ich bereits die Kategorien, Moderatoren und Foren fertig. Die Threads und Beiträge kommen noch. Vielleicht ist es nächste Woche soweit.

dionarap
24.11.2001, 03:07
das wäre klasse!


dann mal frohes schaffen und erst einmal gute nacht ;-)

Boothby
24.11.2001, 20:49
Nagut ein erster Prototyp ist fertsch. Bei mir funzt es ganz gut. http://www.boothby.de/download/

s.molinari
26.11.2001, 15:14
Hallo Boothby,

Auf vB.com hat jemand nach ein yabb->vB Importer Prog gefragt. Kannst Du dein Programm auf vB.org posten? Oder kann ich es posten?

Ich glaube Du würdest viele Leute glücklich machen.

Scott

p.s. Könntest Du auch ein neues Thema mit deinem Programm als Anhang schreiben?

dionarap
26.11.2001, 17:08
hi, ist ne coole sache, und die userimportierung klappt wunderbar, nur bei den beiträgen krieg ich fehlermeldungen:

Die Konvertierung ist Abgeschlossen für Beitragsdaten.
Folgende Fehler sind aufgetreten:
SAUERLAND: Column count doesn't match value count at row 1
Fehler beim Eintragen der Foren: Column count doesn't match value count at row 1
Thread: You have an error in your SQL syntax near 's schon kommen...','-1','','0','1','3','Joe Wildi','44','','-1','39','1','','1',' at line 1
Ich seh's schon kommen...: You have an error in your SQL syntax near 's schon kommen...','-1','0',"Sehr interessant, die Anzeige, wie viele Leute scho' at line 1
Re: Ich seh's schon kommen...: You have an error in your SQL syntax near 's schon kommen...','-1','0',"Na gut! Bis denn viel Spass in der Uni ;)",'' at line 1
Re: Ich seh's schon kommen...: You have an error in your SQL syntax near 's schon kommen...','-1','0',"die party scheint ja wohl echt ganz gut gewesen zu ' at line 1
Re: Ich seh's schon kommen...: You have an error in your SQL syntax near 's schon kommen...','-1','0',"Die Party von Florian war echt geil, hast wirklich ' at line 1
Falsche Propheten Lüdenscheid - oder so: Column count doesn't match value count at row 1
Fehler beim Eintragen der Foren: Column count doesn't match value count at row 1
SKI-URLAUB: Column count doesn't match value count at row 1
Fehler beim Eintragen der Foren: Column count doesn't match value count at row 1
Offener Bereich: Column count doesn't match value count at row 1
Fehler beim Eintragen der Foren: Column count doesn't match value count at row 1



usw.... eine Ahnung woran es liegen kann?

---

mir ist da noch was eingefallen, kann es daran liegen, dass ich den poll-mod geladen hab; und das ganze dann auf sessionIDs läuft? von den fehlermeldungen die ich so gesehen hab, schien es sich immer um beiträge zu handeln, die eine umfrage beinhaltet haben.

Boothby
06.01.2002, 20:20
Woran oben ganannte Fehlers jetzt im einzelnen liegen, kann ich net sagen. Dass der Index nicht mehr ausgelesen werden kann, liegt am Provider, deswegen jetzt der vollständige Link.

http://www.boothby.de/download/yabbtovb.zip

Boothby
08.07.2002, 22:18
Da Scott nochmal danach gefragt hat, hier meine letzte Lösung. Modifikationen, Bugfixes, Anpassungen an spätere vB-Versionen werden durch mich nicht mehr vorgenommen. Falls jemand Lust hat, das Teil ins englische zu übersetzen, soll er es tun.

Ich habs nochmal auf meinen Webspace geuppt.

http://www.televisionboard.de/yabb/yabbtovb.zip

s.molinari
09.07.2002, 21:03
Danke Boothby!:)

Scott

Boothby
09.07.2002, 23:44
Da ich lange weile hatte und ich die englische vB.org-Gemeinde vergraulen wollte, hab ich das ding noch ins englische übersetzt und dort (http://www.vbulletin.org/forum/showthread.php?s=&threadid=40873) released. Naja viel Spass damit.

Mr.Mod
11.11.2003, 15:40
Hi,
mal eine Frage: Ist dieser Konverter für das Yabb SE oder für das Yabb auf Perl basis?

Mr.Mod

Boothby
11.11.2003, 18:01
Der ist für das Perl YaBB und unterstützt sowohl das YaBB Gold (http://www.yabbforum.com) als auch das German YaBB Coders - YaBB (http://www.germanyabbcoders.org/cgi-bin/GYP/YaBB.cgi) , was aber nicht mehr richtig weiterentwickelt wird.

B.T.W. ich schreibe gerade einen Converter für das vB3. Ich hatte angefangen den für das vB2 neu zu schreiben und dabei die Importfunktionen zu nutzen. Jetzt warte ich aber bis zur Gamma des vB3, da ich denke, dass der Import dort vollständig implementiert sein wird.

Ich denke mal bis Weihnachten sollte alles fertig sein.

Mr.Mod
11.11.2003, 18:17
Hi,
das ist wirklich cool, vielen Dank :) Aber mal ne dumme Frage warum kann man auf diesen Konverter nicht einen Verweis im Kundenbereich unter importscripte machen?

Mr.Mod

Boothby
11.11.2003, 18:29
Weil es kein offizieller Konverter ist?

Mal ne dumme Frage. Wenn das Ding dann mal fertig ist, such ich Freiwillige, die das dann auch testen möchten. Auch Leute die bereits den Schritt von Yabb nach vB vollzogen und noch ihr YaBB-Backup auf Platte haben, sind herzlich eingeladen.

Mr.Mod
11.11.2003, 19:10
Hi,
ist mir schon klar, dass es kein offizieller Konverter ist aber es wäre trotzdem gut dort rein zu schreiben das ein Konverter existiert, das erspart langes Suchen oder gar den Eindruck so etwas gäbe es gar nicht. Ich kann den Konverter leider nicht testen, da ich danach gefragt habe, weil ich vielleicht mein vB mit jemandem zusammen nutzen will, der ein yabb hat, sorry :(

Mr.Mod

Boothby
11.11.2003, 20:23
Original geschrieben von Mr.Mod
Hi,
ist mir schon klar, dass es kein offizieller Konverter ist aber es wäre trotzdem gut dort rein zu schreiben das ein Konverter existiert

Das hat unter anderem auch rechtliche Gründe (Haftung). Außerdem müßte vBGer dann auch noch Support übernehmen. Nene, es ist schon ganz ok so, dass solange es kein offizielles Script ist, es auch nicht erwähnt wird.