Seite 1 von 2

Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 12:33
von eXestend
Hey Leute, ich habe mal wieder ne Frage, Ich hoffe es nervt nicht ;)

Viele fragen ja, wie sie in Ihre Seite Daten vom phpbb intigrieren, aber interessant wäre auch der andere Weg. also wie bekomme ich Daten einer anderern DB ins Forum, sodass diese überall im phpbb3 verfügbar sind.

LG

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 15:34
von mad-manne
Verstehe ich das richtig ... es geht nicht um das Konvertieren eines anderen Forensystems nach phpBB sondern um die Integration anderer Informationen(welche?) in ein bestehendes phpBB-Forum ??

Falls das zutrifft solltest du mehr Infos liefern, damit wir dir weiterhelfen können :roll:
Siehe dazu evtl. auch KB:programmierfragen

Mir fallen dazu schonmal folgende Fragen ein:
  • Sollen bei (bestimmten) Themen / Beiträgen zusätzliche Infos aus zusätzlichen Tabellen ausgelesen und angezeigt werden?
  • Sollen zusätzlichen Infos in den Benutzerprofilen angezeigt werden?
  • Sollen "eigene" Seiten entstehen, auf denen diese zusätzlichen Infos angezeigt werden?
  • Sollen die Informationen nur bestimmten Benutzern / Gruppen angezeigt werden ?
Du siehst ... Fragen über Fragen :D

Gruss,
Manne.

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 16:12
von eXestend
Ich habe eine Template-Datei angelegt bzw. eine Seite, eine lang und eine Template file, also ne eigene Seite

Da sollen ausgaben einer Datenbank, die auf dem gleichen Server liegt.

Also Datenbank A hat Informationen wie:
Schuhgröße -------------------------- > 100
Haarfarbe --------------------------- > Blau-Grün
Lieblingsessen ---------------------- > Backstein
Gold --------------------------------- > 100.000.000.000.000

Dann gibt es eben Objekte wie: Schuhschrank, Wohnung und Auto

etc.

Diese Informationen möchte ich im PHPbb 3.0.11 auslesen und ausgeben.

Die Daten der Datenbank A sollen überall im phpBB erreichbar sein. z.B. Soll die Schuhgröße immer unter dem Avatar stehen,also bei jedem Beitrag etc.

Lieblingsessen, soll immer in die Signatur.

Die Objekte sind ja voll mit Attributen und Eigenschaften. Also der Schuhschrank hat derzeit 154.486.245 Schuhe.
Der Link zum Schuhschrank soll in die Header File als Link, aber die Daten sollen in einer Templatedatei im Forum ausgegeben werden.

Klicke ich also auf der Webseite "Dubioses", welche zur Datenbank A gehört auf einen Link, öffnet sich dieser normal.

Diese Inhalte möchte ich in Templatedateien im PHPbb ausgeben lassen.

Ich möchte es ja soweit es geht auch allein versuchen, wobei mir durchaus bewusst ist, das dies keine kleine Sache ist, die man mal eben machen. Nur der anfang, also die Verbindung von Datenbank A im phpbb 3 aufzubauen ist erstmal wichtig, das ich überhaupt erstmal schauen kann in wie fern es für mich realisierbar ist.

Ich hoffe, das war halbwegs vernünftig erklärt :p

LG

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 18:06
von Miriam
Wieso erstellst Du nicht die weiteren Tabellen anstatt in einer anderen Datenbank in der von phpBB3? Dann folgst Du der Terminologie des phpBB3 und deklarierst die Tabellen in der includes/constants.php und gut is'.
Du kannst dann immer noch mit anderen Scripten auf diese DB zugreifen und Daten ändern / anpassen.

Ansonsten brauchst Du zwei Datenbankverbindungen. Sind die Datenbanken wenigstens auf dem gleichen Server?

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 18:20
von eXestend
Ja, die Datenbanken sind auf dem gleichen Server. Es geht ja nicht um feste Werte, die ich ins phpBB intigrieren möchte. Die Datenbank A ist eigenständig und die Werte werden verändert. Die 2. Datenbank ist ein Browsergame, weswegen ich halt nicht die Tabellen übernehmen kann, da es 1. hunderte sind und 2. ja bedeuten würde das das Spiel neu geschrieben werden müsste.

Ich will halt "nur" :D mir im laufe der Entwicklung des Boards die nötigen Informationen intigrieren die ich brauche :)

Der Plan: Das Spiel, zumindest Ausgaben in das forum intigrieren und das Forum ins Spiel intigrieren, da man dann für das Posten oder Aktiv sein z.B. ingame automatisiert Boni erhalten kann etc.

Dazu ist aber helt die 2 Wege Verbindung nötig. Von DB A zu DB B und von DB B zu DB A


LG

ps: Die Boardzeit stimmt nicht so recht, oder ?

Bei euch ist es 19:20 statt 18:20

LG

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 18:39
von Miriam
Du kannst doch aber die Tabellen in ein und derselben DB haben. Das sollte kein Problem sein.
Dann hast Du die Problematik der zwei Verbindungen schon erschlagen.

Du nennst die von phpBB3 mit Präfix dann eben phpbb_ und die des Spiels game_ dann gibst Du noch ein zweites Präfix in der config.php an. Meinetwegen so:

Code: Alles auswählen

$table_prefix = 'phpbb_';
$table_prefix_game = 'game_'; 
Oder lasse es frei, wenn diese kein Präfix haben.

Dann definierst Du die Tabellen in der includes/constants.php und zwar hier:

Code: Alles auswählen

// Additional tables   
Und danch geht es bspw. so weiter:

Code: Alles auswählen

define('GAME_INVENTORY_TABLE',        $table_prefix_game . 'inventory'); 
Nun kannst Du die Daten so ohne weiteres auslesen und die Tabellen für Abfragen mittels JOIN verbinden und alles in das phpBB3-User-Objekt rein stopfen. (Vorausgesetzt, Du hast genug Speicher zugeordnet bekommen.)

Mache also ein Backup Deiner phpBB3 Datenbank und spiele dieses in die Game-DB ein; passe die Daten in der config.php des phpBB3 an... fertig.

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 19:28
von eXestend
Cool, ich schau mal ob es geht bzw. das den Spielbetrieb nicht gefährden würde.

Interessant wäre ja dabei, wie ich mit dem Join die Verbindung aufbaue. Gibt da da im Wiki eine Beispielverbindung ?

ps:
Wenn es nicht klappt, auch wegen der anderen Admins, muss ich leider trotzdem nochmal auf die 2. Verbindung zurück greifen.

LG

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 19:38
von Miriam
Das klappt...

Join zwischen Tabellen sollte wenn phpBB3 konform in dieser Art aufgebaut werden:

Code: Alles auswählen

$sql_array = array(
    'SELECT'    => 'f.*, ft.mark_time',

    'FROM'      => array(
        FORUMS_WATCH_TABLE  => 'fw',
        FORUMS_TABLE        => 'f'
    ),

    'LEFT_JOIN' => array(
        array(
            'FROM'  => array(FORUMS_TRACK_TABLE => 'ft'),
            'ON'    => 'ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id'
        )
    ),

    'WHERE'     => 'fw.user_id = ' . $user->data['user_id'] . '
        AND f.forum_id = fw.forum_id',

    'ORDER_BY'  => 'left_id'
);

$sql = $db->sql_build_query('SELECT', $sql_array);

// now run the query...
$result = $db->sql_query($sql);
Siehe hier: Klick

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 28.11.2012 20:24
von BNa
eXestend hat geschrieben:ps: Die Boardzeit stimmt nicht so recht, oder ?

Bei euch ist es 19:20 statt 18:20
Deine Userzeit stimmt nicht > UCP > Sommerzeit > Nein

Re: Daten aus externer DB im Forum anzeigen

Verfasst: 03.12.2012 08:54
von eXestend
Also es geht leider nicht anders, es muss so funktionieren, das eine Verbindung zu dieser DB aufgebaut werden muss. Extern.

Das Problem von oben besteht also noch. Es muss eine Verbindung zu einer anderen DB aufgebaut werden, die auf dem gleichen Server liegt um die Daten da dem gesamten Forum zur Verfügung zu stellen.

Wäre es in dieser Art möglich, das ins phpbb3 zu integrieren:

Code: Alles auswählen

$db = mysql_connect('localhost', 'user', 'password'); 
mysql_select_db('my_database', $db); 
mysql_query('SELECT * FROM `table`', $db); 
mysql_close($db); 
Es ist ja an und für sich kein direkter externe Zugriff auf die DB. Sie liegt ja auf dem gleichen Server. statt die db "Forum" soll halt noch die DB "Spiel" angesprochen werden.

Aber es klingt wohl wieder leichter wie es am Ende ist ;) ^^
Ich hoffe da hat jemand noch etwas im Petto.
LG

Habe Folgende Prinzipielle Verbindung aufgebaut, indem ich im Forenordner eine entsprechende File angelegt habe:

Code: Alles auswählen

<?php 
error_reporting(E_ALL);

define ( 'MYSQL_HOST',      'localhost' );
define ( 'MYSQL_BENUTZER',  'BENUTZER' );
define ( 'MYSQL_KENNWORT',  'KENNWORT' );
define ( 'MYSQL_DATENBANK_A', 'dba_name' );
define ( 'MYSQL_DATENBANK_B', 'dbb_name' );
 
$db_link = mysql_connect (MYSQL_HOST, 
                          MYSQL_BENUTZER, 
                          MYSQL_KENNWORT);
 
if ( $db_link )
{
    echo 'Verbindung erfolgreich: ';
    echo $db_link;
}
else
{
    die('keine Verbindung möglich: ' . mysql_error());
}


// ######################################################################### //
//                                    DB 1                                     //
// ######################################################################### //
$db_sel = mysql_select_db( MYSQL_DATENBANK_A )
   or die("Auswahl der Datenbank fehlgeschlagen");
 
$sql = "SELECT * FROM phpbb_users";
 
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}
 
echo '<table border="1">';
echo "<tr>";
echo "<td>Benutzer-ID_phpbb</td>";
echo "<tr>";
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";
  echo "<td>". $zeile['user_id'] . "</td>";
  echo "</tr>";
}
echo "</table>";
 
mysql_free_result( $db_erg );

// ######################################################################### //
//                                    DB 2                                     //
// ######################################################################### //
$db_sel = mysql_select_db( MYSQL_DATENBANK_B )
   or die("Auswahl der Datenbank fehlgeschlagen");
 
$sql = "SELECT * FROM users";
 
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}
 
echo '<table border="1">';
echo "<tr>";
echo "<td>Benutzer-ID_gigra</td>";
echo "<tr>";
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";
  echo "<td>". $zeile['id'] . "</td>";
  echo "</tr>";
}
echo "</table>";
 
mysql_free_result( $db_erg );



// ######################################################################### //
//                                Close SQL                                     //
// ######################################################################### //
mysql_close($db_link );

?>
Das müsste ja jetzt in das PHPBB mit intigriert werden, das man überall darauf zugreifen kann oder ?

Und: Wie könnte ich in diesemfall z.B. in der functions.php die entsprechende db ansprechen ?

Wäre schön, wenn ihr mir ein Beispiel geben könntet, wie ich z.B. in einer eigenen Templatefile (also lala.php, lala.html, lala_lang.php - das Template ist schon da) eine Verbindung auf zu bauen und denn aus der 2. Datenbank alle User aus zu lesen, die daten liegen in db_b, USERS


LG