首頁  >  文章  >  後端開發  >  求教一个问题,注册时检测用户名如果存在的话,不让它注册成功,下面这样写用户名存在还是能注册。

求教一个问题,注册时检测用户名如果存在的话,不让它注册成功,下面这样写用户名存在还是能注册。

WBOY
WBOY原創
2016-06-20 12:42:471016瀏覽

<script>$(function(){	//检测用户名是否存在	 $("#name").blur(function(){	        //$parent=$("#user_name").parent();	       $.get("deal.php",{username:$("#name").val()},	    	function(data){		    	if(data.status==1){	    	   $("#namediv").html('<font color=red>用户名已存在</font>');	           //$parent.append('<span>'+data+'</span>');		    	}	      },'json');	 });	//提交注册	 	    $("#sub").click(function(){	   //var rule = /^[-\da-zA-Z!@#$%^&*_]*$/;	   var reg =/^[a-za-z0-9]+$/;	   var v = $.trim($("#password").val());	  	  if($("#name").val()=='' || $.trim($("#password").val())=='' || $("#confirmpassword").val()==''){ 	 	    if($.trim($("#name").val())==''){ 	    	     $("#namediv").html('<font color=red>用户名不能为空</font>');	    	     $("#name").focus();     	    	 }else{	    	     $("#namediv").html('');	    	 }	    	 if($.trim($("#password").val())==''){	    	     $("#pwddiv").html('<font color=red>密码不能为空</font>');	    	     $("#password").focus();     	    	 }else{	    	     $("#pwddiv").html('');	    	 }             if($("#confirmpassword").val()==''){            	 $("#confirmpwd").html('<font color=red>确认密码不能为空</font>');	    	     $("#confirmpassword").focus();             }else{            	 $("#confirmpwd").html('');             }    	              }else if($("#confirmpassword").val()!=$("#password").val()){    	    $("#confirmpwd").html('<font color=red>确认密码不正确</font>');    	    $("#namediv,#pwddiv").html('');       }else if(reg.test(v)){    	   $("#pwddiv").html('<font color=red>密码格式不正确</font>');    	   $("#namediv,#confirmpwd").html('');         	          }else{  		   $.post("deal.php",{name:$("#name").val(),password:$("#password").val(),code:$("#TextBox2").val()},	       function(data){		   if(data.status==1){	         alert('注册成功');	         $("#namediv,#pwddiv,#confirmpwd").html('');         		  		   }else{			 alert('验证码错误!');			 $("#namediv,#pwddiv,#confirmpwd").html('');		    }	      },'json');      }  }); });	</script>



回复讨论(解决方案)

禁用JS 你这个代码什么用都没有
后端也得进行判断 

一切客户端的校验都是可以绕过的,这事得交给服务器端来做,前端的js只是为了提供更好的体验。
在你的最终提交程序中加上用户存在性的判断就可以了。

一切客户端的校验都是可以绕过的,这事得交给服务器端来做,前端的js只是为了提供更好的体验。
在你的最终提交程序中加上用户存在性的判断就可以了。

//判断是GET方式还是POSTif(($_SERVER['REQUEST_METHOD'] == 'GET')){	$name1=$_GET['username'];	$sql="select * from users where name='$name1'";	$result=mysql_query($sql);	$num=mysql_num_rows($result);	if($num==0){		echo '{"status": "2"}';	}	else{		//echo"<span style='color:red'>用户名存在</span>";		echo '{"status": "1"}';	} }else{	$name=trim($_POST['name']);	$password = trim(md5($_POST['password']));	$code=trim($_POST['code']);	if(strlen($code)>1 and $code!==$_SESSION['code']){		$sql = "insert into users (name,password) values ('{$name}','{$password}');"; 	$res = mysql_query($sql);	if($res){		echo '{"name": "'.$name.'","password": "'.$password.'","status": "1"}'; 	}	}else{		echo '{"status": "2"}'; 	}}
这是后端处理程序,要怎么判断啊

你在执行 $.post() 时并没有判断 $("#namediv").html() 是否为空(用户名存在)
也就是不管用户名是否存在,$.post() 都会被执行

你在执行 $sql = "insert into users (name,password) values ('{$name}','{$password}');"; 时,同样也没有检查用户名是否已存在
也就是不管用户名是否存在,$.post()$res = mysql_query($sql); 都会被执行

这两处疏漏就是 户名存在还是能注册 的原因

你在执行 $.post() 时并没有判断 $("#namediv").html() 是否为空(用户名存在)
也就是不管用户名是否存在,$.post() 都会被执行

你在执行 $sql = "insert into users (name,password) values ('{$name}','{$password}');"; 时,同样也没有检查用户名是否已存在
也就是不管用户名是否存在,$.post()$res = mysql_query($sql); 都会被执行

这两处疏漏就是 户名存在还是能注册 的原因

所以我觉得我的代码很不合理,提交时搞个点击事件,检测用户名时搞个触发事件,这样我注册的时候根本没法判断用户名是不是存在了,我觉得要换个写法了。

你这样你不觉得很费事吗?
你在前台用JS 做一下简单的字段验证, 要实现不重复注册的话 放到后台  例:张三
你先查一下数据库里是否有张三 如果没有则放行  如果有则提示已经有了不就行了

关键是php端的校验太简单了,会有sql注入的问题。。。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn