Seite 1 von 2
[Erledigt] Probleme im ACP -> Userdaten ändern
Verfasst: 17.01.2007 19:40
von killerbees19
Hallo an alle.
Ich habe ein Problem im ACP. Wenn ich einen Benutzer über das ACP ändere, wird die Signatur irgendwie falsch angezeigt:
Code: Alles auswählen
[list][*]Entweder, sie Können binär zählen
[*]Oder nicht[/list:u]
In der Datenbank steht das ganze so:
Code: Alles auswählen
[list:84db1333df][*:84db1333df]Entweder, sie Können binär zählen
[*:84db1333df]Oder nicht[/list:u:84db1333df]
Wo bitte kommt das :u: her?
EDIT:
Ich habe gerade ein altes Thema gefunden, wo ich schon ein ähnliches Problem hatte.
Leider konnte mir damals niemand helfen:
http://www.phpbb.de/viewtopic.php?t=134658&highlight=
Vielen Dank schon im Voraus
MfG Christian
Verfasst: 20.01.2007 09:53
von killerbees19
Kann mir niemand helfen
Ich habe nun schon einen Großteil der Datei(en) durchgesehen, aber ich finde keinen Fehler. Ich kenne mich mit dem BB-Code-System halt nicht aus.....
MfG Christian
Verfasst: 20.01.2007 10:13
von cYbercOsmOnauT
Die einzige Stelle, die das "hinzufügen" kann wäre die Funktion prepare_message, denn da wird die Signatur (genau wie alle Postings) geparst und die BBCodes mit der BBCode UID versehen (unter anderem).
Da diese Funktion auch für Postings verwendet wird, sollte Dein Fehler, wenn er denn existiert, auch in Postings erscheinen. Ist der Fehler denn reproduzierbar? Sprich: Immer wenn Du eine Liste in die Sig packst, passiert das? Oder war das eine einmalige Sache?
Gruß,
Tekin
Verfasst: 20.01.2007 11:30
von killerbees19
Der Fehler ist immer, also ich kann ihn reproduzieren

Das einzige was bei den Postings das Problem ist: Der PHP-BB-Code funktioniert nicht korrekt, siehe:
http://www.redio.de/postings/12004.html#12004
MfG Christian
Verfasst: 20.01.2007 18:46
von Miriam
Steht das U auch schon beim Editieren da oder wird es erst nach dem Absenden hinzugeschrieben?
Wird bei erneutem Editieren dann noch ein U dazugeschrieben?
Was passiert, wenn Der User sein Profil editiert?
Verfasst: 20.01.2007 19:41
von killerbees19
Ich habe das ganze jetzt einmal mit meinem Testaccount getestet.
Ich gebe im Profil ganz normal folgendes ein:
Code: Alles auswählen
[b]Und noch etwas:[/b]
[list][*]Zeile 1
[*]Zeile 2[/list:u]
Jajajaja......
Im Profil oder in den Beiträgen wird die Signatur korrekt geparsed ausgegeben.
In der Datenbank wird es so gespeichert:
Code: Alles auswählen
[b:d9a0253c18]Und noch etwas:[/b:d9a0253c18]
[list:d9a0253c18][*:d9a0253c18]Zeile 1
[*:d9a0253c18]Zeile 2[/list:u:d9a0253c18]
Jajajaja......
Wenn der Benutzer die Signatur wieder ändern will, gibt es keine Probleme.
Und im Adminbereich, beim Ändern, erscheint es so:
Code: Alles auswählen
[b]Und noch etwas:[/b]
[list][*]Zeile 1
[*]Zeile 2[/list:u]
Jajajaja......
Es scheint immer zu sein, wenn ich eine Liste verwende.
Und dann ist eben noch das Problem, wenn die Profilseite zum Ändern nochmals angezeigt wird, weil man zum Beispiel einen Fehler gemacht hat (wie im älteren Thread), wird der BB-Code gar nicht mehr decodiert....
MfG Christian
Verfasst: 22.01.2007 09:14
von killerbees19
Ich verlinke jetzt einmal auf die bbcode.php, vielleicht könnt ihr mir ja dann helfen. Denn gerade bei den preg_*()-Funktionen blicke ich (noch) nicht ganz durch.
bbcode.php
MfG Christian
Verfasst: 22.01.2007 20:01
von gn#36
Ich würde behaupten du hast einen Bug gefunden.
In der Datei admin_users.php sollte nämlich die Zeile
Code: Alles auswählen
$signature = ($this_userdata['user_sig_bbcode_uid'] != '') ? preg_replace('#:' . $this_userdata['user_sig_bbcode_uid'] . '#si', '', $this_userdata['user_sig']) : $this_userdata['user_sig'];
Dafür sorgen, dass bei der Darstellung der bbcode entfernt wird. (Zeile 798 etwa)
Im usercp wird das mit dieser Zeile geregelt:
Code: Alles auswählen
$signature = ($signature_bbcode_uid != '') ? preg_replace("/:(([a-z0-9]+:)?)$signature_bbcode_uid(=|\])/si", '\\3', $signature) : $signature;
(Zeile 797 etwa)
Wie man hier an dem regulären Ausdruck erkennen kann, werden auch zusätzliche Buchstaben wie z.B. das u, welches mit Doppelpunkt vom eigentlichen BBcode getrennt wurde erkannt und entfernt, im ACP ist dies aber nicht so. Da das aber nur bei sehr wenigen BBCodes passiert, dass ein Buchstabe o.ä. angehängt wird fällt das vermutlich im regulären Betrieb kaum auf. Mit dem Inhalt der bbcode.php hat das an der Stelle nichts zu tun.
EDIT: Jetzt aber nicht auf die Idee kommen das einfach direkt auszutauschen. Ich denke das im ACP müsste so aussehen damit es funktioniert:
Code: Alles auswählen
$signature = ($this_userdata['user_sig_bbcode_uid'] != '') ? preg_replace("/:(([a-z0-9]+:)?)".$this_userdata['user_sig_bbcode_uid']."(=|\])/si", '\\3', $signature) : $this_userdata['user_sig'];
Verfasst: 23.01.2007 09:16
von killerbees19
gn#36 hat geschrieben:Ich würde behaupten du hast einen Bug gefunden.
Interessante Entdeckung

Ich habe mir jetzt einmal schnell ein neues phpBB auf localhost installiert:
Der Fehler ist wirklich in jedem phpBB
Aber um zu deinem Vorschlag zurückzukommen:
Leider löscht er mir die SIgnatur komplett.
Aber wenn es sich wirklich um einen phpBB-Bug handelt müsste ihn die phpBB-Group eigentlich reparieren
MfG Christian
Verfasst: 23.01.2007 10:39
von cYbercOsmOnauT
Wenn es wirklich nur ein u: ist, was dazu kommen kann, ist die RegEx simpel umzubauen.
Code: Alles auswählen
$signature = ($this_userdata['user_sig_bbcode_uid'] != '') ? preg_replace('#:(u:)?' . $this_userdata['user_sig_bbcode_uid'] . '#si', '', $this_userdata['user_sig']) : $this_userdata['user_sig'];
That's it.
Warum diese RegEx
Code: Alles auswählen
$signature = ($this_userdata['user_sig_bbcode_uid'] != '') ? preg_replace("/:(([a-z0-9]+:)?)".$this_userdata['user_sig_bbcode_uid']."(=|\])/si", '\\3', $signature) : $this_userdata['user_sig'];
bei Dir nicht klappt, ist mir nicht ganz klar. Die RegEx ist 100% korrekt (hab ich manuell überprüft).
Gruß,
Tekin