Seite 1 von 1

Funktion nach jedem Forenpost aufrufen

Verfasst: 24.07.2012 13:14
von Marcwa19197
Hallo,
Ich habe folgendes Problem. Undzwar möchte ich nach jedem Threadstart & nach jedem Beitrag zu einem Thread eine Funktion aurufen, die dem User Punkte auf meiner verknüpfen Homepage gutschreibt.

Nun zu meinen Fragen:
1. Welche Funktion erledigt das Threadstarten bzw. das posten eines Beitrages?
2. Wie verbinde ich in dieser funktion mit einer weiteren datenbank?

Es handelt sich um folgenden Code, der jedesmal wenn ein User ein Thema startet bzw. auf ein Thema antwortet aufgerufen wird und dem jeweiligen User dadurch punkte gutschreiben soll.

Dies habe ich bereits "gebastelt":

Code: Alles auswählen

$dbhost_board = "localhost";
         $dbuser_board = "dbuser";
         $dbpwd_board = "dbpw";
         $db_board = "databasename";

         $link_board = mysql_connect($dbhost_board, $dbuser_board, $dbpwd_board);
         $select_db_board = mysql_select_db($db_board);
		 require_once("/var/www/xxx/include/includes/func/punktesys.php");
		 
		 $thread_poster = $user->data['username'];
		 $get_userid1 = mysql_query("SELECT id FROM ic1_user WHERE name = '".$thread_poster."'");
		 $get_userid = mysql_fetch_rows($get_userid1);
		 add_pkt($get_userid[0], '4', '1');
add_pkt ist die funktion, womit die puntke gutgeschrieben werden. vorher wird die id des users auf der Homepage anhand des Usernamens ermittelt..

Wo soll ich diesen Code jetzt am besten einfügen, so das er wie gesagt nach jedem Thread start & nach jedem Post ausgeführt wird?

danke schonmal im vorraus.

Re: Funktion nach jedem Forenpost aufrufen

Verfasst: 24.07.2012 22:33
von Miriam
zu 1: Das sollte die function submit_post() in der \includes\functions_posting.php sein.
zu 2. Wieso lässt Du die Daten nicht in die phpBB3 Tabellen eintragen und dieser Werte durch Deine HP Scripte auslesen? Oder werden die Daten an mehreren Stellen aktualisiert?

Re: Funktion nach jedem Forenpost aufrufen

Verfasst: 30.07.2012 23:56
von Marcwa19197
zu 2: ja sie werden an mehreren stellen aktualisiert, z.b. wenn ein user auf der hompage einen shoutbox eintrag macht bekommt er auch punkte :) wenn ich den code i nder submit_post einfüge, erhalte ich wenn ich ein thread starten will nur eine weiße seite.. :O

Re: Funktion nach jedem Forenpost aufrufen

Verfasst: 31.07.2012 00:15
von Pyramide
http://www.phpbar.de/w/Mein_PHP-Script_ ... %9Fe_Seite (erstes Google-Ergebnis für "PHP weiße Seite") hast du schon gelesen und befolgt?

Re: Funktion nach jedem Forenpost aufrufen

Verfasst: 31.07.2012 11:16
von Marcwa19197
habe den ersten fehler, der auftauchte gefixxt, nunkomtm folgender fehler:

Code: Alles auswählen

Allgemeiner Fehler
SQL ERROR [ mysql4 ]

Table 'databasename.phpbb_topics' doesn't exist [1146]

SQL

INSERT INTO phpbb_topics (topic_poster, topic_time, topic_last_view_time, forum_id, icon_id, topic_approved, topic_title, topic_first_poster_name, topic_first_poster_colour, topic_type, topic_time_limit, topic_attachment) VALUES (2, 1343726095, 1343726095, 20, 0, 1, 'bnbmj', 'Marcwa19197', 'AA0000', 0, 0, 0)

BACKTRACE

FILE: [ROOT]/includes/db/mysql.php
LINE: 175
CALL: dbal->sql_error()

FILE: [ROOT]/includes/functions_posting.php
LINE: 1991
CALL: dbal_mysql->sql_query()

FILE: [ROOT]/posting.php
LINE: 1134
CALL: submit_post()
Databasename ist der name der datenbank, die ich ansprechen möchte, dies tu ich im moment so:

Code: Alles auswählen

			$thread_poster = $user->data['username'];
			ini_set( 'display_errors', true );
            error_reporting( E_ALL );

			
			$dbhost_board = "localhost";
            $dbuser_board = "dbuser";
            $dbpwd_board = "dbpw";
            $db_board = "databasename";

            $link_board = mysql_connect($dbhost_board, $dbuser_board, $dbpwd_board);
            $select_db_board = mysql_select_db($db_board);
            require_once("/var/www/xxx/include/includes/func/punktesys_board.php");
      
            
            $get_userid1 = mysql_query("SELECT id FROM ic1_user WHERE name = '".$thread_poster."'");
            $get_userid = mysql_fetch_row($get_userid1);
            add_pkt($get_userid[0], '4', '1');
			mysql_close($link_board);
Daher meien Frage, wie kann ich während der submit_post funktion, eine weiter datenbank 'ansprechen' ?

Re: Funktion nach jedem Forenpost aufrufen

Verfasst: 31.07.2012 16:30
von Pyramide
Offenbar ist hier das mysql_connect fehlgeschlagen; da du den Fehler aber ignoriert hast, wurde dann das mysql_select_db einfach stillschweigend auf der letzten aktiven Datenbankverbindung (also der von phpBB) ausgeführt und diese ist damit nicht mehr brauchbar. Daher:

1. Lass dir immer alle Fehlermeldungen ausgeben: http://www.php-faq.de/q-sql-fehlerbehandlung.html .

2. Du musst bei allen Funktionsaufrufen immer alle optionalen Parameter übergeben, damit die Funktionen auch auf der richtigen Datenbankverbindung ausgeführt werden (z.B. bei mysql_select_db ( string $database_name [, resource $link_identifier]) den $link_identifier).

Ansonsten beachte auch http://www.php-faq.de/q-sql-injection.html (wg. Übernahme des Usernamens in deine SQL-Abfrage).