Unire due forums bbtonuke

Salve gente bene vi mostro la mia piccola guida per unire 2 forums.

Scaricate il converter conv_nuke_1_2_14.zip

Installate i forums phpbb 2, potete prelevarli da qui:

Un forum phpbb nella root del vostro phpnuke chiamandola forum e installandolo con tabelle phpbb_

Installate l’altro forum da unire nella root dell’altro phpnuke con tabelle phpbb2_

Create un file .php chiamatelo merge.php e incollate il seguente codice: (inserendo i dati giusti)



// di solito la path che segue è forum ma voi mettete la path dove avete il forum principale
$dbms = ‘mysql’;
$phpbb_root_path = ‘../forum/’;

$dbhost = ‘localhost’;
$dbuser = ‘nome_database principale dove verrà creato il database unito dei 2 forum’;
$dbpasswd = ‘tua passw’;

// Name and prefix for the database that should keep the original IDs
$dbname1 = ‘nome_database dove avete installato il backup del primo forum’;
$table_prefix1 = ‘phpbb_’;

// Name and prefix for the database that is going to be added
// to DB1.
$dbname2 = ‘nome_database dove avete installato il backup del secondo forum’;
$table_prefix2 = ‘phpbb2_’;


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(
   “banlist”, // This one could be converted
// 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(
         array(“forums”, “cat_id”)
   “forums” => array(
         array(“posts”, “forum_id”),
         array(“topics”, “forum_id”),
         array(“forum_prune”, “forum_id”),
         array(“auth_access”, “forum_id”)
   “forum_prune” => array(
   “groups” => array(
         array(“user_group”, “group_id”),
         array(“auth_access”, “group_id”)
   “posts” => array(
         array(“posts_text”, “post_id”),
         array(“topics”, “topic_first_post_id”),
         array(“topics”, “topic_last_post_id”),
         array(“forums”, “forum_last_post_id”)
   “privmsgs” => array(
         array(“privmsgs_text”, “privmsgs_text_id”),
         array(“users”, “user_last_privmsg”)
   “topics” => array(
         array(“posts”, “topic_id”),
         array(“topics_watch”, “topic_id”),
         array(“vote_desc”, “topic_id”)
   “users” => 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(
         array(“users”, “user_rank”)
   “vote_desc” => array(
         array(“vote_voters”, “vote_id”),
         array(“vote_results”, “vote_id”)

$bla_tables = array(

// 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);
   // Do the dependent tables
   foreach($ref as $key => $value)
      $d_table = $value[0];
      $merge_tables[$d_table] = 0;
      $d_column = $value[1];
      print “&nbsp; Altering dependent table: $d_table : $d_column (offset = $max)<br />\n”;
      shift_ids($d_table, $d_column, $max);
   print “<br />\n”;

foreach($merge_tables as $table => $value)
   print “Merging $table table: “;
      print ” OK<br />\n”;
      print ” FAILED!<br />\n”;

print “Merging users (username and either password or email are the same).<br />”;
$sql = ”
      u1.user_id as id1,
      u2.user_id as id2,
      ” . USERS_TABLE . ” u1,
      ” . USERS_TABLE . ” u2
      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’].”&nbsp;</td><td> “.$row[‘id2’].”&nbsp;</td><td>

“.$row[‘username’].”&nbsp;</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 =

      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”;

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″;
      $where = ”;

   echo “$table”;
   $sql = “INSERT INTO $dbname1.$table_prefix1″.$table.” ($fieldlist) SELECT $fieldlist from

$dbname2.$table_prefix2″ . $table . $where;
       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”;

   // 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))
         // 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,

   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’] . ‘ ‘ .


   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;


echo “Done”;



Quindi uppate merge.php nella root del vostro forum

Ora convertite i vostri bbtonuke in phpbb2 con il converter sopra fornito.

Fate il backup del database del forum secondario con i prefix phpbb2_ e uppatelo nel database principale dove avete i prefix phpbb_

Quindi in definitiva dovremo avere il forum principale con i prefix phpbb_ e quello secondario con i prefix phpbb2_

Ora dal nostro brower lanciamo lo script http://www.tuosito.com/forum/merge.php

In base alla dimensione del vostro database c’impiegherà un po di tempo.

Al termine vi dirà l’esito della vostra fusione.
Quindi vi troverete con post, topic, sezioni, user uniti in un unico grande forum.

Guida liberamente tratta dal forum di weblord:


scritta da mhorpheox

Arrivano bellissime battute per il web da Smemoranda

Ecco a voi alcune battute e “barze” tratte dai diari 2008 di “Smemoranda:)”. Battute che fanno satira

su argomenti quali il web,internet,cellulari e telecomunicazioni.


Mike: Oggi mi è arrivata una lettera di mia zia

John: Non poteva inviartela via email?

Mike: Quando l’ha imbucata non avevano ancora inventato il computer!


Un ragazzo ad un anziano

Ma quando non si potevano digitare i messaggini voi che ne facevate del pollice?


Mario: Ci siamo conosciuti in un forum,frequentati nel newsgroup e messi insieme in chat. Ora non so come scaricarla.

John: Prova con il download!


Michela: MI sono fidanzata grazie ad internet….

con il tecnico che veniva ogni giorn a riparare il modem!


Un programmatore racconta ai suoi compagni:

“Ieri ho conosciuto una ragazza veramente gnocca in discoteca!”

I compagni: “Ma va'”

“La invito a casa mia,le offro una cosa da bere e comincio a baciarla”


“lei mi fa: “Spogliami!””

“Nooooo!” Rispondo io.

“Al che io la sollevo e la faccio sedere sulla tastiera del mio nuovo pc e…”

I compagni: “Hai un pc nuovo?Figata!Che processore?”


Marco: Usciamo insieme?

Maria: Se compili correttamente il form


Giulia: Siamo stati promossi!

Alessandro: YAHOO!


Silvia: Ho smesso con la chat.

A forza di cmabiare nick per conoscere gente una sera ho finito per invitare a cena me stessa!


Antonio: Abbiamo un pc,un telefono fisso e due cellulari…

Maria: E niente da dirci..:(


Giulio: Mi hai tradito con tutti!

Antonella: Non è colpa mia…era una community!:)


Queste battute sono tratte dal diario smemoranda 2008,le ho fedelmente ricopiate e leggermente modificate/adattate.

Un pannello di amministrazione senza database per i nostri script


Ciao a tutti ragazzi,

chiediamoci oggi..cos’è che rende molti dei nostri script “diversi” dai famosi Script o addirittura dai famosi cms?

Una diversità fondamentale è l’interfaccia amministrativa

Uno script al 50 % ha successo grazie ad un area o una pagina di amministrazione,che dà la possibilità di Gestire i contenuti,le preferenze e le impostazioni comadamente online e dal qualsiasi computer abbia una connessione al World Wide Web.

Oggi vedremo insieme come creare un pannello di amministrazione,semplice ma efficace per uno script che non utilizza(per qualsivoglia motivo) un database mysql.


Innanzitutto come ogni pannello di amministrazione che si rispetti deve essere “ristretto”,cioè deve essere anche un area privata il cui  solo chi conosce la password(amministratore) può loggarsi ed effettuare l’accesso per gestire il propio sito.
Creaiamo dunque una pagina di nome “index.php
E nella sorgente incolliamo questo codice html:
   <h3><font color=”white”><span class=”ds3″><img class=”dsR1″ src=”logo.png” alt=”” border=”0″></span></font></h3>
   <h3>Benvenuto nel pannello di amministrazione del tuo sito.</h3>
   <h3>Inserisci username e password per identificarti.</h3>
   <form method=”post” action=”login.php”>
    <div align=”center”>
     <p><span class=”Stile1″>Username</span><font color=”white”>: <input type=”text” name=”username” size=”20″> </font></p>
     <p><span class=”Stile1″>Password</span><font color=”white”>:</font> <input type=”password” name=”password” size=”20″></p>
     <p><input type=”submit” value=”Login”> <input type=”reset” value=”Annulla”></p>
Questo codice è “la parte fisica del form per effettuare il login”,ovviamente potete modificare il tutto,scrivere altro e sopratutto vi conviene creare una grafica.
Ora creiamo la pagina login.php
Ecco qui il codice php da copiare e incollare nella sorgente:
require “config.php”;
   $username = $_POST[“username”];
    $password = $_POST[“password”];
    if ($username == $user && $password == $pass)
        setcookie(“login”, “OK”, time() + 6000);
        print “Login effettuato con successo.Per andare al pannello di amministrazione clicca <a href=’admin.php’>qui”;
    else //Else in phpniamo significa altrimenti 🙂
        print ”
        Accesso negato!<p></p>
        <a href=’index.php’>Riprova”;
Il codice sovrastante è “la parte della programmazione” del nostro accesso,
possiamo notare come,per prima cosa implementa la pagina config.php(pagina contenente i dati username e password),per seconda cosa vediamo che utilizza la funzione if(se username e password immessi nel form sono rispettivamente uguali a username e password definiti nel config.php,esegui la funzione setcookie,altrimenti “Accesso negato). 
Ora creiamo la pagina config.php
Ecco il codice
Questa pagina contiene i dati per loggarci alla nostra area di amministrazione,come vedete username e password risiederanno su una pagina web,potete settare le variabili a vostro piacimento(in linguaggio semplificato: potete modificare username e password come vi pare e piace).
Ora creiamo la vera e propia amministrazione.
Creiamo una pagina di nome admin.php
require “config.php”;
    if ($_COOKIE[“login”] == “OK”) //Se con i cookie(login) è tutto apposto(OK)
    //Visualizzo questo
         echo “<head>
               <title>Ammininistrazione </title>
//Qui sotto c’è la parte fisica del modulo per modificare online le variabili
  . ”  <form id=\”amministrazione\” action=\”admin_process.php\” method=\”post\” name=\”amministrazione\”>”
  . ”   <div align=\”center\”>”
  . ”    Username : <input type=\”text\” name=\”username\” value=\”$username\” size=\”24\” /><br />”
  . ”    Password: <input type=\”text\” name=\”password\” value=\”$password\” size=\”24\” /><br />”
  . ”    <br />”
  . ”    <input type=\”submit\” name=\”setup\” value=\”Salva Modifiche\” /><br />”
  . ”   </div>”
  . ”  </form>”
  . ”  ”
    else //Altrimenti
 echo “L’username e/o la password sono errati!”
//Visualizzo questo messaggio
Questa pagina contiene il modulo per modificare le impostazioni del sito(in questo caso username e password ONLINE)
Ora creiamo la pagina admin_process.php
//Eliminiamo il file config.php
//Definiamo le variabili da inserire nel file
$t_user=”\$user = \”$_POST[username]\”;”;
$t_pass= “\$pass = \”$_POST[password]\”;”;
$msg=$chmodmsg_error; //EVentuale errore
//Altrimenti è tutto apposto(Apriamo/Creiamo il file)
if($datei){ //SE la funzione fopen funge:
$save=fputs($datei,”$begin\n$t_user\n$t_pass\n$end\n”); //Usiamo fputs richiamando le variabili prima definite
if($save){ //SE riesce a salvare il file che abbiamo cancellato e poi ricreato:
fclose($datei); //Chiude il file
echo “Username e Password modificati con successo”;
 <div align=”center”>
  <input type=”button” value=”Indietro” onClick=”javascript:history.back()” name=”button”></div>
Abbiamo appena inserito la “parte della programmazione” del nostro script amministrativo,credo sia commentata abbastanza.
Il giochetto è fatto ragazzi,ora vi basta accedere al pannello di amministrazione del vostro script dalla pagina index.php inserendo i dati(username:matteoiamma,password:iammarrone),una volta loggati cambiate la password e l’username comodamente ONLINE.
Ovviamente questo è un esempio,potete  utilizzare questa “tecnica”,adattando questo script al vostro script(modificando le variabili) e come online modificate username e password d’accesso cosi’ con un pò di conoscenze potete modificare anche titoli,permessi,scritte del vostro script,preferenze..ecc..
Questo articolo è stato scritto da matteoiamma,
se volete inserirlo nel vostro sito potete inserirlo tranquillamente l’importante è che sotto ci mettete questo codice:
<a href=”http://www.matteoiammarrone.com/public/blog” target=”_blank”>Matteoiamma Community Blog</a>
Apparirà questa scritta: