Forum Integration in bestehende Anwendung

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
splatterpop
Mitglied
Beiträge: 3
Registriert: 27.01.2005 10:17

Forum Integration in bestehende Anwendung

Beitrag von splatterpop »

Hallo,

ich bin neu in phpbb also bitte nicht meckern wenn die Frage schon mal gestellt wurde, hab aber über die Suche nichts finden können.

Ich habe eine bestehende Anwendung, die ich um ein Board erweitern will. Es gibt schon eine Benutzeranmeldung, ID, Sessionverwaltung etc. Was ich jetzt erreichen will ist, dass die Benutzer sich 1. nicht nochmal im Board registrieren müssen und 2. der Übergang ins Board per Link möglich ist.

Zu 1.
Ich trage alle Benutzer meiner Anwendung in die Tabelle phpbb_users ein, damit haben sie ein Profil und müssen sich nicht nochmal registrieren. Benutzername, Passwort und ID sind damit auf beiden Seiten gleich. Soweit so gut!

Zu 2.
Der Forum-Link verweist auf die normale Login-Seite in phpbb. Hier würde ich aber die Login-Form gerne umgehen und die Anmeldedaten direkt posten. Sozusagen als ob jemand gerade den Login-Button drückt.

Geht das, hat das jemand schon mal gemacht?

Danke im Voraus für Eure Antworten!
Cojote
Mitglied
Beiträge: 40
Registriert: 14.10.2004 14:44

Beitrag von Cojote »

Hi,

sowas ist natürlich möglich. Dazu würde ich die ganzen session-Funktionen gegen deine eigenen austauschen.
Von welchem System sprichst du denn da? Oder ist das was selbst programmiertes.
Die User-Tabelle würde ich vom aufbau auf alle Fälle beibehalten da sehr viele Funktionen des phpbb auf diese Tabelle zugreifen und Werte verändern.
Du könntest aber deine bisherige Tabelle so modifizieren dass sie alle Spalten der User-Tabelle des phpbb beinhaltet.

Bei meinem System bin ich eigentlich den umgekehrten Weg gegangen: Habe das Session Management des phpbb für Teile einer Website übernommen.
splatterpop
Mitglied
Beiträge: 3
Registriert: 27.01.2005 10:17

Beitrag von splatterpop »

Cojote hat geschrieben: Von welchem System sprichst du denn da? Oder ist das was selbst programmiertes.
Das ist ein selbst programmiertes System auf PHP basis.
Cojote hat geschrieben: Bei meinem System bin ich eigentlich den umgekehrten Weg gegangen: Habe das Session Management des phpbb für Teile einer Website übernommen.
Stimmt, das wäre eine Möglichkeit. Allerdings scheint mir der Aufwand etwas zu hoch zur Zeit, wie gesagt, ich bin nicht so drin in phpbb, also würde ich gerne erst den anderen Weg versuchen.

Ich stelle mir das so vor: die Benutzernamen, Passwörter und IDs sind ja schon synchronisiert durch Tabellenabgleich. Ich müsste doch nur "simulieren", dass sich jemand einloggt, also sozusagen den Request, den die Login-Form schickt, selber stricken.
shwepsi
Mitglied
Beiträge: 1697
Registriert: 02.06.2003 14:37
Wohnort: NRW - immer dem Monitorleuchten folgen...
Kontaktdaten:

Beitrag von shwepsi »

vielleicht hilft dir das weiter:
du kannst damit vielleicht an beiden Stellen einloggen, indem du die Variablen ohne die Felder automatisch an phpBB übergibst

KB:106

EDIT: allerdings müsstest du die User alle ins phpBB übertragen, da du aber mehr PHP Kenntnisse hast kannst du das sicher eher vollbringen.
Ich stelle mir das nur mit der Verschlüsselung des Passwortes kritisch vor, falls du es auch per Hash speicherst, allerdings nicht so wie phpBB
ansonsten entschlüsseln oder halt direkt übertragen

Viel Erfolg auf jeden Fall !!!
Die Weisheit verfolgte mich sekundenlang...
Aber sie überholte mich und war fortan nicht mehr gesehen !!!
splatterpop
Mitglied
Beiträge: 3
Registriert: 27.01.2005 10:17

Beitrag von splatterpop »

Es geht - hier ist die Lösung

Code: Alles auswählen

if ($_REQUEST['redirect'] == "forum")
{
  $db = mysql_connect("localhost", "...");
  mysql_select_db("...",$db);
  $sql = "select loginname, passwd from ... where id=" . $_SESSION['USERID'];
  $res_u = mysql_query($sql, $db);
  $row_u = mysql_fetch_row($res_u);
  
  // 1. den Request-String zusammenbauen:
  $data="username=" . urlencode($row_u[0]) . "&password=" . urlencode($row_u[1]) . "&redirect=1&autologin=1&login=1";
  mysql_free_result($res_u);
  mysql_close($db);

  // 2. Verbindung zum Webserver aufmachen
  $sock = fsockopen("[lokale Adresse des Webservers]", 80, $errno, $errstr, 30);
  if (!$sock) die("$errstr ($errno)\n");
  
  fwrite($sock, "POST /forum/login.php HTTP/1.0\r\n");
  fwrite($sock, "Host: www.wasauchimmer...\r\n");
  fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
  fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
  fwrite($sock, "Accept: */*\r\n");
  fwrite($sock, "\r\n");
  fwrite($sock, "$data\r\n");
  fwrite($sock, "\r\n");
  
  // 3. Antwort abholen
  $headers = "";
  while ($str = trim(fgets($sock, 4096)))
    $headers .= "$str\n";

  $body = "";
  while (!feof($sock))
    $body .= fgets($sock, 4096);
  
  fclose($sock);

  // 4. Die phpbb-Session ist jetzt da, unser Browser muss sich jetzt auf diese Session verbinden.
  // Die Sessiondaten stehen im Header
  $p1 = strpos($headers, "Location: http://");
  $p1 = strpos($headers, "?sid=", $p1);
  $p2 = strpos($headers, "\n", $p1 + 11);
  if ($p2 == 0) $p2 = strpos($headers, "\r", $p1 + 11);
  if ($p2 == 0) $p2 = strpos($headers, " ", $p1 + 11);
  
  // 5. Die Redirect-Url bringt uns zum Index mit der richtigen Session-ID
  $redirect_url = "Location: http://.../forum/index.php" . substr($headers, $p1, $p2 - $p1);
  
  ob_end_clean();
  
  // 6. Cookies löschen .. wirklich notwendig? :-? 
  setcookie("phpbb2mysql_sid", "", time()-1, "/", "...");
  setcookie("phpbb2mysql_data", "", time()-1, "/", "...");
  
  // 7. Den Redirect als Header an den Browser schicken
  header ($redirect_url);

  exit;
}
Manchmal muss man das zweimal durchführen bis die Session da ist... aber das passiert manchmal auch beim normalen Einloggen!
Daniel Weyers
Mitglied
Beiträge: 5
Registriert: 01.02.2005 22:38

Beitrag von Daniel Weyers »

Hallo zusammen!
Auch ich verzweifle grade bei einem ähnlichen Projekt. Eigentlich möchte ich "einfach nur" die Session-Variablen aus dem phpBB in Scripts benutzen, die nicht zum phpBB gehören. Aber das scheint ja nicht ganz so einfach zu sein.

Desweiteren möchte ich auch die Login-Felder außerhalb des phpBB benutzen (siehe Beitrag weiter oben von shwepsi), jedoch sollen die Felder nur erscheinen, wenn der User noch nicht angemeldet ist. Auch das ist doch bestimmt irgendwie über die Session-Variablen möglich, oder?

Ich bin euch schon jetzt für Ratschläge dankbar :D
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Daniel Weyers hat geschrieben:Aber das scheint ja nicht ganz so einfach zu sein.
Man kann es sich natürlich so kompliziert machen wie splatterpop - es geht aber auch einfacher. In deinem Fall, indem du deine Seiten nach der KB:phpbb_seite aufbaust bzw. erweiterst und dann mit if($userdata['session_logged_in']) prüfst, ob der Benutzer eingelogt ist.
KB:knigge
Daniel Weyers
Mitglied
Beiträge: 5
Registriert: 01.02.2005 22:38

Beitrag von Daniel Weyers »

Das hat mir schon mal sehr weiter geholfen, vielen Dank!
Jedoch bekomme ich jetzt folgende Meldung, wenn ich das Forum betreten will:

Fatal error: Cannot redeclare class template in /(blabla)/opnv/phpbb/includes/template.php on line 30
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Hast du irgendwelche Veränderungen an Dateien wie page_header.php oder template.php vorgenommen?
KB:knigge
Daniel Weyers
Mitglied
Beiträge: 5
Registriert: 01.02.2005 22:38

Beitrag von Daniel Weyers »

Nein, habe ich nicht. Jedoch habe ich die "Vorlage für in phpBB eingebundene Seiten" im Header meiner Page untergebracht. Dieser Header wird in alle Skripte auf der Seite eingebunden - auch im Forum.
Ich schätze also mal, dass die Klasse "template" zwei mal deklariert wird - einmal in meinem Header, wahrscheinlich über diese beiden Includes:

Code: Alles auswählen

include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx); 
- und einmal im phpBB selbst.
Jetzt ist guter Rat natürlich teuer... eigentlich muss ich ja 'nur' verhindern, dass sich die Klasse "template" zwei mal deklariert.


Ach ja: Die Page, auf der das ganze stattfindet: http://www.vy99.de/opnv
Antworten

Zurück zu „Coding & Technik“