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

东风破1994 2015-12-11 03:31:50

<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>


...全文
718 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwk44 2015-12-12
  • 打赏
  • 举报
回复
关键是php端的校验太简单了,会有sql注入的问题。。。
u011543604 2015-12-11
  • 打赏
  • 举报
回复
你这样你不觉得很费事吗? 你在前台用JS 做一下简单的字段验证, 要实现不重复注册的话 放到后台 例:张三 你先查一下数据库里是否有张三 如果没有则放行 如果有则提示已经有了不就行了
东风破1994 2015-12-11
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
你在执行 $.post() 时并没有判断 $("#namediv").html() 是否为空(用户名存在) 也就是不管用户名是否存在,$.post() 都会被执行 你在执行 $sql = "insert into users (name,password) values ('{$name}','{$password}');"; 时,同样也没有检查用户名是否已存在 也就是不管用户名是否存在,$.post()$res = mysql_query($sql); 都会被执行 这两处疏漏就是 户名存在还是能注册 的原因
所以我觉得我的代码很不合理,提交时搞个点击事件,检测用户名时搞个触发事件,这样我注册的时候根本没法判断用户名是不是存在了,我觉得要换个写法了。
xuzuning 2015-12-11
  • 打赏
  • 举报
回复
你在执行 $.post() 时并没有判断 $("#namediv").html() 是否为空(用户名存在) 也就是不管用户名是否存在,$.post() 都会被执行 你在执行 $sql = "insert into users (name,password) values ('{$name}','{$password}');"; 时,同样也没有检查用户名是否已存在 也就是不管用户名是否存在,$.post()$res = mysql_query($sql); 都会被执行 这两处疏漏就是 户名存在还是能注册 的原因
东风破1994 2015-12-11
  • 打赏
  • 举报
回复
引用 2 楼 ustb 的回复:
一切客户端的校验都是可以绕过的,这事得交给服务器端来做,前端的js只是为了提供更好的体验。 在你的最终提交程序中加上用户存在性的判断就可以了。

//判断是GET方式还是POST
if(($_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"}'; 
	}
}
这是后端处理程序,要怎么判断啊
ustb 2015-12-11
  • 打赏
  • 举报
回复
一切客户端的校验都是可以绕过的,这事得交给服务器端来做,前端的js只是为了提供更好的体验。 在你的最终提交程序中加上用户存在性的判断就可以了。
lirenbing008 2015-12-11
  • 打赏
  • 举报
回复
禁用JS 你这个代码什么用都没有 后端也得进行判断

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧