Trying to get property 'userOnlineGroupID' of non-object

  • Affected App
    WoltLab Suite Core

    Hallo Forum! :)

    Ich habe seit dem 23. November eine Häufung unten genannter Fehlermeldungen. Google Sitemaps meldet bereits hunderte Seiten die betroffen sind - aber eben nicht alle.

    Requested URL
    /portal/forum/thread/2143158-hilfe-was-tun-wieder-zusammenraufen-nach-krankheit/?postID=883381
    Referrer
    WoltLab Suite
    3.1.11
    PHP
    7.2.25
    Error Message
    Trying to get property 'userOnlineGroupID' of non-object
    Type
    wcf\system\exception\ErrorException
    File (Line)
    /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/system/WCF.class.php (346)
    Stacktrace
    1. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/templates/compiled/2_wbb_1_thread.php (4102): wcf\system\WCF::handleError(…)
    2. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/system/template/TemplateEngine.class.php (321): include(…)
    3. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/page/AbstractPage.class.php (323): wcf\system\template\TemplateEngine->display(…)
    4. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/page/AbstractPage.class.php (114): wcf\page\AbstractPage->show(…)
    5. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/system/request/Request.class.php (83): wcf\page\AbstractPage->__run(…)
    6. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/lib/system/request/RequestHandler.class.php (96): wcf\system\request\Request->execute(…)
    7. /var/www/vhosts/meerschweinchen-ratgeber.de/httpdocs/portal/forum/index.php (9): wcf\system\request\RequestHandler->handle(…)

    Die entsprechende Zeile in der Datei:

    PHP
                <article class="wbbPost message messageSidebarOrientation<?php echo ucfirst($this->v['__wcf']->getStyleHandler()->getStyle()->getVariable('messageSidebarOrientation')); ?> jsClipboardObject jsMessage<?php if ($this->v['thread']->isDeleted || $this->v['post']->isDeleted) { ?> messageDeleted<?php } ?><?php if ($this->v['thread']->isDisabled || $this->v['post']->isDisabled) { ?> messageDisabled<?php } ?><?php if ($this->v['userProfile']->userOnlineGroupID) { ?> userOnlineGroupMarking<?php echo $this->v['userProfile']->userOnlineGroupID; ?><?php } ?><?php if ($this->v['thread']->userID != $this->v['post']->userID && $this->v['__wcf']->getUserProfileHandler()->isIgnoredUser($this->v['post']->userID)) { ?> ignoredUserMessage<?php } ?>"

    Testweise habe ich daraus den Bereich

    PHP
    <?php if ($this->v['userProfile']->userOnlineGroupID) { ?> userOnlineGroupMarking<?php echo $this->v['userProfile']->userOnlineGroupID; ?><?php } ?>

    mal rausgelöscht, dann taucht das selbe Problem etwas weiter unten auf an $this->v['userProfile']->userID.

    Es hängt irgendwie mit $this->v['userProfile'] zusammen. So recht kann ich mir darauf keinen Reim machen, zumal seit Monaten nichts an Plugins oder so neu installiert wurde. Die Updates wurden aber natürlich alle gemacht, zuletzt am 10. November. Den Cache habe ich natürlich geleert, sowohl redis wie auch woltlab.

    Was kann ich tun?

    Vielen Dank im voraus,

    Armin

  • Unverbindliche Überlegung:

    Haben in diesem Thema Benutzer geschrieben, die mittlerweile nicht mehr registriert sind? Anscheinend können die Daten wie userOnlineGroupID und userID eines Benutzers nicht ausgelesen werden.


    Gruß norse

    Zugang zu meinen Arbeiten und dem dazugehörigen Support bekommt Ihr bei Interesse hier und hier.

  • Dann würde

    Haben in diesem Thema Benutzer geschrieben, die mittlerweile nicht mehr registriert sind? Anscheinend können die Daten wie userOnlineGroupID und userID eines Benutzers nicht ausgelesen werden.

    Dann sollte aber das Feld für die userID genullt sein und damit ein Gast Profil verwendet werden.

    Damit deutet das mal wieder auf ein Problem mit den Foreign Keys hin, wodurch die Datensätze nicht korrekt gelöscht wurden.

    https://shop.softcreatr.com/product/6-foreign-key-check/

    Mit dem Plugin kannst du mal schauen ob die Vermutung zutrifft.

  • Guten Morgen,

    ich habe mich gerade mal auf die Suche begeben und konnte das Problem mittels

    SQL
    SELECT    p.userID AS pUserID, 
              u.userID AS uUserID, 
              p.postID AS postID 
    FROM      `wbb1_post` p 
    LEFT JOIN `wcf1_user` u 
    ON        u.userID = p.userID 
    WHERE     p.userID IS NOT NULL 
    AND u.userID is NULL;

    lokalisieren. Da fehlten einige Zuordnungen bzw. ein paar Tausend p.userID waren noch in der wbb1_posts Tabelle, die da nicht mehr hin gehörten weil der Nutzer nicht mehr existiert. Mittels

    SQL
    UPDATE    `wbb1_post` p 
    LEFT JOIN `wcf1_user` u 
    ON        u.userID = p.userID 
    SET       p.UserID = NULL 
    WHERE     p.userID IS NOT NULL 
    AND       u.userID is NULL;

    habe ich die p.userID entsprechend genullt. Das ganze dann noch analog für das p.lastPosterID Feld. Das hat auch funktioniert und zumindest stichprobenartig sind die Threads alle wieder aufrufbar.

    Bleibt für mich aber die Frage: Wie kommt das zustande? Ich habe keine Plugins oder ähnliches aktiv oder überhaupt installiert, welche Nutzer löschen könnten. Darüber hinaus, ganz grundsätzlich: Ist es wirklich notwendig "debugartig" komplett auszusteigen und im Zweifel jede Menge Fehlerseiten zu generieren statt im Frontend den Fehler abzufangen und den Nutzer im Zweifel einfach als Gast anzuzeigen?

    Schöne Grüße und einen guten Wochenstart,

    Armin

  • Bleibt für mich aber die Frage: Wie kommt das zustande? Ich habe keine Plugins oder ähnliches aktiv oder überhaupt installiert, welche Nutzer löschen könnten.

    Im normalen Betrieb werden die Daten selbst bereinigt mithilfe von sogenannten foreign keys.

    Wird ein Eintrag aus der User Tabelle gelöscht werden auch alle anderen Einträge, die auf jenen User verweisen entweder mit gelöscht oder aber auf null gesetzt.

    Wie es zur Löschung deiner User kommen konnte weiß ich nicht, im standart Umfang können user durchaus ihren Account manuell löschen, sofern du das nicht explizit deaktiviert hast wäre das also die wahrscheinlichste Ursache.

    Darüber hinaus, ganz grundsätzlich: Ist es wirklich notwendig "debugartig" komplett auszusteigen und im Zweifel jede Menge Fehlerseiten zu generieren statt im Frontend den Fehler abzufangen und den Nutzer im Zweifel einfach als Gast anzuzeigen?

    Wie gesagt, der Fehler sollte gar nicht auftreten können und deutet auf ein Problem mit den Foreign Keys hin, diese könnten z.B. durch einen Server Umzug, das einspielen eines Backups oder ein paar anderen Gründen bei denen es zu Fehlern kam korrumpiert worden sein.

    Das von mir verlinkte Plugin erlaubt es dir in deinem ACP schnell eine Übersicht zu erhalten ob dies der Fall ist oder nicht, alternativ musst du jeden Key manuell prüfen únd mit jenen aus der install.sql datei vom Forum und dem WSC vergleichen.

  • Hallo Morik,

    ja, besten Dank. Die Foreign Keys waren das Stichwort was mir fehlte, daraufhin bin ich überhaupt erstmal darauf gekommen zu schauen ob da Zuordnungen / Datensätze fehlen. Da das Problem ziemlich schnell ziemlich massiv wurde, habe ich keinen scheichenden Prozess - sondern einen phpseitigen Fehler vermutet. Aber die schnelle Zunahme an Fehlerseiten lag wohl eher am Crawlingverhalten (oder der Anzeige dessen) seitens Google.

    Es fehlten natürlich zwei Keys. Ich habe sie wieder hinzugefügt. :thumbup:

    Schöne Grüße

    Armin

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!