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

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

WBOY
Release: 2016-06-20 12:42:47
Original
1050 people have browsed it

<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>
Copy after login



回复讨论(解决方案)

禁用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"}'; 	}}
Copy after login
这是后端处理程序,要怎么判断啊

你在执行 $.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注入的问题。。。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template