验证用户名重复注册的问题
目前有个项目,使用的是SSI,前端显示使用的Jquery的validate进行验证,目前网站需要做一个防止重复的用户名注册,但是由于对Jquery不是很了解,请教下各位如何有效的防止避免重复数据的保存呢?
原理我目前了解了,就是在保存用户数据时,将提交的用户名与数据库的用户名进行比较,SQL呢,就是select count(1) from 表 where username = #{username} .返回一个1和0进行判断。但是我判断后还是没效果,不知道那里错了。有指教!!!
我的控制跳转的代码:
String userName = userDao.getUsrName();
try {
if(userService.checkUsrName(userName) == 0){
User user = new User();
copyProperties(user, userDao, response);
user.setUsrPwd(ShaHex.messageDigest(userDao.getUsrPwd()));
user.setUsrHead("etb.jpg");//默认头像
userService.insert(user);
}
} catch (ServiceException e) {
LOG.error("保存用户信息失败");
e.printStackTrace();
}
return "redirect:/";
[解决办法]
说实话这个和Jquery的关系不是很大,你的是否重复用户名的判断是在后台;
加个断点调试下就很清楚的知道问题出在哪了,如果你的说的没效果是指即使重复的用户名也写到表里去的话,你就好好检查下userService.checkUsrName(userName)方法
[解决办法]
你断点这下:userService.checkUsrName(userName),看得到的结果是什么;
建议:int resultsNameCount = userService.checkUsrName(userName);
String userName = userDao.getUsrName();
try {
if(resultsNameCount > 0){
}
} catch (ServiceException e) {
LOG.error("保存用户信息失败");
e.printStackTrace();
}
return "redirect:/";
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String userName = request.getParameter("userName");
Integer sameNameCount = userManagerService.checkIsSameName(userName);
if(sameNameCount > 0){
response.getWriter().print("1");
}else{
response.getWriter().print("0");
}
另外建议楼主:User user = new User();
copyProperties(user, userDao, response);
user.setUsrPwd(ShaHex.messageDigest(userDao.getUsrPwd()));
user.setUsrHead("etb.jpg");//默认头像
userService.insert(user);
[解决办法]
刚没下完就提交上去了,其实我想说的是:
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String userName = request.getParameter("userName");
Integer sameNameCount = userManagerService.checkIsSameName(userName);
if(sameNameCount > 0){
response.getWriter().print("1");
}else{
response.getWriter().print("0");
}
像这样,把保存方法分开写,然后前台jsp用ajax解析下,符合条件然后跳转保存方法,否则提示已存在,不可添加。
[解决办法]
if(userService.checkUsrName(userName) == 0){
User user = new User();
copyProperties(user, userDao, response);
user.setUsrPwd(ShaHex.messageDigest(userDao.getUsrPwd()));
user.setUsrHead("etb.jpg");//默认头像
userService.insert(user);
}
else {
//用户名已经被注册
}
[解决办法]
debug一下,还有就是catch里面最好处理一下,重复了给个提示啥的,直接报错不友好,建议用ajax在前台判断
[解决办法]
jquery.validate.js里有支持调用服务器方法校验的
$("#form").validate({
//这个username是你表单里input的name="username"的元素
username:{
//validate.js里remote属性就是支持远程调用方法进行校验的。response要返回true或false
remote:"你的校验的url的方法地址"
}
});
[解决办法]
我也刚刚用,学习学习. . .
[解决办法]
这些东西自己上google搜jquery.validate.js,马上就有了。直接完善下我上面的js好了
$(funtion(){//validate在页面装载时就要初始化form的校验
$("#form").validate({
roles:{
username:{
//你可能还有其它的校验例如必填字段
required:true,
//validate.js里remote属性就是支持远程调用方法进行校验的。response要返回true或false
remote:"你的校验的url的方法地址"
}
}
messages:{
username:{
required:"用户名不能为空",//必填字段校验时对应的错误信息
remote:"用户名已经存在"//remote校验时对应的错误信息
}
}
});
});
[解决办法]
只能返回true或false不能返回0或1你可以response.getWriter.print("true")或response.getWriter.print("false");这样的可以
[解决办法]
你还不如把判断用户是否存在和注册是否成功在后台一并处理后再返回到前台。两个方法分开写,即判断是否重复注册和入库的方法分开,设计判断用户是否存在的时候,返回一个数字,如果数字>0,表示已经注册过,就不执行保存方法,然后返回一个“用户已经存在”,如果用户可以注册,保存后,也返回保存的结果:“注册成功”或“注册失败”。在前台同样用你的js,但是直接把返回的信息显示出来就行,不用作判断。
[解决办法]
返回true和false 和返回一个确定的值并不矛盾,主要看你定义的类型。只是前台ajax解析的时候,如:可以这样:
...
var checkUrl = '${ctx}/state/user_state!checkUserCardSaveByNum.do?docuType=' + docuType + "&userCard=" + userCard;
$.ajax({
type : "get",
url : checkUrl,
dataType : "json",
cache: false,
contentType : "application/json; charset=utf-8",
success : function(data, textStatus) {
if(data[0]=="1"){
alert("该帐号已存在,请确认!");
}else if(data[0]=="0"){
$("#save").attr("disabled", true);
document.getElementById("form1").submit();
}
}
});
[解决办法]
楼主啊.......
上面那个就是在页面刚加载的时候就初始化好了你的commentForm了你这个再用上,上面的就无效了
$("#commentForm").click(function(e){ $("#commentForm").validate(); });这个不要了
[解决办法]
input元素的name属性值和里面的rules里面的每个属性名对好,刷新页面,清楚缓存和试用痕迹。还不行就是jquery.js的版本和jquery.validate.js版本不兼容了。不知道你的这两个文件的版本是什么,还有页面上有没其它jquery的.js文件与它冲突了
[解决办法]
失去焦点的时候有没反应?
[解决办法]
这说明你效果已经有了,都书堆了你不能提交是因为你没写
在你的validate里面添加处理验证成功后表单的提交
submitHandler: function(form)
{
form.submit();//都通过了表单提交,如果是ajax提交可以使用$(form).ajaxSubmit();这个要引入jquery.form.js
}
}
[解决办法]
后台:
.....
String usrname = request.getParameter("usrname");
.....(此处为数据库中对用户名的验证,存在返回result=false,不存在返回result=true)
if(result){
response.getWriter().print(true);
}else{
response.getWriter().print(false);
}
前台:
function usradd()
{
$('#你所提交表单的id').form('submit', {
url:"调用的后台servlet",
onSubmit: function(){
},
success:function(data){
//判定用户名是否存在
if(data == "true"){
$.messager.alert('提示','此用户已存在请重新设定','info'); // 用户名存在
}else{ //用户名不存在添加成功
closeForm();
$.messager.alert('提示','提交成功','info');
}
}
}
});
}
[解决办法]
var valiFlag={
"childName":false,
"parentName":false,
"homeTown":false,
"contact":false,
"code":false
}
$(function (){
$("#childName").blur(function (){
var childName=$("#childName").val();
if(childName ==""){
$("#childNameInfo").html("宝宝姓名不能为空").css("color","#ff0000");
return valiFlag.childName=false;
return;
}else{
$("#childNameInfo").html("");
return valiFlag.childName=true;
}
});
});
$(function (){
$("#parentName").blur(function (){
var parenName=$("#parentName").val();
if(parenName ==""){
$("#parentNameInfo").html("父母姓名不能为空").css("color","#ff0000");
return valiFlag.parentName=false;
return;
}else{
$("#parentNameInfo").html("");
return valiFlag.parentName=true;
}
});
});
$(function (){
$("#homeTown").blur(function (){
var homeTown=$("#homeTown").val();
if(homeTown ==""){
$("#homeTownInfo").html("户口所在地不能为空").css("color","#ff0000");
return valiFlag.homeTown=false;
return;
}else{
$("#homeTownInfo").html("");
return valiFlag.homeTown=true;
}
});
});
$(function (){
$("#contact").blur(function (){
var contact=$("#contact").val();
if(contact ==""){
$("#contactInfo").html("户口所在地不能为空").css("color","#ff0000");
return valiFlag.contact=false;
return;
}else{
$("#contactInfo").html("");
return valiFlag.contact=true;
}
});
});
$(function (){
$("#code").blur(function (){
var code=$("#code");
var validateCoeUrl = '/member!!validateCode.xhtml';
if(MyJs.isNullByJQuery(code)) {
$("#codeInfo").html("验证码不能为空").css("color","#ff0000");
valiFlag.code=false;
return;
}
if(!MyJs.validateValue(validateCoeUrl, 'code', 'code')) {
$("#codeInfo").html("验证码输入不正确").css("color","#ff0000");
valiFlag.code=false;
return;
}else{
$("#codeInfo").html("验证码正确");
valiFlag.code=true;
}
});
});
$(document).ready(function(){
$('#onlineBookSub').click(function(){
if(valiFlag.childName && valiFlag.parentName && valiFlag.homeTown && valiFlag.contact && valiFlag.code){
alert("注册成功");
$('#onlineBookForm').submit();
}else{
alert("验证不通过");
}
});
});
这个是我写的一个简单的验证,没有验证重复的用户,但上面的已经说得很清楚了,用AJAX就行了