2010-05-15 42 views
1

我想知道如何使用Javascript進行驗證,如果用戶在創建帳戶時輸入了任何用戶名,它已經存在於數據庫中並要求用戶輸入任何其他用戶名?如何使用Javascript驗證用戶名?

+2

簡答題;只有javascript:你不能 – 2010-05-15 22:02:00

+0

那麼什麼是阻止某人在客戶端JavaScript檢查後使用tamperdata發佈自己的用戶名? – rook 2010-05-15 22:17:50

+0

@The Rook:這是一個不錯的觀點,但不言而喻,客戶端支票不應該成爲任何事情的最後防線。這並不意味着不應該有客戶端驗證。這對用戶有所幫助,而不是數據完整性。 – 2010-05-15 22:19:52

回答

11
  1. <input />元素附加偵聽器blur事件。
  2. 使用AJAX發送請求發送到服務器(與字段值作爲參數)
  3. 在服務器側單向是否給定的用戶名是已經在使用或不
  4. 基於服務器的響應顯示(或不)上該用戶名是已經在使用消息

的jQuery(我對純JS太懶惰)+ PHP代碼示例:

<form ...> 
    ... 
    <input type="text" name="username" id="input-username" /> 
    <p class="error"></p> 
    ... 

$("#input-username").blur(function() { 
    $.post("/check-username.php", { username: $(this).val() }, function(data) { 
     if ("0" == data) { /* username in use */ 
      $(this).next("p").text("This username is already in use.</p>"); 
     } else {   /* username is fine */ 
      $(this).next("p").empty(); 
     } 
    }); 
}); 

<?php 

$username = $_POST['username']; 

// check whether given username exists in database 
$usernameExists = ...; 

echo $usernameExists ? '0' : '1'; // 0 if exists, 1 if not. 
4

答案是AJAX。如果您必須針對數據庫進行驗證,則需要打電話給服務器。唯一的方法是在不重新加載頁面的情況下(編輯:正確)是AJAX。你如何實現它將取決於你正在使用的JavaScript庫,以及你的服務器是什麼樣的。我建議你做一點搜索和閱讀 - 這是一個很常見的用例。

+0

*不重新加載頁面的唯一方法就是AJAX。* 呃...從技術上講,AJAX並不是唯一的解決方案,但它是唯一值得考慮的。 – Crozin 2010-05-15 22:02:07

+0

@Crozin:的確如此。你可以做一些事情,比如加載頁面的每個用戶名或AJAX式的東西,就像是一個古怪的iframe。有無數的錯誤的方法來做到這一點。 – 2010-05-15 22:06:28

-2

阿賈克斯可能不唯一的解決方案,因爲用戶名通常是公開的。一個簡單的方法是在某個時候只需要一個RDF/XML文檔(只需要添加每個新用戶就可以更新),其中包含站點上所有用戶的列表,您可以通過Javascript DOM輕鬆遍歷該用戶,以查看該用戶已在使用中。你也讓他們支付計算能力,而不是你,這取決於你有多好,這是一種優勢或劣勢。

+2

可能,但這種解決方案非常糟糕。這是一個O(n)的搜索成本,帶寬成本巨大,文件更新昂貴(帶有資源爭用)等等。相比之下,最佳解決方案使用的帶寬要少得多,而且速度更快,效率更高。 – 2010-05-15 22:12:38

+0

文檔更新是一個空參數,XML文件顯然會在每次請求時動態生成,而且它可以用於其他原因,這就是爲什麼我建議使用RDF/XML,就像我輸入的頁面一樣是。帶寬也低於人們預期的水平。裝載此社區所有用戶名的專用RDF文件的大小約爲加載顯示此頁所需的大小的四分之一。 – Zorf 2010-05-15 22:19:18

+1

除了性能差,這實際上與是否使用AJAX是正交的。對於直接查找(/ isUsernameTaken?username = foo)或訪問XML文檔(/allUserNames.xml),您都可以使用AJAX或其他解決方案(例如,隱藏的iframe)。 – 2010-05-15 22:20:43

1

就個人而言,我會使用JQuery驗證插件來簡化事情。 http://bassistance.de/jquery-plugins/jquery-plugin-validation/

但一般將包括一個小的AJAX請求到服務器(即JSON對象)與用戶名的,做在你的數據庫中的「搜索」,並返回true/false後才用戶點擊進入或在文本框中添加標籤(附加一個事件監聽器)。然後在您的回調響應中,更改您選擇的DOM元素,以向您的用戶指示帳戶名稱是否已存在於數據庫中。