Seite 1 von 2

Call to a member function on a non-object

Verfasst: 15.07.2005 17:29
von AlexK2307
Hallo,

ich hab ein Problem, wenn ich posts absende (edit, post etc.). Normalerweise kommt da ja "HIER klicken um Deine Nachricht anzuzeigen" (sinngemäß). Bei mir kommt der Fehler
<b>Fatal error</b>: Call to a member function on a non-object in <b>/daten/www/inf/extra/lastwars_ticker.php</b> on line <b>76</b>
Zeile 76ff. aus lastwars_ticker.php hat geschrieben: $result = $vwardb->query_first("
SELECT COUNT(warid) AS numwars
FROM vwar".$n."
WHERE status='1'
AND dateline <= '$dateline'
");
Problem dürfte wohl sein, daß er das Objekt $vwardb nicht kennt. Ok, ich hab null Peilung, was die Sache mit den Objekten betrifft (sonst wär ich ja auch nicht hier :D ). Aber ich häng jetzt total und kann mir leider auch nicht mehr weiter helfen. Daher die Bitte um Hilfe :oops:

Das Problem existiert auch nur in der function prepare_post, wenn ich das soweit richtig verstanden habe. Bei viewtopic.php, posting.php etc. klappt alles. Nur diese "Quittierungsseite" mag nicht. Durch die automatische Weiterleitung funktioniert aber trotzalledem alles. Es ist aber ein Schönheitsfehler, den ich endlich weghaben will. :x

Wer will kann sich das gerne unter "http://infclan.net" ansehen. Ich habe dort ein vwar mit einem phpbb verschmolzen. Ich hoffe, ich werde dafür nicht in Ungnade fallen. Im Prinzip ist es ja auch nichts anderes als die Integration von phpbb in php-nuke. ;)

Ich bin für jede Hilfe dankbar!

Gruß

Alex

Verfasst: 15.07.2005 18:03
von kellanved
Was ist den das für eine Mod? Diese Variable (die ganze Datenbanktabelle) gibt es in einem normalen phpBB nicht.

Verfasst: 15.07.2005 18:12
von AlexK2307
Das ist ein vwar-Objekt. vwar ist ein php/MySQL Projekt für online Clans. Siehe auch auf der vwar-Homepage (vwar . de).

Verfasst: 15.07.2005 18:17
von kratzer54847
was willst du denn erreichen?
ist die Seite in ein phpBB integriert?

dann veruschs mal so:

Code: Alles auswählen

$sql = "SELECT COUNT(warid) AS numwars 
FROM vwar".$n." 
WHERE status='1' 
AND dateline <= '$dateline'":

$result = $db->sql_query($sql);

Verfasst: 15.07.2005 18:57
von Blutgerinsel
Die Fehlermeldung besagt:
das versucht wird auf eine Klassenmethode zuzugreifen über eine Variable in welcher kein Objekt instanziert worden ist.

Folglich ist das Objekt aus Gründen die sich meiner Kenntnis entziehen nicht initialisiert worden.

Bei PHPBB wird $db im header initialisiert. $vwardb weiss meine Glaskugel leider nicht auch wenn ich noch so daran rüttele.....

Frage ist was kann $vwardb besser als $db und ob es sinnvoll ist diese zu vermischen.....

Verfasst: 15.07.2005 19:58
von AlexK2307
:) Ok, ich habs wohl zu ungenau erklärt, aber daran soll es bitte sehr nicht scheitern.

Ich versuch es mal mit einem Bild:

[ externes Bild ]

$db gehört zu phpBB (von mir im Bild als Bereich 1 gekennzeichnet). Wie gewohnt. Nicht verändert.

$vwardb gehört zum vwar Teil, den ich mit (2) gekennzeichnet habe. Beide Teile zusammen ergeben die gesamte Homepage.

Sowohl vwar als auch phpBB haben von mir den gleichen Header bekommen. Das funktioniert auch bei allen vwar-Seiten und bei fast allen Bestandteilen von phpBB.

Leider scheint es bei phpBB Seiten zu geben, die nicht aus den zugrundegelegten php-Seiten im Hauptordner (bei mir ist das /forum/) gebaut werden. Eine solche Seite wäre z.B. die erweiterte Smiley-Box. Dort habe ich meinen Header (mehr oder weniger erfolgreich) bereits herausnehmen können. Denn alle diese Seiten (z.B. Smiley-Box, Quittung für post/edit, Benutzernamen-finden-Box), die nicht so aufgebaut werden, wie die Hauptseiten (posting.php, viewtopic.php, viewforum.php, search.php, etc.) scheitern am $vwardb-Objekt, das jedoch für die linke Menüleiste notwendig wäre.

Vermutlich habe ich das System dieser Seiten noch nicht verstanden, aber momentan denke ich, daß die bei mir fehlerhaft angezeigten Seiten aus functions gebaut werden. So z.B. function prepare_post. Diese Funktion baut - wenn ich das richtig verstanden habe - die Quittungsseite (HIER klicken um Ihre Nachricht anzuzeigen) auf. Beim Seitenaufbau ist das vermeintliche Objekt $vwardb allerdings "NULL", woraus dann der Fehler resultiert.

Diese Funktion wird aus posting.php aufgerufen, wo gleich am Anfang auch die vwar-Funktionen (korrekt) eingelesen werden. Korrekt deshalb, weil ich ja das Forum ganz ohne Fehlermeldung bearbeiten kann und die links stehenden Menüs mit integrierten vwar-Objekten funktionieren. Sobald aber eine Seite aus einer function gebaut wird, ist das $vwardb-Objekt "vergessen". :?

Ich denke, daß das nicht ohne ist und ich kann jeden verstehen, der keine Lust hat, in der Freizeit sich mit so einem "Blödsinn" zu beschäftigen. Deshalb Dank von ganzem Herzen an die, die sich mit mir abmühen. :grin:

Verfasst: 26.07.2005 07:33
von AlexK2307
Leider immer noch keine Lösung. :(

Verfasst: 26.07.2005 15:28
von kratzer54847
was bringt dir denn $vwardb, was dir $db nicht bringt?
du willst doch nur eine simple Abfrage machen, da macht es m.E. keinen Unterschied, welche DB-Klasse verwendet wird, sie muss nur richtig verwendet werden.

mfg Johny

Verfasst: 26.07.2005 16:00
von AlexK2307
kratzer54847 hat geschrieben:was bringt dir denn $vwardb, was dir $db nicht bringt?
du willst doch nur eine simple Abfrage machen, da macht es m.E. keinen Unterschied, welche DB-Klasse verwendet wird, sie muss nur richtig verwendet werden.
$db ist ein phpBB-Objekt
$vwardb ist ein vwar-Objekt

Auszug aus einer vwar-includes-Datei:

Code: Alles auswählen

class vwardb {

        var $link_id    = 0;
        var $query_id   = 0;
        var $record     = array();

        var $errdesc    = "";
        var $errno      = 0;
        var $show_error = 1;

        var $server     = "";
        var $user       = "";
        var $password   = "";
        var $database   = "";

        function vwardb($server,$user,$password,$database)
        {
                $this->server   = $server;
                $this->user     = $user;
                $this->password = $password;
                $this->database = $database;
                $this->connect();
        }

 function gettables()
 {
        global $n;

        return array(
        "vwar".$n,
        "vwar".$n."_accessgroup",

[....]
Ich habe ja nicht viel Ahnung von Klassen, aber ich denke $vwardb und $db sind sehr unterschiedlich. Sollte es wirklich gut sein, das eine gegen das andere auszutauschen? Bei anderen Seiten klappt die Verwendung beider Objekte im übrigen einwandfrei. Ich habe anscheinend nur Probleme, das Objekt bei manchen Seiten zu erstellen. Daher kann es nicht ausgelesen werden.

Ich kann gerne eine Testumgebung erstellen und den Zugang per PM rausgeben.

Verfasst: 26.07.2005 16:26
von kratzer54847
die Grundfunktion beider Objekte liegt doch im Auslesen und Verarbeiten von Daten aus einer Datenbank. Daher sollte man es austauschen können.