Joomla Hack: Globale Variable geht verloren?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Joomla Hack: Globale Variable geht verloren?!

    Hallo zusammen, ich schreibe gerade ein kleinen Hack für Joomla 1.5. Dabei werden Inhalte direkt in das WBB2 gepostet.

    Folgendes Problem liegt nun vor:

    wbb_controller.php (meine Klasse)
    - function save($boardid, $topic, $message)

    Diese Funktion ist im Kopf wie folgt aufgebaut:
    PHP-Code:
    global $db$n;

    require(
    $this->path_to_forum 'global.php');
    require(
    $this->path_to_forum 'acp/lib/class_parse.php');
    require(
    $this->path_to_forum 'acp/lib/class_parsecode.php'); 
    Nun bekomme ich beim Aufruf aber folgenden Fehler:
    Fatal error: Call to a member function on a non-object in /www/htdocs/w00a4ea0/Forum/acp/lib/functions.php on line 1409

    So, das ganze passiert wie folgt:
    Die global.php includiert die Datei "/acp/lib/session.php" des Forums. Dort wird ein Aufruf der Funktion function getwbbuserdata getätigt. Diese Funktion steht in der Datei "functions.php" (also die Datei, die den fehler auslöst).

    Die Funktion function getwbbuserdata hat ebenfalls ein "global $db, $n;" an erster Stelle. Heißt: die Variable bzw. das Objekt sollte auch in dieser Funktion zur Verfügung stehen! Wenn in dieser Funktion aber nun auf das Objekt $db zugegriffen wird, wird der Fehler zurückgeworfen.

    Das seltsame ist, dass das Objekt direkt vor dem Aufruf der Funktion (in "session.php") noch vorhanden ist. Das kann man sich so vorstellen:

    PHP-Code:
    echo $db// gibt mir im Browser 'Object' zurück
    getwbbuserdata(......); // direkt drauf folgt die Funktion. In dieser Funktion habe ich keinen Zugriff mehr auf das Objekt 
    Würde mich über nen Denkanstoß/Hilfe freuen ...

  • #2
    Also für mich sieht es so aus als ob diese globale Var an irgendeiner Stelle im Skript gekillt wird und du anschließend versuchst auf dessen Member Funktionen zugreifen die zu diesem Zeitpunkt aber nicht mehr existiert.

    Was dir der PHP Interpreter auch versucht als mögliche Ursache mitzuteilen.

    Am einfachsten wäre es wohl sich irgendeinen PHP Debugger zu besorgen wo mir spontan keiner einfällt oder gezielt nach unset(); ausschau zu halten und entweder vor der Zerstörung des DB Objektes anzusetzen oder aber die erforderlichen Daten zu sammeln und in einem eigener DB Connection abzusetzen...

    evtl. wären Mysql Trigger eine elegantere Lösung.

    Was die global Geschichte anbelangt ist diese im Grunde verpönnt und bei vernünftiger Kapselung i.d.R. vermeidbar. Den Stil sollte man sich auf keinen Fall angewöhnen da selbst PHP 4 mittlerweile OOP beherrscht. Und das mal am Rande
    [color=blue]MfG Payne_of_Death[/color]

    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
    [color=red]Merke:[/color]
    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

    Murphy`s Importanst LAWS
    Jede Lösung bringt nur neue Probleme
    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

    Kommentar


    • #3
      In der Funktion musst du die globale Variable natürlich auch erstmal mit global $foo; verfügbar machen!

      Kommentar


      • #4
        Ich habe manchmal den Eindruck, daß in manchen PHP-Versionen der scope beim Includen flötengeht bzw. er mit "global" durcheinanderkommt. Setz mal ein "global $db" in jedes Include.

        EDIT: Quatsch, ist ja innerhalb einer Funktion.
        Nee, dann anders: Ist $db denn garantiert eine Globale?
        Was sagt $GLOBALS["db"]?

        Kommentar

        Lädt...
        X