brauche hilfe - new topic per mysql_query

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

brauche hilfe - new topic per mysql_query

Beitrag von Geoemyda »

Hallo,
ich möchte ein neues Topic für einen kleinen MOD direkt über ein mysql query erstellen.

Kann bitte man jemand kurz über den Code kucken, und mir ein paar kleine Fragen zu einzelnen Einträgen beantworten.
Auch über "Hilfe zur Selbsthilfe" wäre ich sehr dankbar (d.h. in welchem File muss ich suchen um zu sehen wie das die Forensoftware tut)

1) neues Topic erstellen, und topic-id (Auto increment) merken

Code: Alles auswählen

$sql = "INSERT INTO `phpbb_topics`
(`forum_id`, `topic_title`, `topic_poster`, `topic_time`, `topic_first_poster_name`, `topic_last_poster_id`, `topic_last_poster_name`, `topic_last_post_time`, `topic_last_view_time`)
VALUES
('23','$titel','$name ','$time','$name ','4','$name ','$time','$time')";
mysql_query($sql,$db);
$topic_id = str_replace('Resource id #','',mysql_insert_id());
2) neuen Thread erstellen, und thread-id (Auto increment) merken

Code: Alles auswählen

$sql = "INSERT INTO `phpbb_posts`
(`topic_id`, `forum_id`, `poster_id`, `poster_ip`, `post_time`, `post_subject` ,`post_text` ,`post_checksum` ,`bbcode_uid`)
VALUES
('$topic_id','23','4','$ip','$time','$titel','$text ','','')";
mysql_query($sql,$db);
$post_id = str_replace('Resource id #','',mysql_insert_id());
3) Mit gemerkter thread-id topic-Eintrag anpassen

Code: Alles auswählen

$sql = "UPDATE `phpbb_topics` SET
`topic_first_post_id`= '$post_id', `topic_last_post_id`= '$post_id'
WHERE
`topic_id` = '$topic_id'";
mysql_query($sql,$db);
4) User-Beitragszahl um eins erhöhen

Code: Alles auswählen

$sql = "UPDATE `phpbb_users`
SET `user_posts` = `user_posts`+1 WHERE `user_id` = '4'"; 
mysql_query($sql,$db);
5) Beitrag als "gepostet" markieren

Code: Alles auswählen

$sql = "INSERT INTO `phpbb_topics_posted`
(`user_id`, `topic_id`, `topic_posted`)
VALUES
('4', '$topic_id', '1')";
mysql_query($sql,$db);
6) Forum um neuen Topic erweitern

Code: Alles auswählen

$sql = "UPDATE `phpbb_forums`
SET `forum_posts` = `forum_posts`+1,
`forum_topics` = `forum_topics`+1,
`forum_topics_real` = `forum_topics_real`+1,
`forum_last_post_id` = '$forum_post_id',
`forum_last_poster_name` = '$forum_name',
`forum_last_post_time` = '$forum_time',
`forum_last_post_id` = '$forum_post_id',
`forum_last_poster_id` = '$forum_userid',
`forum_last_post_subject` = '$forum_titel'
WHERE `forum_id` = '$forum_forumid'"; 
mysql_query($sql,$db);
Es scheint zu funktionieren allerdings frage ich mich
a) ob ich doch noch etwas falsch mache
und
b) was post_checksum und bbcode_uid in der Tabelle phpbb_posts` bedeuten, bzw. wie ich die Einträge berechne ?
Scheint wohl relevant zu sein, wenn ich bbCode verwenden will (was ich will, und was derzeit noch nicht geht)

Ich fände jeden Hinweis echt klasse!

Grüße, Geoemyda
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Hallo, warum so umständlich ?

Benutze doch einfach die Funktionen die es bereits gibt.
Das hat zudem den Vorteil, das man nichts vergisst ;-)

Schau Dir mal die Datei:
includes/functions_posting.php
an:

Code: Alles auswählen

/**
* Submit Post
*/
function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $update_message = true)
Geoemyda
Mitglied
Beiträge: 52
Registriert: 01.11.2007 16:52

Beitrag von Geoemyda »

Danke für den guten Tipp (man merkt mir wohl an dass ich bei phpbb noch nicht ganz durchgestiegen bin ;-) )
Ich schau mir das mal an!

Allerdings greift die Funktion wieder auf ne Menge globaler Variablen zu, die ich mir dann mühsam aus anderen Code-Teilen zusammensammeln muss.
Geoemyda
Mitglied
Beiträge: 52
Registriert: 01.11.2007 16:52

Beitrag von Geoemyda »

Hallo,
die einzelnen phpbb-Funktionen binden wieder so viele unterschiedliche Funktionen ein, dass ich da den Überblick verliere.

Was ich habe ist ein Formular, das ausgefüllt wird, Daten in eine Datenbank (keine Datenbank des Forums) schreibt, und zusätzlich einen neuen Beitrag im Forum erstellt (oder erstellen soll) (dieser ist einem festen User zugeordnet, der nur für diesen Zweck verwendet wird).
Daher ist mein Code sehr stark entkoppelt vom Forum.

Ich habe keine Ahnung wie ich da an die passenden phpbb-Funktionen komme, und da ich bis auf den bbcode ja schon alles habe, erscheint es mir fast leichter, noch zu Fuß dieses seltsame "bbcode_uid" zu berechnen.

Bisher habe ich nur herausgefunden, dass bbcode_uid aus der Variable $message_parser->bbcode_uid eingelesen wird.
Wobei $this->bbcode_uid = substr(base_convert(unique_id(), 16, 36), 0, BBCODE_UID_LEN);

Was mich nun vor die Frage stellt, wo die Funktion unique_id() definiert ist, und wo die Konstante BBCODE_UID_LEN definiert ist.
Die hab ich jetzt trotz Suchen nicht gefunden.
Geoemyda
Mitglied
Beiträge: 52
Registriert: 01.11.2007 16:52

Beitrag von Geoemyda »

Hallo,

ich habe zwischenzeitig diesen Thread gefunden:
http://www.phpbb.de/doku/kb/bbcode_uid
und weiß nun wenigstens was bbcode_uid ist, und warum es sinnvoll ist.

Es ist ja nicht so, dass ich meine Hausaufgaben nicht machen würde ...

Nur leider scheint der bbcode_uid nicht einfach eine beliebige 8-stellige Kombination aus Kleinbuchstaben und Ziffern zu sein, denn damit funktionert bbcode leider nicht - oder es fehlt noch zusätzlich die korrekte Belegung einer anderen Tabellenspalte (ich denke mal phpbb_posts.bbcode_bitfield und eventuell auch phpbb_posts.post_checksum (wobei alte aus phpbb2 importierte Beiträge dieses Feld auch leer haben, und bbcode trotzdem funktioniert))

Kann mir nicht doch noch irgendwer weiterhelfen?
Wenn man mir erklärt, wie ich die Funktion submit_post aufrufe, lerne ich auch das gerne!
Nur greift diese Funktion auf mehrere globale Variablen zu (u.A. steckt dort dann irgendwo bbcode_uid mit drinne), die in meinem externen Skript natürlich nicht gesetzt sind.

Grüße, Geoemyda
Geoemyda
Mitglied
Beiträge: 52
Registriert: 01.11.2007 16:52

Beitrag von Geoemyda »

Alles an meinem MOD ist fertig, nur die Sache mit dem BBCode funktioniert nicht. Es kann doch nicht sein, dass ich mehrere Stunden Arbeit in die Tonne treten kann, nur weil ich einen einzelnen Schritt nicht hinbekomme?

bbcode_bitfield scheint irgendwas mit den einzelnen BBCodes zu tun zu haben ($bitfield->set($bbcode_data['bbcode_id'])), und dann noch mit base64_encode behandelt wird.
Leider finde ich überall (aufgrund OO ?) nur code-fragmente die mir nicht weiterhelfen.

Es muss für die Leute die hier schon x mods geschrieben haben, und an der Entwicklung von phpbb3 ein leichtes sein, mir zu helfen, oder nicht?


Oder:
Gibt es irgendwo ein Tutorial wie man mit der Funktion submit_post umgeht? Wie ich die aufrufen kann? Woher ich die globalen Variablen, auf die die Funktion zugreift herbekomme?


Wäre euch echt wahnsinnig dankbar!
Grüße, Geoemyda











---------------------------------





Ein Hinweis auf Example 3.6. Example API submit_post() hätte mir weitergeholfen und viel Zeit und Nerven gespart. Schade.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Du hast dein Thema binnen weniger Minuten/Stunden mit einem Folgebeitrag nach oben geschoben.
Die Mindestwartezeit für Topic Bumping beträgt 24 Stunden.

Bitte lies Dir den phpBB.de-Knigge durch und beachte diese zukünftig.
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“