Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Gemischte IDs und Benutzernamen in Datenbankabfragen
#1
Hallole,

Vor einigen Wochen hatte bei unserem Forum (forum.logic-masters.de) ein Hacker einen Teil der Datenbanktabellen beschädigt. Wir konnten damals das meiste aus Backups reparieren und das Forum lief auch noch. Nun habe ich, da ein neues Update anstand, stattdessen das Forum in der Version 1.4.5 neu installiert, um sicher zu sein, dass die Datenbank wieder ganz ist und das Merge-Tool verwendet um die Daten aus dem alten zu migrieren. Das hat auch bis auf ein paar unwichtige Kleinigkeiten ziemlich gut geklappt. Nur ein Problem haben wir seither:

Bei PNs tauchen an allen möglichen Stellen immer wieder SQL-Fehler auf (beispielsweise die Anfrage in Zeile 1462 in private.php). Diese sind immer von der Form SELECT ... FROM mybb_users WHERE uid IN (...). Das Problem hierbei ist die Liste nach IN, denn dort werden für alte PNs Benutzernamen und für neue PNs ID's verwendet. Ich müsste also irgendwo in der Datenbank aus den Benutzernamen ID's machen, weiß aber nicht wo. Kann mir da jemand weiterhelfen?

Dankeschön, Berni

PS: Falls das irgendwie relevant ist, ich habe inzwischen die drei Dateien aus dem Patch für 1.4.6 hochgeladen.
#2
Geh mal in phpMyAdmin, Tabelle mybb_privatemessages, und schau dir dort den Inhalt an. Die Spalten pmid, uid, fromid, toid, sollten alles ausschließlich Nummern sein. Hast du da Benutzernamen drinstehen? Das kann eigentlich gar nicht sein da das Datenbankschema für diese Spalten gar keine Strings erlaubt.

Reparieren könntest du es eventuell (nicht getestet) mit

UPDATE mybb_privatemessages pm, mybb_users u SET pm.uid=u.uid WHERE pm.uid=u.username

statt pm.uid auch pm.toid, pm.fromid

Da das ziemlich gefährlich ist, unbedingt vorher ein Backup machen bzw. das erstmal in einer lokalen Datenbank testen.

Wenn ihr User habt, dessen Username nur aus Ziffern besteht, kann es zudem sein, daß diesem User dann PMs verloren gehen / fremde PMs diesem User zugeordnet werden, da in o.g. Abfrage nicht zwischen String und Zahlen unterschieden wird.
#3
Nee, das kann es nicht sein. uid ist da ein integer. Allenfalls noch in recipients. Was ist denn da das Schema der Einträge?
#4
Wie genau lautet der SQL-Error?

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#5
Okay, im recipients kann natürlich alles mögliche drinstehen, und macht deiner Zeilenangabe nach auch mehr Sinn Wink

Es handelt sich dabei um PHP Datentypen (array) die mit den PHP-Funktionen serialize() und unserialize() in Strings umgewandelt werden.

sieht z.B. so aus:

a:1:{s:2:"to";a:1:{i:0;s:2:"10";}}

Wenn du das Benutzernamen drinnen stehen hast, das per SQL zu beheben ist nicht unmöglich aber ziemlich fies, da schreibst du dir besser ein PHP-Script dafür...

Und wenn das vom Merge System kommt müsste man dazu einen Bug melden.

Alternativ kannst du das recipients Feld auch komplett killen. Dann geht bei private messages, die an mehr als nur eine Person geschickt worden, diese zusätzlichen Informationen verloren - aber dafür hast du den Fehler auch nicht mehr. Wink
#6
Super, danke! Ich hab' jetzt bei den recipients alle Benutzernamen durch ids ersetzt. Scheint zumindest zu funktionieren. Mal sehen, ob die User noch weitere Beschwerden haben...