张:动态检测用户名是否可用

news/2024/7/7 19:30:04


当用户注册时,需要拟定并输入一个用户名,而这个用户名,很多时候会互相重复,所以,常见的情况是,在输入

框旁边放一个按钮“检测用户名”,当用户点击时,提交到CheckUserName.asp进行检查,而很多时候,甚至不放这个按钮,而当用户提交时,才会发现用户名重复,这将导致几种恶性情况。

 

一种情况是,用history.go(-1)倒退一步,一般性的文本输入还在,密码必须重新输入。还有某些下拉菜单需要重新选择(不是所有的下拉菜单)。

还有一种情况,就是用户输入的所有数据全部丢失,可以想像,进行二次输入的人会有几个呢?

所以,很多时候,为了避免重复现象,往往把发布信息分成几步,第一步只要求输入用户名和密码,这样即使重复,也只需要这几个输入框重输(username,password1,password2),不过,这样做是一种权宜之计。对于一个完美的方案来说,并不是最好的选择。

 

所以,如果在用户输入的时候,即时进行检测,即时告知用户这个用户名是否已被占用,这将是非常人性化的设计。

本文后面将给出这样的方案,本示例已经过本人的测试,完全可用,如果将这种方法用在其它一些方面,将极大的提高网站的优越性,比如,用户输入的过程中即时保存信息,或即时查询,比如google在你输入关键字时,会动态地给出一些类似的关键字供选择。

还有就是163博客的编辑过程中保存草稿。所以,这个示例的应用非常多,办法很简单,就看怎么用了。

ajax.js

var xmlHttp
function inputarray(str) {
if (str.length >0)
{ var url="checkusername.asp?username=" + str
xmlHttp=GetXmlHttpObject(stateChanged)
xmlHttp.open("GET", url , true)

xmlHttp.send(null)
}
else
{
document.getElementById("arrayform").innerHTML=""
}
}

function stateChanged()
{
if (xmlHttp.readyState<4)
{document.getElementById("arrayform").innerHTML="loading..." }
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("arrayform").innerHTML=unescape(xmlHttp.responseText)
}
}

var set
function modf(str) {
if (str.length >0)
{ var url="modarray.asp?id=" + str
set=GetXmlHttpObject(stateChanged2)
set.open("GET", url , true)

set.send(null)
}
else
{
document.getElementById("modorm").innerHTML=""
}
}

function stateChanged2()
{
if (set.readyState<4)
{document.getElementById("modorm").innerHTML="正在查询..." }
if (set.readyState==4 || set.readyState=="complete")
{
document.getElementById("modorm").innerHTML=set.responseText
}
}

//2
var xmlcheck
function checkuser(str1,str2,str3) {
if (str1.length >0&&str2.length >0)
{ var url="chklogin.asp?username=" + str1 + "&password="+ str2 +"&logincookie="+str3
xmlcheck=GetXmlHttpObject(stateChanged3)
xmlcheck.open("GET", url , true)

xmlcheck.send(null)
}
else
{
document.getElementById("err").innerHTML=""
}
}

function stateChanged3()
{
if (xmlcheck.readyState<4)
{document.getElementById("err").innerHTML="正在登陆..." }
if (xmlcheck.readyState==4 || xmlcheck.readyState=="complete")
{
document.getElementById("err").innerHTML=xmlcheck.responseText
if(xmlcheck.responseText=="logined")
{location.href="main.asp"}
}
}


//common
function GetXmlHttpObject(handler)
{
var objXmlHttp=null

if (navigator.userAgent.indexOf("Opera")>=0)
{
alert("This doesn't work in Opera")
return;
}
if (navigator.userAgent.indexOf("MSIE")>=0)
{
var strName="Msxml2.XMLHTTP"
if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
{
strName="Microsoft.XMLHTTP"

}
try
{
objXmlHttp=new ActiveXObject(strName)
objXmlHttp.onreadystatechange=handler
return objXmlHttp
}
catch(e)
{
alert("Error. Scripting for ActiveX might be disabled")
return
}
}
if (navigator.userAgent.indexOf("Mozilla")>=0)
{
objXmlHttp=new XMLHttpRequest()
objXmlHttp.οnlοad=handler
objXmlHttp.οnerrοr=handler
return objXmlHttp
}
}

CheckUserName.asp
<!-- #include file="conn.asp" -->

<%
username=request("username")
Sql = "Select * From Users Where UserName = '"& UserName &"'"
Set Rs = Server.CreateObject("Adodb.Recordset")
Set Rs = Conn.Execute(Sql)

Response.Charset="gb2312"
If Not Rs.Bof Then

 Response.Write "用户名已被占用,请更换"
Else
 Response.Write "用户名可用"

End If
%>

=====================================
Conn.asp

=====================================
<%
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db1.mdb")
%>

==============================================
1.asp
==============================================


<!-- #include file="conn.asp" -->
<%
Response.Charset="gb2312"
%>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<title>动态检测用户名</title>
<script src="ajax.js" language="javascript"></script>
</head>
<body>
<div style="border:1px solid #333; background:#f3f3f3;padding:5px;">
<form>

请输入用户名 : <input type="text" id="txt1" name="txt1" onKeyUp="inputarray(this.value)">
</form>
<p><div id="arrayform">....</div></p>
</div>
<br />

<div id="modorm"></div>


</table>
</body>
</html>

==========================================

db1.mdb

==========================================

数据结构:

Users表
字段:Id,UserName
在Users表中,增加一些记录,如111111,222222,333333,444444,1,2,3,4,5,6,a,b,c,d,e,f
输入的时候,注意在输入111111时的提示变化。截图就不给了,如果需要完整的源码,请联系我吧。























http://www.niftyadmin.cn/n/3566933.html

相关文章

张建慧:用脚本设置输入框的数目

常见的比如上传图片时,如果要上传5个,可输入5,然后图片文件的选择框就变为了5 如果添加一些简单的内容,比如两三个文本框为一条记录,那么这样的信息采用这种方法将非常简便,只要在接收时轮循即可 下面是代码,保存为html即可: <body topmargin"0" leftmargin"…

DETR源码笔记(二)

在DETR源码笔记&#xff08;一&#xff09;中&#xff0c;阅读到了main()函数的第二部分构建模型部分&#xff0c;接下来是搭建transformer部分。 目录 搭建Transformer Encoder Decoder DETR搭建 LOSS计算和GT匈牙利匹配 PostProcess后处理 main&#xff08;三&#x…

用asp+javascript实现动态数据联动,不刷新

/by xxrl(孔曰成仁&#xff0c;孟曰取E) /Chinese:蒋健华 /email:jjh_115eyou.com 联动&#xff0c;联动&#xff0c;联动。。。。困扰了好多网友的神经&#xff0c;在CSDN&#xff0d;ASP板块中&#xff0c;总是看到网友们大呼救命&#xff0c;救什么&#xff1f;联动&#xf…

让innerHTML中的script脚本执行起来

<P>在我们使用AJAX的时候&#xff0c;经常要用到innetHTML来更新对象的内容&#xff0c;但是对于更新的<script>脚本程序浏览器却无法执行&#xff0c;我前面AJAX初学常遇问题解答这篇文章曾提到过这个问题&#xff0c;它不执行的原因是&#xff1a;<script>…

[转贴]在Visual C++调试器中显示Symbian字符串和描述符

在Visual C调试器中显示Symbian字符串和描述符 2005-01-12 浏览次数&#xff1a;83 文/Peter Jiang(译自newlc.com) 现在使用Visual Studio有一个令人很不爽的地方,就是处理描述符,因为你不能直接显示它们的内容(只能在模拟器的窗口里看到).这里有一个小技巧将可以让你显示…

让innerHtml中的script跑起来

很多人都可能遇到过这种情况&#xff1a;设置 innerHTML 的时候&#xff0c;插入的 HTML 代码中包含脚本&#xff0c;但这些脚本却不生效&#xff0c;或者在 IE 上生效在其它浏览器上就不生效。原因很简单&#xff1a;不同浏览器对插入 innerHTML 中的脚本有不同的处理方法。经…

redis中文手册

dis中文手册&#xff1a;http://readthedocs.org/docs/redis/en/latest/ 本文是参考《redis中文手册》&#xff0c;将示例代码用php来实现&#xff0c;注意php-redis与redis_cli的区别&#xff08;主要是返回值类型和参数用法&#xff09;。 目录(使用CTRLF快速查找命令)&…

[转贴]在Series 60设备上进行调试

在Series 60设备上进行调试 2005-01-12 浏览次数&#xff1a;103 文/Peter Jiang(译自newlc.com) 安装系统 1、在你的手机上安装gdbsudb.sis。这个文件被NOKIA SDK放在这个默认目录里 C:/Symbian//6.1/Series60/Epoc32/Release/armi/urel/ 2、关掉手机&#xff0c;启动FExpl…