webForumDet fria alternativet

Ta fram ett ledigt användarnamn

5 svar · 384 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Hej,

Har ett system där man får ett användarnamn som baseras på de två första bokstäverna i ens förnamn samt de två första i efternamnet.

På vissa users kan användarnamnet bli detsamma, vill därför göra en kontroll då en ny användare läggs till.

Det jag vill göra är att kolla om t.ex. "mian" finns, om det gör det, ska "mian01" kollas och därefter 02, 03, 04 på slutet, tills ett ledigt användarnamn dyker upp.

Har försökt lösa det här med en do { } while() utan att lyckas så bra.
Vore bra om någon kunde komma med lite kodförslag hur jag ska lösa det här.

Tack!

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Någonting sådant här kanske:

newUserName = "mian";

rs = select top 1 username from user where left(username, 4) = 'mian' order by username desc;

if not rs.eof
  suffix = ((int) right(rs(0), len(rs(0)) - 4)) + 1;
  if suffix < 10
    suffix = "0" + suffix;
  end if
  newUserName = newUserName + suffix;
end if

// use newUserName
MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Lite aspkod i phpforumet :)

Har gjort såhär och det fungerar bra:

$user_name = fixname($user_name);
$sql_condition	= "";
if(is_numeric($user_id)){
	$sql_condition = "AND user_id <> " . $user_id . " ";
}
$i = "";
do{
	$user_name = $user_name . (is_numeric($i) && $i < 10 ? "0" . $i : $i);
	$query	= "SELECT "
		 ."user_name "
		 ."FROM user "
		 ."WHERE user_name = '" . $user_name . "' "
		 .$sql_condition
		 ."LIMIT 1";
	echo "<p>" . $query  . "</p>";
	$result = mysql_query($query) or die("<p>An error occurred, <br />\n<i>" . mysql_error() . "<br /><br />\n" . $query . "</p>");
	if(mysql_num_rows($result) == false){
		$unamedupl = false;
	}else{
		$i = (!is_numeric($i) ? $i = 1 : $i++);
	}
	mysql_free_result($result);

} while($unamedupl);

Finns det något bättre sätt kanske, eller är det bra och stabil kod det här?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Det var mer pseudokod jag postade (eftersom jag inte kan PHP) och jag tror inte det är svårt att översätta till valfritt språk.

En fördel med den kod jag visade är att du slipper använda loopar och, framför allt, db-anrop i loopar.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#5

Peter S skrev:

En fördel med den kod jag visade är att du slipper använda loopar och, framför allt, db-anrop i loopar.

Ja just det, alldeles rätt. Ska nog göra om och göra rätt.

Tack ska du ha!

MickeA.comMedlem sedan feb. 20034 441 inlägg
#6

Såhär blev det tillslut:

$sql_condition	= "";
if(is_numeric($user_id)){
	$sql_condition = "AND user_id <> " . $user_id . " ";
}

$query	= "SELECT "
	 ."user_name "
	 ."FROM user "
	 ."WHERE LEFT(user_name, 4) = '" . $user_name . "' "
	 .$sql_condition
	 ."ORDER BY user_name DESC "
	 ."LIMIT 1";

$result = mysql_query($query) or die("<p>An error occurred, <br />\n<i>" . mysql_error() . "<br /><br />\n" . $query . "</p>");
if(!(mysql_num_rows($result) == false)){
	$suffix = (substr(mysql_result($result, 0, 0), -2, 2) + 1);
	if($suffix < 10){
		$suffix = "0" . $suffix;
	}
	echo $user_name . $suffix;
}
mysql_free_result($result);

Bra att man slapp databasanrop i en loop.

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)