Két adatbázis összevonása
Szerző
Üzenet
Shifting IDs in table categories
Fatal error: Call to a member function on a non-object in /hosting/srv.hu/c/s/csallokoztea/aaaa.php on line 334
Ez vajon mit jelenthet?
Szerintem a shifz ID-ken is kell vmit állítani, csak jó lenne ha tudnám miaz
Fatal error: Call to a member function on a non-object in /hosting/srv.hu/c/s/csallokoztea/aaaa.php on line 334
Ez vajon mit jelenthet?
Szerintem a shifz ID-ken is kell vmit állítani, csak jó lenne ha tudnám miaz
Sikerült
Találtam egy javított scriptet, amivel ment:
Most egy olyan hiba volt, hogy az azonos nebűeket nem importálta át... valószínű akkor, h nem volt ugyanaz a jelszó és az emailcím...
Találtam egy javított scriptet, amivel ment:
Kód:
<?php
$dbms = 'mysql';
$phpbb_root_path = '../forums/';
$dbhost = 'localhost';
$dbuser = '';
$dbpasswd = '';
// Name and prefix for the database that should keep the original IDs
$dbname1 = '';
$table_prefix1 = '';
// Name and prefix for the database that is going to be added
// to DB1.
$dbname2 = '';
$table_prefix2 = '';
# NO NEED TO MODIFY CODE BELOW
# MODIFY ONLY IF U KNOW WHAT U R DOING
define('IN_PHPBB', true);
// Use DB1 for the initial config table etc.
$dbname = $dbname1;
$table_prefix = $table_prefix1;
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'includes/constants.'.$phpEx);
include($phpbb_root_path . 'includes/db.'.$phpEx);
// These tables can be dropped from DB2 (not used in this script)
$drop_tables = array(
"config",
"banlist", // This one could be converted
"disallow",
"search_results",
"search_wordlist",
"search_wordmatch",
"sessions",
"smilies",
"themes",
"themes_name",
"words"
);
// All tables in DB2 that should shift ID.
// - table that needs shifting (categories)
// - id in table (cat_id)
// nested array:
// - table that depends on id (forums)
// - id that corresponds to id in original table (cat_id)
$shift_tables = array(
"categories" => array(
"cat_id",
array(
array("forums", "cat_id")
)
),
"forums" => array(
"forum_id",
array(
array("posts", "forum_id"),
array("topics", "forum_id"),
array("forum_prune", "forum_id"),
array("auth_access", "forum_id")
)
),
"forum_prune" => array(
"prune_id",
array()
),
"groups" => array(
"group_id",
array(
array("user_group", "group_id"),
array("auth_access", "group_id")
)
),
"posts" => array(
"post_id",
array(
array("posts_text", "post_id"),
array("topics", "topic_first_post_id"),
array("topics", "topic_last_post_id")
)
),
"privmsgs" => array(
"privmsgs_id",
array(
array("privmsgs_text", "privmsgs_text_id"),
array("users", "user_last_privmsg")
)
),
"topics" => array(
"topic_id",
array(
array("posts", "topic_id"),
array("topics_watch", "topic_id"),
array("vote_desc", "topic_id")
)
),
"users" => array(
"user_id",
array(
array("user_group", "user_id"),
array("groups", "group_moderator"),
array("posts", "poster_id"),
array("topics", "topic_poster"),
array("privmsgs", "privmsgs_to_userid"),
array("privmsgs", "privmsgs_from_userid"),
array("topics_watch", "user_id"),
array("vote_voters", "vote_user_id")
)
),
"ranks" => array(
"rank_id",
array(
array("users", "user_rank")
)
),
"vote_desc" => array(
"vote_id",
array(
array("vote_voters", "vote_id"),
array("vote_results", "vote_id")
)
)
);
$bla_tables = array(
"auth_access",
"user_group",
"posts_text",
"privmsgs_text",
"topics_watch",
"vote_results",
"vote_voters"
);
// Traverse the shift_tables array
foreach($shift_tables as $key => $value)
{
$table = $key;
$merge_tables[$table] = 0; // keep an array with all tables that need merging
$column = $value[0]; // Column with ID that needs to be shifted
$ref = $value[1]; // Tables that are using the mentioned ID.
print "Shifting IDs in table $table<br />\n";
$max = shift_ids($table, $column);
flush();
// Do the dependent tables
foreach($ref as $key => $value)
{
$d_table = $value[0];
$merge_tables[$d_table] = 0;
$d_column = $value[1];
print " Altering dependent table: $d_table : $d_column (offset = $max)<br />\n";
flush();
shift_ids($d_table, $d_column, $max);
}
print "<br />\n";
flush();
}
foreach($merge_tables as $table => $value)
{
print "Merging $table table: ";
if(merge_tables($table))
{
print " OK<br />\n";
}
else
{
print " FAILED!<br />\n";
}
}
print "Merging users (username and either password or email are the same).<br />";
$sql = "
SELECT
u1.user_id as id1,
u2.user_id as id2,
u1.username
FROM
" . USERS_TABLE . " u1,
" . USERS_TABLE . " u2
WHERE
u1.username = u2.username
&& (u1.user_password = u2.user_password
|| u1.user_email = u2.user_email)
&& u1.user_id != u2.user_id
&& u1.user_id < u2.user_id";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query for double user records.', '', __LINE__, __FILE__, $sql);
}
print "<table cellpadding='0' cellspacing='0'>";
while($row = $db->sql_fetchrow($result))
{
print "<tr><td> ".$row['id1']." </td><td> ".$row['id2']." </td><td> ".$row['username']." </td><td> ";
merge_users($row['id1'], $row['id2']);
print " </td></tr>\n";
}
print "</table>";
function merge_users($user_id1, $user_id2)
{
global $db;
global $shift_tables;
global $table_prefix1;
$user_deps = $shift_tables['users'][1];
// The users table should be skipped and the user_posts column should be updated.
foreach($user_deps as $key => $value)
{
$d_table = $value[0];
$d_column = $value[1];
$sql = "UPDATE $table_prefix1$d_table SET $d_column = $user_id1 WHERE $d_column = $user_id2";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not update user_id.', '', __LINE__, __FILE__, $sql);
}
}
$sql = "DELETE FROM " . $table_prefix1 . "users WHERE user_id = $user_id2";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not delete user2.', '', __LINE__, __FILE__, $sql);
}
print "OK";
return;
}
function double_users()
{
global $db;
global $table_prefix1;
$users_table = $table_prefix1 . "users";
$sql = "SELECT user_id, ";
}
function merge_tables($table)
{
echo "<H1>Merging table : $table </H1>";
global $db;
global $dbname1, $table_prefix1, $dbname2, $table_prefix2;
$sql = "SHOW FIELDS FROM $table_prefix1$table";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not get field info from $table.', '', __LINE__, __FILE__, $sql);
}
$fields = array();
while($row = $db->sql_fetchrow($result))
{
$fields[] = $row['Field'];
}
$fieldlist = implode($fields, ', ');
if($table == 'users')
{
$where = " WHERE $dbname2.$table_prefix2" . $table . ".user_id > 0";
}
else
{
$where = '';
}
echo "$table";
$sql = "INSERT INTO $dbname1.$table_prefix1".$table." ($fieldlist) SELECT $fieldlist from $dbname2.$table_prefix2" . $table . $where;
if(!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not merge $table.', '', __LINE__, __FILE__, $sql);
}
return TRUE;
}
// Shift all ID's in column $id in table $table in
// database 2 by MAX($id) or (if not 0) by $offset
function shift_ids($table, $id, $offset = 0)
{
global $db;
global $dbname1, $table_prefix1;
global $dbname2, $table_prefix2;
// Offset hasn't been given, we're going to figure it out ourselfs
if($offset == 0)
{
if(!$offset = getmax($dbname1, $table_prefix1.$table, $id))
{
// Empty table, no need to shift IDs
print "Empty table? Skipping...<br />\n";
return;
}
}
// What's the max_id in the current table?
$max2 = getmax($dbname2, $table_prefix2.$table, $id);
$max2 = intval($max2); // Make sure that max2 contains a number, make it 0 if this table is empty.
// First we add the offset + the max of the current table
// Treat values of 0 and lower as special values.
$sql = "UPDATE $dbname2." . $table_prefix2 . $table . " SET $id = $id + $max2 + $offset WHERE $id > 0";
print "$sql<br />\n";
if(!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not fetch max(id).', '', __LINE__, __FILE__, $sql);
}
// Then we subtract the max of the current table again.
// We do this to prevent problems with key constrains from happening
// i.e. if we do id=id+20 on key 1 when key 21 already exists we would get an error
$sql = "UPDATE $dbname2." . $table_prefix2 . $table . " SET $id = $id - $max2 WHERE $id > 0";
print "$sql<br />\n";
if(!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not fetch max(id).', '', __LINE__, __FILE__, $sql);
}
return $offset;
}
function getmax($dbname, $table, $id)
{
global $db;
$sql = "SELECT MAX($id) as max_id FROM $dbname." . $table;
if(!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not fetch max(id).', '', __LINE__, __FILE__, $sql);
}
if($max = $db->sql_fetchrow($result))
{
return($max['max_id']);
}
else
{
// Probably no rows where returned.. Empty table.
return FALSE;
}
}
function message_die($msg_code, $msg_text = '', $msg_title = '', $err_line = '', $err_file = '', $sql = '')
{
global $db, $template, $board_config, $theme, $lang, $phpEx, $phpbb_root_path, $nav_links, $gen_simple_header;
global $userdata, $user_ip, $session_length;
global $starttime;
$sql_store = $sql;
//
// Get SQL error if we are debugging. Do this as soon as possible to prevent
// subsequent queries from overwriting the status of sql_error()
//
$sql_error = $db->sql_error();
$debug_text = '';
if ( $sql_error['message'] != '' )
{
$debug_text .= '<br /><br />SQL Error : ' . $sql_error['code'] . ' ' . $sql_error['message'];
}
if ( $sql_store != '' )
{
$debug_text .= "<br /><br />$sql_store";
}
if ( $err_line != '' && $err_file != '' )
{
$debug_text .= '</br /><br />Line : ' . $err_line . '<br />File : ' . $err_file;
}
print $debug_text;
exit;
}
echo "Done";
?>
Most egy olyan hiba volt, hogy az azonos nebűeket nem importálta át... valószínű akkor, h nem volt ugyanaz a jelszó és az emailcím...
http://free.srv.hu/c/s/csallokoztea/index.php
Az elsú fórum az eredeti, a többi a másik fórum...
itt csináltam...
Van egy kis hiba. Az utolsó hozzászólás résznél nem jól vannak a dátumok és az userek se néhol.... Végülis nem nagy gond, de hátha megoldható. Erre nincs valami ötleted, miért álhattak el?
***
Na nem írok új hszt, szal így: http://www.phpbbhacks.com/download/1608
Az elsú fórum az eredeti, a többi a másik fórum...
itt csináltam...
Van egy kis hiba. Az utolsó hozzászólás résznél nem jól vannak a dátumok és az userek se néhol.... Végülis nem nagy gond, de hátha megoldható. Erre nincs valami ötleted, miért álhattak el?
***
Na nem írok új hszt, szal így: http://www.phpbbhacks.com/download/1608
Priby írta:
http://free.srv.hu/c/s/csallokoztea/index.php
Az elsú fórum az eredeti, a többi a másik fórum...
itt csináltam...
Van egy kis hiba. Az utolsó hozzászólás résznél nem jól vannak a dátumok és az userek se néhol.... Végülis nem nagy gond, de hátha megoldható. Erre nincs valami ötleted, miért álhattak el?
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Igen, utólagf sikerült megcsinálni, írtam is a hozzászólásom végén...
Thomas RC írta:
1: Szabályzat elolvasásása.Designe írta:
Hello!
Az volna a kérdésem, hogy miként oldaható az meg, hogy egy külön telepített forumon az általam megadott user táblából vegye a bejelentkezéshez szükséges adatokat?
Hát lehet, hogy ez nem érthető mert én sem értem...
Szóval van egy nuke oldalam abban van egy forum regisztrált tag a nuke_users táblából veszi az adatokat belépéshez és minden máshoz.
Van egy teljesen szűz phpbb aminek a regeltjei a phpbb_users táblából veszi az adatokat.Na már most én azt szeretném elérni, hogy mind a két hely a nuke_users táblából vegye az adatokat.
Előre is köszönöm a segítséget.
2. a szabályzatban benn van az hogy nuke oldal fórumaival nem foglalkozunk (valahogy így van írva)
3. Esetleg próbáld meg itt is feltenni a kérdést: Nuker.hu
Egyébként én nem értek a nuke-hoz, de szerintem kell lennie valamilyen fájlnak ahol benn van az adatbázis elérési út (olyat keress hogy nuke_user[s]). Szerintem azt kéne megkeresned, és átírni a fóruméra (az pedig phpbb_user[s]). De mondom nem nagyon értek nuke-hoz. Én csak max 3-4 hétig használtam nuket, aztán töröltem is az oldalamról. Egyébként régebben ez az oldal is nuke volt.
Nem efektíve a nuke a problémám..hanem az, hogy egy másik táblából vegye a user-ek adatai az ilyen szempontból teljesen lényegtelen, hogy az most nuke vagy bármi más akár lehetne hablaty progi ami szintén használ phpbb.-t.Tehát a teljesen szűz phpbb-nek szeretném át írni a phpbb_user tábláját másra
Designe írta:
Nem efektíve a nuke a problémám..hanem az, hogy egy másik táblából vegye a user-ek adatai az ilyen szempontból teljesen lényegtelen, hogy az most nuke vagy bármi más akár lehetne hablaty progi ami szintén használ phpbb.-t.Tehát a teljesen szűz phpbb-nek szeretném át írni a phpbb_user tábláját másra
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Ám legyen akkor felteszem másképp a kérdést.
Ha van két phpbb forum egyiknek phpbb_ a másiknak meg phpbb1_ az előtagja, hogy lehet azt megcsinálni, hogy a phpbb1_users tábla helyett a phpbb_users táblát használjam?
Ha van két phpbb forum egyiknek phpbb_ a másiknak meg phpbb1_ az előtagja, hogy lehet azt megcsinálni, hogy a phpbb1_users tábla helyett a phpbb_users táblát használjam?
Designe írta:
Ám legyen akkor felteszem másképp a kérdést.
Ha van két phpbb forum egyiknek phpbb_ a másiknak meg phpbb1_ az előtagja, hogy lehet azt megcsinálni, hogy a phpbb1_users tábla helyett a phpbb_users táblát használjam?
Kód:
$table_prefix = 'phpbb_1';
Erre:
Kód:
$table_prefix = 'phpbb_';
De ez az egész adatbázisra használható. Más fájlokban kell keresni, ahol olyan van írva hogy: "phpbb_users", és ott átírni (a te példád szerint): "phpbb1_users"-re. Nem tudom hogy melyik az amásik fájl, de mod telepítés közbe én találkoztam ilyenekkel.
Designe írta:
Ám legyen akkor felteszem másképp a kérdést.
Ha van két phpbb forum egyiknek phpbb_ a másiknak meg phpbb1_ az előtagja, hogy lehet azt megcsinálni, hogy a phpbb1_users tábla helyett a phpbb_users táblát használjam?
A táblák neve az includes/constants.php-ben vannak meghatározva.
Részemről a téma lezárva.
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Priby írta:
Sikerült
Találtam egy javított scriptet, amivel ment:
Kód:
<?php
$dbms = 'mysql';
$phpbb_root_path = '../forums/';
$dbhost = 'localhost';
$dbuser = '';
$dbpasswd = '';
// Name and prefix for the database that should keep the original IDs
...
Idézet:
Fatal error: Call to a member function sql_query() on a non-object in /home/woraclan/public_html/forum/merge_phpbb2.php on line 1046
Kód:
function getmax($dbname, $table, $id)
{
global $db;
$sql = "SELECT MAX($id) as max_id FROM $dbname." . $table;
if(!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not fetch max(id).', '', __LINE__, __FILE__, $sql);
Valami ötlet?
Nincs meg a db osztály. Ennek az okát a kód teljese ismerete nélkül nehéz lenne megoldani (hogyan is akarta megoldani az író). Minenesetre be kell include-olni a megfelelő fájlt, és azután azt hiszem magától példányosodik az osztály:
Szerk.: Mintha lejjebb azt írnád, hogy találtál egy jól működő scriptet.
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Kód:
include_once($phpbb_root_path . 'includes/db.'.$phpEx);
Szerk.: Mintha lejjebb azt írnád, hogy találtál egy jól működő scriptet.
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Hát... az a baj, hogy ez már nagyon régen volt és nem emlékszem, hogy mit tettem, hogy jó lett. Mindenesetre az a script, amit ide bemásoltam, most ezt a hibaüzenetet adja.
Pontossabban ezt.
Betettem az elejére, amit írtál, de úgyis ugyanz a gond.
Idézet:
Shifting IDs in table categories
Fatal error: Call to a member function sql_query() on a non-object in /home/woraclan/public_html/forum/merge_phpbb2.php on line 1046
Betettem az elejére, amit írtál, de úgyis ugyanz a gond.
De az ide bemásolt scriptnek nincs is 1046 sora.
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!
Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.