2013-11-21 36 views
-1

我正在編寫腳本,用戶可以在其中加入Web應用程序。我用ajax從數據庫中找到可用的用戶名。但問題是我正在使用臨時數據庫進行檢查。我已經使用小寫用戶名「abcd」進行了帳戶。但我想讓用戶註冊大寫或不同情況下的相同單詞,如「ABCD」或「ABcD」或類似的。我不知道如何做到這一點在PHP中。請幫幫我。我的代碼是我需要在php中匹配完美的字符,用戶名爲

if(isset($_POST["name2check"]) && $_POST["name2check"] != ""){ 

    $username = preg_replace('#[^a-zA-Z0-9.-_]#i', '', $_POST['name2check']); 
    $sql_uname_check = $db->query("SELECT * FROM `view` WHERE `username` ='$username'"); 
    $uname_check = mysqli_num_rows($sql_uname_check); 
    if (strlen($username) < 3) { 
     echo '3 - 15 characters please'; 
     exit(); 
    } 
    if (is_numeric($username[0])) { 
     echo 'First character must be a letter'; 
     exit(); 
    }$no_uname = array(
        'admin','a.dmin','a.d.min','a.dm.in','a.dmi.n','a.d.m.in','a.d.mi.n','a.d.m.in','a.d.m.i.n'); 
    if (in_array($username, $no_uname, true)) { 
     echo '<strong>' . $username . '</strong> is not available for registration. <i class="glyphicon glyphicon-remove"></i>'; 
     exit(); 
    } 
    if ($uname_check < 1) { 
     echo '<strong>' . $username . '</strong> is available. <i class="glyphicon glyphicon-ok"></i>'; 
     exit(); 
    } 
    else { 
     echo '<strong>' . $username . '</strong> is taken. <i class="glyphicon glyphicon-remove"></i>'; 
     exit(); 
    } 
} 

回答

1

最簡單的解決方案是將您的數據庫字段更改爲區分大小寫。

如果它當前設置爲latin1_swedish_ci(ci =不區分大小寫),請將其更改爲與您的原始歸類最接近的latin1_general_cs(cs =區分大小寫)。如果區分大小寫,它會將'a'視爲與'A'不同。

+0

默認,latin1_swedish_ci。我可以允許用戶註冊他們的用戶名ABCD,ABCd,abcd,AbCd等嗎? – user2947999

+0

不與整理'ci' =「不區分大小寫」所以'A'=='a' - 你需要使用像'utf8_bin' – CD001

4

您可以在表中的字符集的排序規則更改爲區分大小寫的一個,這將使

WHERE 'abcd' = 'ABCD' 

評估爲假。另一種選擇是強制二進制比較對每個查詢的基礎上,

WHERE BINARY 'abcd' = 'ABCD' 

演示:

mysql> select 'abcd' = 'ABCD', BINARY 'abcd' = 'ABCD'; 

+-----------------+------------------------+ 
| 'abcd' = 'ABCD' | BINARY 'abcd' = 'ABCD' | 
+-----------------+------------------------+ 
|    1 |      0 | 
+-----------------+------------------------+ 
+0

我試過這個 $ username = $ _POST ['name2check']; $ sql_uname_check = $ db-> query(「SELECT * FROM'view' WHERE BINARY'username' ='$ username'」); $ uname_check = mysqli_num_rows($ sql_uname_check); 但沒有工作 – user2947999

相關問題