您的位置:首页 > Web前端 > JavaScript

js验证注册用户名重复

2011-02-23 09:35 246 查看
在注册页面及某些对象新增页面往往会用到验证数据库中是否已存在该对象。如果调用后台去访问数据库,显示要等用户提交后,刷新页面。下面介绍一种常用方法,用js+webservice实现无刷新验证;

为避免数据库中的表名暴露给客户端,可在数据库中新建一个表:Tsys_TableConfuse,用来存储需要验证的表名,及表的编码,这样就可以把表编码暴露给客户端,然后再通过编码来取表名。另外,如果安全级别较高的话,也可以建个表,存储要验证的表字段,用来转换。

如要验证tsys_user中NAME和DEPART字段中是否存在“张三”,“销售部”

首先在表Tsys_TableConfuse 中增加"001" ,"tsys_user"

先建立一个webservice

/// <summary>
/// 检测表中的列值是否重复
/// </summary>
/// <param name="tabMark">表的编码</param>
/// <param name="columns">列名列表,用逗号隔开</param>
/// <param name="colValues">列值列表,用逗号隔开</param>
/// <returns></returns>
[WebMethod]
public string CheckObjectExist(string tabMark, string columns, string colValues)
{
ClassLibrary1.Factory.WebServiceFactory clsLib = new ClassLibrary1.Factory.WebServiceFactory();
ClassLibrary1.Interface.IWebService iwebservice = clsLib.getWebService();
string strResult = iwebservice.checkObiectExist(tabMark, columns, colValues);
return strResult;
}

然后在后台的实现ClassLibrary1.Interface.IWebService 的checkObiectExist方法

public string checkObiectExist(string strTable, string strColumns, string strValues)
{
try
{
SqlConnection conn = new SqlConnection();
SqlParameter parms = new SqlParameter();
conn.ConnectionString = ConfigurationSettings.AppSettings["DBConnection"].ToString();
SqlCommand scmd = new SqlCommand();
scmd.Connection = conn;
string[] strColArr = strColumns.Split(',');
string[] strValueArr = strValues.Split(',');
if (strColArr.Length != strValueArr.Length)
{
throw new Exception("传值参数有误!表名:"+strTable+";列:"+strColumns+";值:"+strValues);
}

//取表名
string strgetTable = "select TABNAME from Tsys_TableConfuse where TABNO=@TABNO";
SqlParameter parms2 = new SqlParameter();
parms2.ParameterName = "TABNO";
parms2.Value = strTable;
scmd.CommandText = strgetTable;
scmd.Parameters.Add(parms2);
conn.Open();
string tableResult = scmd.ExecuteScalar().ToString();
conn.Close();

//检查是否有重复
scmd = new SqlCommand();
scmd.Connection = conn;
string strsql= "select count(1) from "+tableResult+" where 1=1 ";
StringBuilder sb = new StringBuilder();

for (int i = 0; i < strValueArr.Length; i++)
{
parms.ParameterName = strColArr[i];
parms.Value = strValueArr[i];
sb.Append(" and ");
sb.Append(strColArr[i]);
sb.Append(" = @");
sb.Append(strColArr[i]);
scmd.Parameters.Add(parms);
}
strsql = strsql + sb.ToString();
scmd.CommandText = strsql;
conn.Open();
string strResult = scmd.ExecuteScalar().ToString();
conn.Close();
return strResult;
}
catch (Exception ex) {
string strLog = ex.Message;
//
//TODO:日志记录
//
return "";
}
}

在客户端首先注册该webservice服务

<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService.asmx" />
</Services>
</asp:ScriptManager>

然后,通过文本框的onblur方法调用如下方法

function cheName() {
WebService.CheckObjectExist("001", "NAME,DEPART", "张三,销售部", processResult);
}
function processResult(result) {
//返回记录条数,如果大于0,说明对象已存在 }
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: