Seite 1 von 2

Threads per PHP Script erstellen

Verfasst: 27.12.2006 13:34
von ferret
Hallo Leute, ich hab mich grade angemeldet in der Hoffnung, dass jemand mir helfen kann.

Ich habe bereits bei google und hier nach einer Lösung gesicht, aber vermutlich fehlen mir die richtigen Suchbegriffe.

Folgende Situation:
Auf einer Homepage werden News veröffentlicht.
Die Homepage hat auch ein phpBB Forum.
Da soll nun in einem Bereich "News" für jede auf der Homepage eingestellte News automatisch ein Thread zum Thema erstellt werden.

Ich habe mir die functions_post.php angeschaut aber ich bin weder php- noch sql-Profi.

Inzwischen schaffe ich es dass in der Übersicht der neue Thread angezeigt wird, der Thread ist aber leer, was er nicht sein sollte.

Zur Sache :)

Ich erstelle Variablen für den User und den Board-Bereich:

Code: Alles auswählen

	$forum_id = "1";
	$poster_id = "4";
	$ueberschrift = "Überschrift der News";
	$text = "Inhalt der News";
Ich füge ein neues Topic ein und lasse die ID auslesen

Code: Alles auswählen

	$sql  = "INSERT INTO phpBB_topics (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$ueberschrift', '$poster_id', ".time().", '$forum_id', '0', '0', '0')";
		$result = mysql_query($sql);

		$sql = "SELECT MAX(topic_id) FROM phpBB_topics";
		$result = mysql_query($sql);
		while($row = mysql_fetch_row($result)) {
			$topic_id = $row[0];
		}
Der Post wird eingetragen und die ID ausgelesen

Code: Alles auswählen

		$sql = "INSERT INTO phpBB_posts (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ('$topic_id', '$forum_id', '$poster_id', '', ".time().", '', '1', '0', '1', '0')";
		$result = mysql_query($sql);

		$sql = "SELECT MAX(post_id) FROM phpBB_posts";
		$result = mysql_query($sql);
		while($row = mysql_fetch_row($result)) {
			$post_id = $row[0];
		}
...und schließlich der Post-Text

Code: Alles auswählen

		$sql = "INSERT INTO phpBB_posts_text (post_id, post_subject, bbcode_uid, post_text) VALUES ('$post_id', '$ueberschrift', '0', '$text')";
		$result = mysql_query($sql);
Soweit ich gesehen habe muss noch etwas in der forums-DB geändert werden:

Code: Alles auswählen

$sql = "UPDATE phpBB_forums SET forum_last_post_id = $post_id, forum_topics = forum_topics+1 where forum_id = $forum_id";
Ganz offensichtlich reicht das so nicht, evtl ist die Vorgehensweise auch nicht ganz korrekt. Wer kennt sich mit dem phpBB Code aus und kann mir sagen was ich noch machen muss?

Gibt es irgendwo vielleicht schon eine Anleitung oder ein Script?

Vielen Dank schonmal!
ferret

Verfasst: 27.12.2006 14:12
von ferret
-ich glaub ich habs....

Verfasst: 27.12.2006 14:16
von musashi
Kannst es ja mal veröffentlichen wenn es funktioniert - ist bestimmt nicht ganz uninteressant für viele phpBB Benutzer.

Verfasst: 27.12.2006 15:04
von FCM
Stefane hat gerade so ein Skript erstellt. Man kann beliebigen Text mit Titel auf einer Seite eintragen und dieses wird dann in ein bestimmtest Forum eingetragen.

Verfasst: 27.12.2006 15:48
von gn#36
Ich dachte ursprünglich, dass für derartige Dinge die funktionen in der functions_post.php zustündig sind. Als ich diese allerdings verwendet habe waren die Datenbankeinträge interessanterweise fehlerhaft, es fehlte eine SQL Abfrage mit der Thema und Post verknüpft wurdn so dass das gesamte Thema als Ergebnis nirgendwo erschien. Warum das so ist und vor allem warum es in der posting.php funktioniert ist mir schleierhaft, denn da werden ebenfalls nur diese Funktionen verwendet. Naja, ich habe mir darauf hin eben auch selbst ein kleines Skript gebastelt das Termine aus der Homepage in das Forum als Thema einbaut.

Code: Alles auswählen

function add_topic_bot($forum_id,$subject,$message)
{
	global $db;
	$mode = 'newtopic';
	//USER:
	$user_id = -2;
	$post_username = '';
	$topic_id = $post_id = $poll_id = 0;
	$current_time = time();
	$topic_type =  POST_NORMAL;
	$error_msg = '';
	//PREPARE POST:
	$subject = htmlspecialchars(trim($subject));
	$bbcode_uid =  make_bbcode_uid() ;
	$message = prepare_message(trim($message), 0, 1, 1, $bbcode_uid);
	if($error_msg != '')
	{
		die($error_msg);
	}
	$post_message = str_replace("\'", "''", $message);
	$post_subject = str_replace("\'", "''", $subject);
	//SUBMIT POST:
	$topic_vote = 0;
	$sql  =  "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$post_subject', " . $user_id . ", $current_time, $forum_id, " . TOPIC_UNLOCKED . ", $topic_type, 0)" ;
	if (!$db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
	}
	$topic_id = $db->sql_nextid();
	$sql =  "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $user_id . ", '$post_username', $current_time, '$user_ip', 1, 0, 1, 0)";
	if (!$db->sql_query($sql, BEGIN_TRANSACTION))
	{
		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
	}
	$post_id = $db->sql_nextid();
	$sql =  "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" ;
	if (!$db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
	}
	$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);
	}
	add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject));
	update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
}
Selbstverständlich muss das noch angepasst werden damit die gewünschten Inhalte erscheinen (bei mir bekommt die Funktion noch ein paar Parameter mehr übergeben und ist auch mehr als doppelt so lang, der Rest ist aber die Kommunikation mit der Website in einer anderen DB und die Eintragung in einen speziellen Mod, die ja nichts mit dem Thema zu tun haben).
Ich habe den Code soweit zusammengekürzt wie möglich, ich hoffe er ist nicht zu lang. Damit das ganze Funktionsfähig ist muss in Zeile 6 eine gültige user_id angegeben werden (oder man legt einen Geist an der die User_id -2 hat). Dessen Name wird dann verwendet bei den Posts. Man kann natürlich genausogut die ID eines Admin oder Users angeben. Dieser erhält dann sämtliche Rechte am Post und Topic die er in dem Forum normalerweise auch hat.

Verfasst: 27.12.2006 16:09
von Pyramide
Für solche Sachen empfiehlt sich die Verwendung von functions_insert_post.

Verfasst: 27.12.2006 16:15
von gn#36
Ich sollte mir angewöhnen zu suchen bevor ich selbst ein Skript erstelle... :-?

Verfasst: 27.12.2006 16:18
von Stefane
Jo, also ich hab gerade so was erstellt.
Dank Pyramide war das auch gar nicht mehr so schwer...er hat mir auch die funcions_insert_post emphohlen.
Die ist in dieser Sache echt Gold wert.
Eine PHP-Datei, eine tpl-Datei und ein Post kann per Formular gepostet werden.

Verfasst: 29.12.2006 08:45
von ferret
Das Script das ich oben gepostet habe funktioniert im Übrigen auch sehr gut.
Ist halt ein sehr einfaches Script, welches einfach nur die Überschrift und den Textinhalt als neuen Thread für einen festgelegten User postet.

Für meine Zwecke völlig ausreichend.

Die functions_insert_post.php werde ich mir trotzdem mal anschauen.
Der Vorteil bei meinem Script ist, dass keinerlei Eingaben erforderlich sind.
Es läuft sozusagen komplett im Hintergrund ab. Keine Ahnunh ob das bei der functions_insert_post.php auch so ist.

Wer das Ergebnis sehen will: http://www.infokrieg.tv
Bei jeder News (seit gestern) steht ein Link zum entsprechenden Forenthread.
Die sind automatisch generiert worden....

Verfasst: 18.07.2008 23:48
von Samson1964
Der in diesem Thread genannte Link zu functions_insert_post ist tot. Wo bekomme ich die Datei jetzt?