[gelöst] Username ändern mit Umlaut

Begonnen von Biker, 19 Oktober 2011, 22:59:11

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Biker

Ich habe mehrere User, die bisher ihren Nicknamen mit ue statt ü usw. hatten und wollte dies gerade über die "convert_username.php" ändern, aber wenn ich z.B. die Änderung von Soeldi auf Söldi durchführen will, steht dort:

"Der Benutzername "Söldi" existiert bereits."

Das stimmt aber nicht.

Wie kriege ich den Namen nun geändert?

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Biker

Das hier müssten die entsprechenden Zeilen aus der convert_username.php sein:

    // check ob neuer username bereits vorhanden
    $result = sql_query("SELECT uid, uname FROM {$user_prefix}_users WHERE uname='" . mxAddSlashesForSQL($new) . "'");
    $row_new = sql_fetch_assoc($result);
    if (!empty($row_new['uname']) && $new != $old) {
        die('<h2>Der Benutzername "' . $new . '" existiert bereits.</h2>');


Fakt ist, dass der neu gewählte Username nicht vorhanden ist, aber trotzdem angezeigt wird, dass er das wäre.

:gruebel: :gruebel: :gruebel:
Detektei Martin - wir bringen Licht ins Dunkle!

Biker

Da es bei allen bisherigen Usernamen mit "ue" / "oe" / "ae" das gleiche Problem ist....wie kann man die Prüfung des neuen Nutzernamens ändern, dass ein "ü" auch nur als "ü" erkannt wird, wenn es als "ü" dort steht und nicht als "ue"!?

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Baldyman

Hoi Bernd  :bye:

für neue Benutzer sollte es eigentlich genügen, bei der Benutzerkonfiguration den Button bei Sonderzeichen im Benutzernamen zulassen auf Ja zu stellen.

Biker

Hi Baldyman,
das habe ich ja auch - nach Update auf 1.12 - getan, aber es geht ja um existierende User!

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Webfan

Hallo,
bedenke: Existierende Usernamen zu ändern ist eine heikle Sache. Eventuell können dann Einträge in den jeweiligen Modulen den Usern nicht mehr richtig zugeordnet werden.
mfg

Biker

Hi Webfan,
da gibt es nichts zu bedenken!  :BD:

Die "convert-Username.php" gibt es hier in den Downloads und ich habe sie schon zig mal OHNE PROBLEME eingesetzt.

Problem ist hier aber ein anderes....nämlich die Änderung auf den Usernamen mit Umlaut....und da Benutzernamen mit Umlaut erst ab 1.12 möglich sind, konnte ich das bisher nie testen.

Jetzt ist es mit 1.12 bei neuen Accounts möglich, aber die Frage ist wie ich den Benutzernamen von bestehenden Accounts auf den Umlaut ändern kann.

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Andi

Moin :)

das ganze verwundert mich i.M. selbst etwas.
Im Script ist keine Konvertierung der Umlaute vorgesehen. Also für das Script ist Söldi ein anderer Username wie Soeldi. Wenn der Username wirklich noch nicht existiert, dann vermute ich, dass mySql da irgendwie selbstständig konvertiert....

Ist mir so noch nicht begegnet, bzw. es wurde nicht regisitriert...
Muss ich prüfen, ob es wirklich so ist und was zu machen wäre....
schön´s Grüssle, Andi

Andi

Hmmm, sicher dass der Name nicht schon existiert?

kann es weder hier, noch auf meinem localhost nachstellen.
Die Konvertierung funzt:

ZitatNachfolgend die durchgeführten Datenbankänderungen. (grün = ok, rot = fehlerhaft)

UPDATE {****}_users SET uname='eSöldi' WHERE uid='7083'
UPDATE {****}_userguest SET touser='eSöldi' WHERE touserid='7083'
UPDATE {****}_userguest SET wer='eSöldi' WHERE fromuserid='7083'
UPDATE {****}_stories SET informant='eSöldi' WHERE informant='eSoeldi'
UPDATE {****}_reviews_comments SET username='eSöldi' WHERE username='eSoeldi'
UPDATE {****}_reviews SET reviewer='eSöldi' WHERE reviewer='eSoeldi'
UPDATE {****}_queue SET uname='eSöldi' WHERE uid='7083'
UPDATE {****}_pollcomments SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_nukebook SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_nukebook_queue SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_downloads_newdownload SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_downloads_votedata SET ratinguser='eSöldi' WHERE ratinguser='eSoeldi'
UPDATE {****}_downloads_modrequest SET modifysubmitter='eSöldi' WHERE modifysubmitter='eSoeldi'
UPDATE {****}_downloads_downloads SET submitter='eSöldi' WHERE submitter='eSoeldi'
UPDATE {****}_links_newlink SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_links_votedata SET ratinguser='eSöldi' WHERE ratinguser='eSoeldi'
UPDATE {****}_links_modrequest SET modifysubmitter='eSöldi' WHERE modifysubmitter='eSoeldi'
UPDATE {****}_links_links SET submitter='eSöldi' WHERE submitter='eSoeldi'
UPDATE {****}_faqnew SET name='eSöldi' WHERE name='eSoeldi'
UPDATE {****}_comments SET name='eSöldi' WHERE uid='7083'
UPDATE {****}_avatar SET aid='eSöldi' WHERE aid='eSoeldi'
UPDATE {****}_smf11_members SET memberName='eSöldi' WHERE ID_MEMBER='7083'
UPDATE {****}_smf11_members SET realName='eSöldi' WHERE ID_MEMBER='7083' AND realName='eSoeldi'
UPDATE {****}_smf11_messages SET posterName='eSöldi' WHERE ID_MEMBER='7083'
UPDATE {****}_smf11_polls SET posterName='eSöldi' WHERE ID_MEMBER='7083'
UPDATE {****}_smf11_personal_messages SET fromName='eSöldi' WHERE ID_MEMBER_FROM='7083'
UPDATE {****}_cpg_comments SET msg_author='eSöldi' WHERE author_id='7083' AND author_md5_id=''
UPDATE {****}_cpg_ecards SET sender_name='eSöldi' WHERE sender_name='eSoeldi'
UPDATE {****}_cpg_pictures SET owner_name='eSöldi' WHERE owner_id='7083'



Kann mir solch eine Eigenmächtigkeit von mySql auch nicht vorstellen und in der Doku habe ich auch nichts gefunden was irgendwie darauf hindeutet.
schön´s Grüssle, Andi

Biker

Hallo Andi,
ja...ich bin mir absolut sicher, dass die User:

Guenni und Soeldi nur so in der nuke_users drin sind und dort keine User mit dem Username Günni und Söldi vorhanden sind.

Ich habe extra nochmal in die Tabelle gesehen....obwohl ich mir auch so absolut sicher war.


Hast Du bei Deinem Test denn den User zuerst als Soeldi angelegt?

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Andi

Jop, natürlich ;)

auf localhost: Soeldi angelegt > umbenannt nach Söldi > wieder zurück nach Soeldi > keine Probleme
hier auf der Seite: eSoeldi angelegt > umbenannt nach eSöldi > wieder gelöscht....


Lass dir einfach mal die ermittelten Werte ausgeben. Ändere die Datei wie folgt:
Nach diesen Zeilen:
    // check ob neuer username bereits vorhanden
    $result = sql_query("SELECT uid, uname FROM {$user_prefix}_users WHERE uname='" . mxAddSlashesForSQL($new) . "'");
    $row_new = sql_fetch_assoc($result);


folgendes einfügen:
mxDebugFuncVars($row_old, $row_new); exit;

speichern und dann den Namen versuchen zu ändern.
Hier posten was kommt....
schön´s Grüssle, Andi

Biker

#11
Hab ich getan....das hier kommt:

Argument 1: Array
(
   [uid] => 4
   [uname] => Soeldi
)
Argument 2: Array
(
   [uid] => 4
   [uname] => Soeldi
)


Sieht so aus, als würd My SQL da elbst etwas konvertieren!?
Ist ja der Beweis dafür, dass Soeldi mit Söldi gleichgesetzt wird und das "ö" als "oe" angesehen wird.
Detektei Martin - wir bringen Licht ins Dunkle!

Biker

#12
Ich glaube ich weiß nun woran es liegt.

MySQL kann keine Umlaute umsetzen....steht zumindest so in der Doku.

Ich habe gerade einen neuen User angelegt...namens Testsoeldi.

Dann habe ich den Testsoeldi mit der Eingabe:

Alter Name: Testsoeldi
Neuer Name: Tests&ouml;di

konvertiert und....siehe da....der Testsoeldi heißt jetzt Testsöldi!
Zitat
Nachfolgend die durchgeführten Datenbankänderungen. (grün = ok, rot = fehlerhaft)

UPDATE nuke_users SET uname='Testsöldi' WHERE uid='1074'
UPDATE nuke_userguest SET touser='Testsöldi' WHERE touserid='1074'
UPDATE nuke_userguest SET wer='Testsöldi' WHERE fromuserid='1074'
UPDATE nuke_stories SET informant='Testsöldi' WHERE informant='Testsoeldi'
UPDATE nuke_reviews_comments SET username='Testsöldi' WHERE username='Testsoeldi'
UPDATE nuke_reviews SET reviewer='Testsöldi' WHERE reviewer='Testsoeldi'
UPDATE nuke_queue SET uname='Testsöldi' WHERE uid='1074'
UPDATE nuke_pollcomments SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_nukebook SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_nukebook_queue SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_downloads_newdownload SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_downloads_votedata SET ratinguser='Testsöldi' WHERE ratinguser='Testsoeldi'
UPDATE nuke_downloads_modrequest SET modifysubmitter='Testsöldi' WHERE modifysubmitter='Testsoeldi'
UPDATE nuke_downloads_downloads SET submitter='Testsöldi' WHERE submitter='Testsoeldi'
UPDATE nuke_links_newlink SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_links_votedata SET ratinguser='Testsöldi' WHERE ratinguser='Testsoeldi'
UPDATE nuke_links_modrequest SET modifysubmitter='Testsöldi' WHERE modifysubmitter='Testsoeldi'
UPDATE nuke_links_links SET submitter='Testsöldi' WHERE submitter='Testsoeldi'
UPDATE nuke_faqnew SET name='Testsöldi' WHERE name='Testsoeldi'
UPDATE nuke_comments SET name='Testsöldi' WHERE uid='1074'
UPDATE nuke_avatar SET aid='Testsöldi' WHERE aid='Testsoeldi'
UPDATE nuke_avatar_comments SET author='Testsöldi' WHERE author='Testsoeldi'
UPDATE smf_members SET memberName='Testsöldi' WHERE ID_MEMBER='1074'
UPDATE smf_members SET realName='Testsöldi' WHERE ID_MEMBER='1074' AND realName='Testsoeldi'
UPDATE smf_messages SET posterName='Testsöldi' WHERE ID_MEMBER='1074'
UPDATE smf_polls SET posterName='Testsöldi' WHERE ID_MEMBER='1074'
UPDATE smf_personal_messages SET fromName='Testsöldi' WHERE ID_MEMBER_FROM='1074'

Gruß
Bernd

...ich bin gar nicht so doof, wie andere aussehen! *lol*
Detektei Martin - wir bringen Licht ins Dunkle!

Biker

#13
Komisch ist jetzt nur, dass der Testsöldi auf alles zugreifen kann...nur nicht auf sein Gästebuch!

Da kommt dann: User nicht existent oder keine Berechtigung!

Sobald der Username einen Umlaut hat, gibt es kein Userguestbook mehr für diesen User!
Detektei Martin - wir bringen Licht ins Dunkle!

Andi

Ändere die Zeile mal bitte wie folgt.

mxDebugFuncVars($_GET, $row_old, $row_new); exit;
schön´s Grüssle, Andi

Biker

Argument 1: Array
(
    [old] => Testsoeldi
    [new] => Testsöldi
    [step] => 2
)
Argument 2: Array
(
    [uid] => 1074
    [uname] => Testsoeldi
)
Argument 3: Array
(
    [uid] => 1074
    [uname] => Testsoeldi
Detektei Martin - wir bringen Licht ins Dunkle!

Andi

Ok, den Mist baut anscheinend wirklich die Datenbank. Hatte jetzt noch irgendwie an ne Umschreibung durch .htaccess oder irgendein anderes Serverscript gedacht...
Keine Ahnung warum....

Eigentlich müsste es ja in dem Fall (Soeldi >> Söldi) genügen, den Check ob der USername schon existiert auszukommentieren.
Das darf natürlich nicht auf dauer sein, sondern muss individuell geprüft werden.


Einfach den Scriptabbruch auskommentieren:
// die('<div id="box"><p>Der Benutzername <strong>"' . $new . '"</strong> exis....



PS.
solche Probleme waren der Grund, warum ich eigentlich immer gegen Sonderzeichen im Nicknamen war...
schön´s Grüssle, Andi

Biker

Okay, aber was ist mit dem Problem -wie zuvor beschrieben - dass das Userguestbook bei Usernamen mit Umlaut nicht mehr funktioniert?
Detektei Martin - wir bringen Licht ins Dunkle!

Biker

Okay....funktioniert so...mit der Auskommentierung....und mit dem "ö" wird auch das Userguestbook angezeigt!

Vielen Dank Andi!

Gruß
Bernd
Detektei Martin - wir bringen Licht ins Dunkle!

Andi

Zitat von: Biker am 20 Oktober 2011, 21:59:53
Okay, aber was ist mit dem Problem -wie zuvor beschrieben - dass das Userguestbook bei Usernamen mit Umlaut nicht mehr funktioniert?

Schwer zu erklären, aber ganz grob...

- Du schreibst Tests&ouml;di in die Datenbank.

- Das wird auch so ausgelesen und im Link so angehängt userguest?username=Tests&ouml;di und im HTML-Quelltext so ausgegeben

- Der Browser macht aus dem Link aber userguest?username=Testsöldi

- Beim Klick auf den Link wird auch der Parameter username=Testsöldi

- PHP generiert dann die Datenabankabfrage ...WHERE username='Testsöldi'

- den Testsöldi gibt es aber nicht in der Datenbank, sondern den Tests&ouml;di


Das &ouml; ist nur für die Browseranzeige ein ö, für den Server, PHP und mySql bleibt es die Zeichenfolge &ouml;
schön´s Grüssle, Andi