PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : User-Nick verschwindet O.O



ElDani
30.04.2008, 20:33
Hallo, Ihr Lieben,
meine neueste Fehlermeldung:

einer meiner User, eher mäßig aktiv, bewegt sich regelmäßig "als geist", ohne Nick auf der Seite. in den letzten Tagen hab ich ihm den Nick öfter mal von Hand eingetragen.

Nun habe ich beim letzten Mal die Möglichkeit, den Nickname im Userprofil zu ändern, abgeschafft, so daß dieser jetzt nur noch angezeigt wird.

heute war der Nick des Users wieder leer. O.O
Weiß einer, wie das geht?
und wie das zu verhindern ist?

Schööne Feierei euch allen! :)

EarlofMidnight
30.04.2008, 21:28
Hast du nur das Eingabefeld für den Nicknamen ausgebaut und das Update der Datenbank drin gelassen? :hat:

Gruß

EarlofMidnight

ElDani
01.05.2008, 04:54
hmm, erstmal ja....
was muß ich da noch alles rausschmeißen?



if (!isset($_POST['nickname'])) $_POST['nickname'] = "";
.
und
.
//Nickname ändern beginn !
if ($_POST['aendern'] == 'Jetzt ändern!') {
if (isset ($_POST['nickname'])) {
$nickname = mysql_real_escape_string(ucfirst($_POST['nickname']));
$nickname = strip_tags($nickname);
$nickname = substr($nickname,0,18);
$nickname_check =db_query ("SELECT `nickname` FROM ".$db_prefix."_userdaten WHERE nickname='".$nickname."'");
$nickname_check2 =db_query ("SELECT `nickname` FROM ".$db_prefix."_userdaten WHERE nickname='".$nickname."'AND uid=".$_SESSION['uid']."");

if (mysql_num_rows($nickname_check))
if (mysql_num_rows($nickname_check2)) {

}else{
$change = 'Dieser Nickname ist schon vergeben!<br>';
}else{
db_query("UPDATE ".$db_prefix."_userdaten SET nickname = '".$nickname."' WHERE uid=".$_SESSION['uid']."");
}
}
}


is das alles, was dazu gehört?

hmmm...
aber um ohne Maske auf die DB zuzugreifen, ist wohl doch etwas.. hmm... kriminelle Energie nötig, oder?

jpwfour
01.05.2008, 08:54
eigentlich nicht, ist mit dem entsprechenden browser & addons überhaupt kein problem, gabs ja schon mal mit html code in den nicknames:
http://www.designerscripte.net/showthread.php?t=5325

nur ist da natürlich noch nichts vorgesehen, wenn der nickname nur aus einem leerezichen besteht oder so, entweder macht man da noch eine abfrage rein:

//Nickname ändern beginn !
if ($_POST['aendern'] == 'Jetzt ändern!')
{
if (isset ($_POST['nickname'])) {
$nickname = mysql_real_escape_string(ucfirst($_POST['nickname']));
$nickname = strip_tags($nickname);
$nickname = substr($nickname,0,20);
$nickname = trim($nickname); //entfernt leerzeichen am anfang und am ende
if(strlen($nickname)<3){
$change .= 'Der Nickname muss mindestens 3 Zeichen lang sein!<br>';
}else{
$nickname_check =db_query ("SELECT `nickname` FROM ".$db_prefix."_userdaten WHERE nickname='".$nickname."'");
$nickname_check2 =db_query ("SELECT `nickname` FROM ".$db_prefix."_userdaten WHERE nickname='".$nickname."'AND uid=".$_SESSION['uid']."");
if (mysql_num_rows($nickname_check))
if (mysql_num_rows($nickname_check2)) {

}else{
$change .= 'Dieser Nickname ist schon vergeben!<br>';
}
else
{
db_query("UPDATE ".$db_prefix."_userdaten SET nickname = '".$nickname."' WHERE uid=".$_SESSION['uid']."");
}
}
}
}oder du entfernst die funktion ganz, dazu das input feld im html code ganz entfernen oder auf readonly="readonly"setzen, und den teil:

//Nickname ändern beginn !
if ($_POST['aendern'] == 'Jetzt ändern!')
{
...
...
...
db_query("UPDATE ".$db_prefix."_userdaten SET nickname = '".$nickname."' WHERE uid=".$_SESSION['uid']."");
}
}
}
}komplett löschen.

ElDani
02.05.2008, 11:30
oki, danke erstmal,
ich hab im UserProfil die Funktion jetzt ganz entfernt und geschrieben, bei Änderungswünschen sollen die User bitte nen Admin kontaktieren.

kann ich die Funktion für die "mindest drei sichtbare Zeichen" direkt bei der Anmeldung einbaun? wie müßte das dann aussehen?

jpwfour
02.05.2008, 12:59
jo, das macht natürlich sinn, da auch eine abfrage dahingehend einzubauen.
wobei ich da empfehlen würde, das ganze per regulärem ausdruck zu überprüfen, mag zwar für php-anfänger etwas verwirrend aussehen, brignt aber in dem falle am meisten, da es auch die meisten möglichkeiten bietet:

datei: content/intern/anmelden.php

zwischen:


if ($schnittstelle['anfragen_tag'] != 0 and $schnittstelle['anfragen_tag'] <= $s_verbrauch) $error = 'Die Schnittstellenanfragen sind für heute verbraucht!!!<br>';

... //hier einfügen ...

// User mit der Datenbank abgleichen
if (!$error) {
folgendes einfügen:


if(!preg_match('/^[a-z0-9]{3,20}$/iD', $_POST['nickname']) ){
$error.= 'Bitte nur Buchstaben und Ziffern verwenden! [a-z,A-Z,0-9]<br>';
}
dieses suchmuster /^[a-z0-9]{3,20}$/iD erkläre ich jetzt noch schnell, denke sollte aber so in etwas schon den erwartugnen entsprechen:
erlaubt sind im nickname alle buchstaben von a bis z, aber nur die englischen, also nicht ß,ä,ü,ö, wobei die groß/kleinschreibung keine rolle spielt. zusätzlich sind alle ziffern erlaubt (der username kann auch nur aus ziffern bestehen), und es müssen mindestens 3 zeichen sein, aber maximal 20.

wenn der eingegebene nickname dem nicht entspricht, wird eben die fehlermeldung angezeigt, am besten noch im html code hinter "nickname" noch schreiben, dass 3-20 zeichen sein müssen oder so.

varianten:

/^[a-z0-9]{3,20}$/iD
die 3 und die 20 geben mindest bzw. maximal länge an, können je nach bedarf angepasst werden

/^[a-z0-9][a-z0-9_-]{1,18}[a-z0-9]$/iD
jetzt sind auch strich (-) und unterstrich (_) erlaubt, aber nur in der mitte, also das erste und das letzte zeichen müssenbuchstabe bzw. zahl sein
(nun statt 3,20 je 2 weniger)

/^[A-Z][a-z]{2,19}$/D
der erste buchstabe muss groß sein, alle anderen klein (bietet sich an beim überprüfen von "echten" namen)

und genau diese überprüfung kann man dann auch im userprofil durchführen, falls man die änderung zulässt.

ElDani
02.05.2008, 23:09
Dankeschön!
habs eingebaut :)

kann jemand meinen Thread-Titel zu etwas aussagekräftigerem ändern?
is ne schöne Anleitung hier geworden, die sicher noch mehreren nutzt :)

Schönes Wochenende euch allen! :)