Daten aus externer DB in Forum einbinden 2.0

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.
RubberDuck
Mitglied
Beiträge: 460
Registriert: 09.07.2003 16:52
Wohnort: ROW
Kontaktdaten:

Daten aus externer DB in Forum einbinden 2.0

Beitrag von RubberDuck »

Ich bräuchte mal Hilfe bei folgendem Szenario:

In einer EXTERNEN DB befinden sich Daten, welche als Posting in ein Forum sollen. Bisher habe ich folgendes:

Code: Alles auswählen

$subject = $row["txsa"]." (".$row["txsb"].")";
$message = "Name:	[b]".$row["txsa"]."[/b] (".$row["txsb"].")";
$phpbb_root_path='/forum/';
define('IN_PHPBB', true);
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/functions_post.'.$phpEx);
$forum_id="37";
$bbcode_on=1;
$html_on=0;
$smilies_on=1;
$topic_type='0';
$attach_sig='0';
$mode='newtopic';
$userdata = get_userdata(30);
init_userprefs($userdata);
$username = ( $userdata['session_logged_in'] ) ? $userdata['username'] : '';
prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length);
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length);
update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
Das ganze funktioniert auch so ganz gut. Allerdings immer nur für einen Datensatz. Wenn ich jetzt aber mehrere Datensätze in einem Rutsch eingetragen haben will, gibt es Probleme.

Bisher habe ich das in eine WHILE Schleife eingebunden, dann kommt aber folgende Fehlermeldung:
Error in posting

DEBUG MODE

SQL Error : 1196 Warning: Some non-transactional changed tables couldn't be rolled back

UPDATE phpbb_users SET user_posts = user_posts + 1 WHERE user_id =

Line : 445
File : functions_post.php
Weiss jemand Rat, oder gibt es sowas evtl. in Form eines MODs?

Schonmal Danke für die Mühe ...
VARAN-eV.de - V.A.R.A.N. e.V. - Verein für Artenschutz der Reptilien- und Amphibienhalter Norddeutschlands
Terra-Nord.de - Der Terraristik Stammtisch im Norden
ReptilienManager.de - Die Online Reptilien Verwaltung
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Verlinke doch mal das ganze Skript.

Vor allem die Positionierung der Schleife ist da natürlich sehr wichtig.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
RubberDuck
Mitglied
Beiträge: 460
Registriert: 09.07.2003 16:52
Wohnort: ROW
Kontaktdaten:

Beitrag von RubberDuck »

gn#36 hat geschrieben:Verlinke doch mal das ganze Skript.

Vor allem die Positionierung der Schleife ist da natürlich sehr wichtig.
Das ganze Script sieht nicht viel anders aus beim Testen :)

Code: Alles auswählen

while ($row = mysql_fetch_array($result)) {
	$subject = $row["txsa"]." (".$row["txsb"].")"; 
	$message = "Name:   [b]".$row["txsa"]."[/b] (".$row["txsb"].")"; 
	$phpbb_root_path='/forum/'; 
	define('IN_PHPBB', true); 
	include($phpbb_root_path . 'extension.inc'); 
	include($phpbb_root_path . 'common.'.$phpEx); 
	include($phpbb_root_path . 'includes/bbcode.'.$phpEx); 
	include($phpbb_root_path . 'includes/functions_post.'.$phpEx); 
	$forum_id="37"; 
	$bbcode_on=1; 
	$html_on=0; 
	$smilies_on=1; 
	$topic_type='0'; 
	$attach_sig='0'; 
	$mode='newtopic'; 
	$userdata = get_userdata(30); 
	init_userprefs($userdata); 
	$username = ( $userdata['session_logged_in'] ) ? $userdata['username'] : ''; 
	prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length); 
	submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length); 
	update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
}
Davor werden halt nur die Datenbankinhalte eingelesen.

Das mit der Schleife habe ich mir schon gedacht, aber wenn ich dann nur das

Code: Alles auswählen

	prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length); 
	submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length); 
	update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
in die Schleife setzte dann passiert garnichts mehr.
VARAN-eV.de - V.A.R.A.N. e.V. - Verein für Artenschutz der Reptilien- und Amphibienhalter Norddeutschlands
Terra-Nord.de - Der Terraristik Stammtisch im Norden
ReptilienManager.de - Die Online Reptilien Verwaltung
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Alles in der Schleife ist keine gute Idee.

Es sollte reichen die Änderungen in die Schleife zu packen.

Was heißt "passiert gar nichts mehr"? Hast du in die Datenbank geschaut, ob die Einträge drin sind? Ich hatte bei der alleinigen Verwendung der Funktion submit_post einen Fehler in der Datenbank und musste das ganze mit einem nachträglichen SQL Befehl beheben:

Code: Alles auswählen

$sql = "UPDATE " . TOPICS_TABLE . " SET topic_first_post_id = $post_id, topic_last_post_id = $post_id WHERE topic_id = $topic_id";
	if (!$db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
	}
Du musst dafür natürlich die topic_id und post_id des neuen Eintrags in die Variablen eintragen. Das ist die Variante für ein neues Thema, bei einer Antwort müsstest du natürlich nur die last_post_id anpassen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
RubberDuck
Mitglied
Beiträge: 460
Registriert: 09.07.2003 16:52
Wohnort: ROW
Kontaktdaten:

Beitrag von RubberDuck »

Also was ich meinte war, wenn ich nur das

Code: Alles auswählen

prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length); 
   submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length); 
   update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
in die Schleife packe, dann führt er keine der Funktionen aus, es steht auch nichts in den Tabellen vom phpbb.

Habe ich alles in der Schleife drin macht er nur aus dem ersten Datensatz in der Datenbank ein neues Posting und steigt dann mit der obigen Fehlermeldung aus.
VARAN-eV.de - V.A.R.A.N. e.V. - Verein für Artenschutz der Reptilien- und Amphibienhalter Norddeutschlands
Terra-Nord.de - Der Terraristik Stammtisch im Norden
ReptilienManager.de - Die Online Reptilien Verwaltung
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

KB:datei
Verlinke doch mal bitte die ganze Datei, vielleicht sitzt das Problem ja auch an einer ganz anderen Stelle. Alles in der Schleife zu haben ist in jedem Fall nicht richtig.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
RubberDuck
Mitglied
Beiträge: 460
Registriert: 09.07.2003 16:52
Wohnort: ROW
Kontaktdaten:

Beitrag von RubberDuck »

Das ist das ganze Script. Vor der Schleife wird lediglich noch die andere DB geöffnet und die Daten werden in $result gelesen. Diese Daten sind alle da.

Soweit klappt es ja auch, allerdings nur für den ersten Datensatz und auch nur wenn ich alles in der Schleife habe.
VARAN-eV.de - V.A.R.A.N. e.V. - Verein für Artenschutz der Reptilien- und Amphibienhalter Norddeutschlands
Terra-Nord.de - Der Terraristik Stammtisch im Norden
ReptilienManager.de - Die Online Reptilien Verwaltung
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

RubberDuck hat geschrieben:Das ist das ganze Script. Vor der Schleife wird lediglich noch
Also ist es ja doch nicht das ganze Script :roll: .
KB:knigge
RubberDuck
Mitglied
Beiträge: 460
Registriert: 09.07.2003 16:52
Wohnort: ROW
Kontaktdaten:

Beitrag von RubberDuck »

So, hier das ganze Script:

Code: Alles auswählen

<?
include('vars.php');
$opendb = mysql_connect($Host,$user,$pwd);
$result = mysql_db_query($mydbName,"SELECT * FROM txs WHERE status = 1");
$closedb = mysql_close($opendb);
while ($row = mysql_fetch_array($result)) { 
   $subject = $row["txsa"]." (".$row["txsb"].")"; 
   $message = "Name:   [b]".$row["txsa"]."[/b] (".$row["txsb"].")"; 
   $phpbb_root_path='/forum/'; 
   define('IN_PHPBB', true); 
   include($phpbb_root_path . 'extension.inc'); 
   include($phpbb_root_path . 'common.'.$phpEx); 
   include($phpbb_root_path . 'includes/bbcode.'.$phpEx); 
   include($phpbb_root_path . 'includes/functions_post.'.$phpEx); 
   $forum_id="37"; 
   $bbcode_on=1; 
   $html_on=0; 
   $smilies_on=1; 
   $topic_type='0'; 
   $attach_sig='0'; 
   $mode='newtopic'; 
   $userdata = get_userdata(30); 
   init_userprefs($userdata); 
   $username = ( $userdata['session_logged_in'] ) ? $userdata['username'] : ''; 
   prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length); 
   submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length); 
   update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id); 
}
?>
VARAN-eV.de - V.A.R.A.N. e.V. - Verein für Artenschutz der Reptilien- und Amphibienhalter Norddeutschlands
Terra-Nord.de - Der Terraristik Stammtisch im Norden
ReptilienManager.de - Die Online Reptilien Verwaltung
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wenn du die Verbindung zur Datenbank bereits schließt, bevor du mysql_fetch_array aufrufst, kann das natürlich nicht funktionieren. Ausserdem sind die Zeilen von $phpbb_root_path bis include(functions_post) ja immer noch innerhalb der while-Schleife - das funktioniert genauso nicht.
KB:knigge
Antworten

Zurück zu „Coding & Technik“