2013-05-09 96 views
0

增量當一個用戶名被插入到我的數據庫,如:檢查用戶名是否存在,如果是這樣,一個

  • John_Smith

我需要檢查,如果已經有一個John_Smith存在。如果是這樣,加1就成爲John_Smith_1

因此,如果以下用戶名已經存在:

  • John_Smith
  • John_Smith_1
  • John_Smith_2
  • John_Smith_3
  • ....達John_Smith_10

我需要nex t John_Smith插入增加到John_Smith_11。

到目前爲止,我已搜查,並拿出這樣的:

$preferredname= "John_Smith" 

     //check for duplicate user names 
     $duplicate= check_for_duplicate_username($preferredname);      

     //if duplicate, increment the preferredname  
     if ($duplicate) 
     { 
      $parts = explode("_",$preferredname); 

      if (isset($parts[1])) 
      $preferredname = $parts[0]."_".$parts[1]."_".($parts[2]+1); 

      else $preferredname = $parts[0]."_".$parts[1]."_1"; 
     } 

,我相信這將工作僅第一個匹配的用戶名。我的問題是檢查與最多的名字的版本的數據庫。這是我的SQL:

 function check_for_duplicate_username($name) 
{ 
    // check if username already exists 
    $sql = "SELECT * FROM users WHERE user_username=$name"; 
    //then return duplicates 
+0

這裏有一個XY問題。你的ddls應該改變,你錯誤地使用你的數據庫 – gbtimmon 2013-05-09 17:47:55

+1

我討厭它,當網站做到這一點。只要告訴用戶名稱已被採納,並讓他們選擇另一個。 – vascowhite 2013-05-09 17:52:01

+0

快速思考 - 也許您應該將增加的值與用戶一起保存,以便您可以按該列進行排序。或者,您可以將ID附加到用戶名,如果它被採取。或者更好的是,返回一個「錯誤」,說明用戶名被採取並讓他們選擇另一個名字。 – 2013-05-09 17:53:41

回答

0

雖然這可能不是最好的解決方案,但是這是一個答案,它解決了你特別想做的事情。以下查詢返回具有$ name或$ name_123的用戶數SELECT COUNT(*) FROM users WHERE user_username REGEXP '$name[_0-9]*$';因此,如果值爲0,您可以簡單地單獨使用$name,否則可以使用$name."_". +查詢返回的數字。

但是,正如很多人所提到的,不要自動分配用戶名(非常web 1.0:P)最好的主意。我會推薦電子郵件地址。另一種選擇是使用社交應用使用的任何用戶標識以及標識社交應用的其他字段(如果有多個),然後使用自動增加的ID字段作爲唯一主鍵。

+0

是的,我認爲這是最好的方式。我會從他們的個人資料中獲得獨一無二的東西,並添加一個顯示名稱字段,以在界面中顯示友好的內容謝謝 – gray 2013-05-09 18:25:08

1

您可以使用此查詢:

$sql = 'SELECT * FROM users WHERE user_username LIKE ' . $name . '_%'; 

上面會查詢行這user_username有類似John_Smith_ *(其中*是包括數任何有效的字符,你必須稍後檢查)

你可以使用這個PHP語句獲取用戶的後綴數字值:

preg_match('/([0-9]+)$/', 'John_smith_10', $matches); 
$user_number = $matches[0]; 
0

我有類似的問題I試圖今天解決,並做到了這一點。在我來說,我需要存儲/創建基於用戶的首字母/姓唯一的目錄名稱:

$username = "bjones"; 
$usersql = "SELECT * FROM users WHERE username LIKE '$username%'"; 
$usercnt = mysqli_num_rows(mysqli_query($con,$usersql)); 

// If bjones, bjones1, bjones2, etc already exists 
if ($usercnt >= 1) { 
    $num = ++$usercnt;    // Increment $usercnt by 1 
    $username = $username . $num; // Add number to username 
} 

假設bjones,bjones1,bjones2已經存在,我竟又與bjones3。

相關問題