2010-05-15 136 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元素,以向您的用户指示帐户名称是否已存在于数据库中。