users Tabelle wird mit \ zugemüllt

  • Hallo zusammen,


    Ich benutze joomla 3.6.5, CommunityBuilder 2.1.2 und JMapMyLDAP. Wenn ein Benuzer sein CB Profil verändert (Frontend) und speichert, funktioniert es zwar zunächst, nach einigen malen jedoch nicht mehr.
    Das Problem ist, dass die _users Tabelle zugemüllt wird. Konkret Spalte params. Nach dem ersten speichern sieht die Spalte so aus:
    {"auth_type":"LDAP","auth_domain":"site.net"}


    Dann so: {"auth_type":"LDAP","auth_domain":"site.net","0":"{\"auth_type\":\"LDAP\",\"auth_domain\":\"site.net\"}"}


    und nach ein paar mal mehr so (stark gekürzt):
    "{"auth_type":"LDAP","auth_domain":"site.net","0":"{\"auth_type\":\"LDAP\",\"auth_domain\":\"site.net\",\"0\":\"{\\\"auth_type\\\":\\\"LDAP\\\",\\\"auth_domain\\\":\\\"site.net\\\",\\\"0\\\":\\\"{\\\\\\\"auth_type\\\\\\\":\\\\\\\"LDAP\\\\\\\",\\\\\\\"auth_domain\\\\\\\":\\\\\\\"site.net\\\\\\\",\\\\\\\"0\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"auth_type\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"LDAP\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"auth_domain\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"site.net\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"0\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"auth_type\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"


    Und nach einiger Zeit ist der Speicher voll, der Nutzer kann sein Profil nicht mehr editieren und ich muss ihn löschen.
    Hätte jemand eine Idee warum das System die params Spalte zumüllt?

  • Hallo,
    danke für deine Antwort. Das scheint ein ähnliches Problem zu sein.
    Was ich bisher debuggen konnte:
    In user.php wird in der save Funktion $this->params = (string) $this->_params;
    aufgerufen.
    durch das Umwandeln des Strings wird hier ein json encode in Json.php objectToString aufgerufen.


    _params ist ein Registry Type, [0] hat {"auth_type":"LDAP","auth_domain":"site.net"}

  • Hast du denn den Tipp unter dem Link ausprobiert, dass mindestens ein CB-Feld im Anmeldeformular aktiviert sein muss, damit es klappt? Das wäre interessant, weil man dann endlich mal rausbekäme, ob es ein CB-Bug ist, was CB ja vehement bestreitet. Ein Joomla-Bug liegt hier nicht vor. Das wurde alles schon durchgekaut.


    @christine2 Du hattest mich gestern angeschrieben. Ich finde heute den Thread "vom wohlkoenig" im CB-Forum nicht mehr, gestern schon ;) Er hatte da noch ein kleines Detail im letzten Post (Lösung für sein Problem). Kriegst du den Link noch mal raus? Bin zu blöd.

  • Ja das habe ich probiert, hat aber leider nichts gebracht.
    Das [0] {"auth_type":"LDAP","auth_domain":"site.net"} sollte wohl eigentlich gar nicht da sein.
    Es gibt nämlich neben 0 index noch auth_type index mit Wert LDAP und auth_domain mit der site (wie es sein sollte)
    Daher kommt beim json encode auch das \\\"0\\\":\\\" raus.
    Ich werde morgen nochmal versuchen herauszufinden, woher es kommt.
    Es passiert aber https://github.com/joomla/volu…ries/joomla/user/user.php zwischen Zeile 665 und 679

  • Hi,
    habe es jetzt mit einem Codeinsert kurz nach dem Laden eines users in usertable.php gelöst.


    Code
    foreach ( $arr as $kk => $v ) {
                $this->$kk        =    $v;
                if (trim($kk) === 'params' && isset($v) && trim($v) !== '') {
                    $this->$kk = json_decode($this->$kk);
                }
            }


    params ist ja im JSON Format gespeichert. In UserTable wird der user dann geladen, aber es wird nie ein json_decode ausgeführt. Beim Speichern wird dann wieder das noch nicht decodede encoded.
    Warum es nicht decoded wird beim Laden, weiß ich nicht. Eventuell ein Bug oder ein anderer Grund...
    Jedenfalls scheint (bisher) so alles zu funktionieren! Vielen Dank für eure Mühe.