Seite 1 von 3

Daten aus externer DB in Forum einbinden 2.0

Verfasst: 26.09.2007 16:22
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 ...

Verfasst: 26.09.2007 16:25
von gn#36
Verlinke doch mal das ganze Skript.

Vor allem die Positionierung der Schleife ist da natürlich sehr wichtig.

Verfasst: 26.09.2007 17:06
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.

Verfasst: 26.09.2007 17:39
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.

Verfasst: 26.09.2007 20:16
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.

Verfasst: 26.09.2007 23:28
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.

Verfasst: 26.09.2007 23:35
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.

Verfasst: 27.09.2007 00:28
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: .

Verfasst: 27.09.2007 00:40
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); 
}
?>

Verfasst: 27.09.2007 01:49
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.