---
title: "Ta fram ett ledigt användarnamn"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/176684-ta-fram-ett-ledigt-användarnamn"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2009-02-02T20:50:23.000Z"
updated: "2009-02-03T20:43:49.000Z"
replies: 5
views: 387
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/176684-ta-fram-ett-ledigt-användarnamn"
---

# Ta fram ett ledigt användarnamn

## #1 — MickeA.com, 2009-02-02T20:50Z

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!

Permalänk: https://www.webforum.nu/p/176684

## #2 — Peter S, 2009-02-02T20:58Z

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
```

Permalänk: https://www.webforum.nu/p/2167486

## #3 — MickeA.com, 2009-02-02T21:01Z

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?

Permalänk: https://www.webforum.nu/p/2167544

## #4 — Peter S, 2009-02-02T21:10Z

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.

Permalänk: https://www.webforum.nu/p/2167549

## #5 — MickeA.com, 2009-02-02T21:23Z

> **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!

Permalänk: https://www.webforum.nu/p/2167552

## #6 — MickeA.com, 2009-02-03T20:43Z

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.

Permalänk: https://www.webforum.nu/p/2167645

---

Tråden på webben: https://www.webforum.nu/amne/php/176684-ta-fram-ett-ledigt-användarnamn
