Threads per PHP Script erstellen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB2 oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
ferret
Mitglied
Beiträge: 10
Registriert: 27.12.2006 13:15

Threads per PHP Script erstellen

Beitragvon ferret » 27.12.2006 13:34

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

ferret
Mitglied
Beiträge: 10
Registriert: 27.12.2006 13:15

Beitragvon ferret » 27.12.2006 14:12

-ich glaub ich habs....

musashi
Mitglied
Beiträge: 1465
Registriert: 04.12.2003 12:50
Wohnort: Wien
Kontaktdaten:

Beitragvon musashi » 27.12.2006 14:16

Kannst es ja mal veröffentlichen wenn es funktioniert - ist bestimmt nicht ganz uninteressant für viele phpBB Benutzer.
www.dsaforum.de - DAS DSA Fanforum

Benutzeravatar
FCM
Mitglied
Beiträge: 1863
Registriert: 03.05.2006 14:47
Kontaktdaten:

Beitragvon FCM » 27.12.2006 15:04

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.

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9127
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitragvon gn#36 » 27.12.2006 15:48

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.
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.

Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12735
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitragvon Pyramide » 27.12.2006 16:09

Für solche Sachen empfiehlt sich die Verwendung von functions_insert_post.

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9127
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitragvon gn#36 » 27.12.2006 16:15

Ich sollte mir angewöhnen zu suchen bevor ich selbst ein Skript erstelle... :-?
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.

Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitragvon Stefane » 27.12.2006 16:18

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.

ferret
Mitglied
Beiträge: 10
Registriert: 27.12.2006 13:15

Beitragvon ferret » 29.12.2006 08:45

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....

Samson1964
Mitglied
Beiträge: 4
Registriert: 18.07.2008 23:39

Beitragvon Samson1964 » 18.07.2008 23:48

Der in diesem Thread genannte Link zu functions_insert_post ist tot. Wo bekomme ich die Datei jetzt?


Zurück zu „phpBB 2.0: Mod-Bastelstube“