织梦实现ajax用户注册功能
-------------------------------html代码-----------------------------------
//表单提交时先走Doreg() js函数。
<form onsubmit="return Doreg();">
<input type="hidden" name="fmdo" value="reg">
<h3>注册<p class="status"></p></h3>
<p class="user_name">
<input id="user_name" type="text" name="user_name" placeholder="输入英文登录名">
</p>
<p class="user_pass">
<input id="user_pass" type="password" name="user_pass" placeholder="密码最小长度为6">
</p>
<p class="user_pass2">
<input type="password" id="user_pass2" name="user_pass2" placeholder="再次输入密码">
</p>
<p class="user_email">
<input id="user_email" type="email" name="user_email" placeholder="输入常用邮箱">
</p>
<p class="vdcode_reg">
<input type="text" id="vdcode_reg" name="vdcode_reg" placeholder="验证码">
<img id="vdcode_reg" onclick="this.src=this.src+'?'" alt="看不清?点击更换" src="/include/vdimgck.php">
</p>
<p>
<input type="submit" value="注册" name="submit">
</p>
</form>
function Doreg(){ var fmdo = $("input[name='fmdo']").val(); var user_name = $("input[name='user_name']").val(); var user_pass = $("input[name='user_pass']").val(); var user_pass2 = $("input[name='user_pass2']").val(); var user_email = $("input[name='user_email']").val(); var vdcode_reg = $("input[name='vdcode_reg']").val(); var errmsg = $("<label class='error'></label>"); //创建一个label元素作为存放错误信息容器 var zyw = /^(([a-zA-Z]))[a-zA-Z]*$/; //正则表达式,判断只能是英文 var emailyz = /w+[@]{1}w+[.]w+/; //正则表达式,判断邮箱格式是否正确 //判断数据是否合法,没问题再提交给后台 if(user_name==''){ //拼接错误提示信息并放到触发的输入框 errmsg.html("请"+$("#user_name").attr("placeholder")).attr("id","username-error").appendTo(".user_name"); return false }else if(!zyw.test(user_name)){ errmsg.html("登录名只能是英文").attr("id","username-error").appendTo(".user_name"); return false }else if(user_name.length < 3){ errmsg.html("登录名不能小于3位").attr("id","username-error").appendTo(".user_name"); return false }else if(user_pass==''){ $(".error").html(""); errmsg.html("请输入密码").attr("id","password-error").appendTo(".user_pass"); return false }else if(user_pass.length < 6){ $(".error").html(""); errmsg.html("密码不能小于6位").attr("id","password-error").appendTo(".user_pass"); return false }else if(user_pass2==''){ $(".error").html(""); errmsg.html("请"+$("#user_pass2").attr("placeholder")).attr("id","password2-error").appendTo(".user_pass2"); return false }else if(user_pass2!=user_pass){ $(".error").html(""); errmsg.html("两次输入密码不一致").attr("id","password2-error").appendTo(".user_pass2"); return false }else if(user_email==''){ $(".error").html(""); errmsg.html("请"+$("#user_email").attr("placeholder")).attr("id","email-error").appendTo(".user_email"); return false }else if(vdcode_reg==''){ $(".error").html(""); errmsg.html("请输入"+$("#vdcode").attr("placeholder")).attr("id","vdcode-error").css({right:'95px'}).appendTo(".vdcode_reg"); return false }else{ $(".error").html(""); $.ajax({ type: 'post', url: '/ajax_login.php', data: { fmdo: fmdo, step: '1', myset: 'ajax_reg', dopost: 'ajax_reg', user_name: user_name, user_pass: user_pass, user_pass2: user_pass2, user_email: user_email, vdcode_reg: vdcode_reg, }, dataType: "json", beforeSend: function () { // 禁用按钮防止重复提交 $(".status").html("提交中..."); $(".submit").attr({ disabled: "disabled" }); }, success: function(reg){ if(reg.son=="ok"){ $(".status").html("<i>注册成功并已登录,正在为您刷新...</i>"); //设置定时器一秒后刷新页面 setTimeout(function(){ location.reload() }, 1000) return false }else if(reg.son=="err"){ $(".status").html(""); if(reg.foid=="vdcode_reg"){ $(".error").html(""); errmsg.html(reg.msg).attr("id",reg.foid+"-error").css({right:'95px'}).appendTo("."+reg.foid); }else{ $(".error").html(""); errmsg.html(reg.msg).attr("id",reg.foid+"-error").appendTo("."+reg.foid); } setTimeout(function(){ $(".submit").removeAttr("disabled"); }, 2000) $("#"+reg.foid).focus(); return false } } }); return false } }
-------------------------------php代码-----------------------------------
require_once(DEDEMEMBER.'/config.php'); if($fmdo=='reg'){ if($step == 1){ //N表示关闭了新用户注册 if($cfg_mb_allowreg=='N'){ //如果$myset=='ajax_reg'为TRUE,表示是ajax请求,给它返回json数据 if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"系统关闭了新用户注册","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg('系统关闭了新用户注册!', '/i/'); exit(); } if(!isset($dopost)) $dopost = ''; //$step非数字部分转为空 $step = empty($step)? 1 : intval(preg_replace("/[^d]/", '', $step)); if($dopost=='ajax_reg'){ $mtype = '个人'; $userid = trim($user_name); $user_uname = $userid; $pwd = trim($user_pass); $pwdc = trim($user_pass2); //该函数检查准备注册的用户名是否合法,乱码字符和系统关键词等不允许作为用户名 $rs = CheckUserID($userid, '用户名'); if($rs != 'ok'){ if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>$rs,"foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg($rs, '-1'); exit(); } if(strlen($userid) > 20 || strlen($user_uname) > 36){ if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"登录名不能大于20位","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg('你的用户名或用户笔名过长,不允许注册!', '-1'); exit(); } if(strlen($userid) < $cfg_mb_idmin){ if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"登录名不能小于".$cfg_mb_idmin."位","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg("你的用户名过短,不允许注册!","-1"); exit(); } //检测用户名是否存在 $row = $dsql->GetOne("SELECT mid FROM `dede_member` WHERE userid LIKE '$userid' "); if(is_array($row)){ if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"登录名已存在","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg("你指定的用户名 {$user_uname} 已存在,请使用别的用户名!", "-1"); exit(); } if(strlen($pwd) < $cfg_mb_pwdmin){ if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"密码不能小于".$cfg_mb_pwdmin."位","foid"=>"user_pass"); echo json_encode($arr); exit; } ShowMsg("你的用户名或密码过短,不允许注册!","-1"); exit(); } //获取session中的验证码,并跟用户输入的验证码进行比较,看是否一致。 $svali = GetCkVdValue(); if(preg_match("/1/", $safe_gdopen)){ if(strtolower($vdcode_reg)!=$svali || $svali=='') { ResetVdValue(); if($myset=='ajax_reg'){ $arr = array("son"=>"err","msg"=>"验证码错误","foid"=>"vdcode_reg"); echo json_encode($arr); exit; } ShowMsg('验证码错误!', '-1'); exit(); } } //给会员表的其它参数赋默认值 $dfscores = 0; $dfmoney = 0; $dfrank = $dsql->GetOne("SELECT money,scores FROM `dede_arcrank` WHERE rank='10' "); if(is_array($dfrank)) { $dfmoney = $dfrank['money']; $dfscores = $dfrank['scores']; } $jointime = time(); $logintime = time(); $joinip = GetIP(); $loginip = GetIP(); $pwd = md5($pwd); $mtype = RemoveXSS(HtmlReplace($mtype,1)); $safeanswer = HtmlReplace($safeanswer); $safequestion = HtmlReplace($safequestion); $spaceSta = ($cfg_mb_spacesta < 0 ? $cfg_mb_spacesta : 0); //把用户信息插入dede_member数据表 $inQuery = "INSERT INTO `dede_member` (`mtype` ,`userid` ,`pwd` ,`uname` ,`sex` ,`rank` ,`money` ,`email` ,`scores` , `matt`, `spacesta` ,`face`,`safequestion`,`safeanswer` ,`jointime` ,`joinip` ,`logintime` ,`loginip` ) VALUES ('$mtype','$userid','$pwd','$user_uname','$sex','10','$dfmoney','$user_email','$dfscores', '0','$spaceSta','','$safequestion','$safeanswer','$jointime','$joinip','$logintime','$loginip'); "; if($dsql->ExecuteNoneQuery($inQuery)){ //模拟用户登录 $cfg_ml = new MemberLogin(7*3600); $rs = $cfg_ml->CheckUser($userid, $user_pass); if($myset=='ajax_reg'){ $arr = array("son"=>"ok","msg"=>"注册成功并已登录","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg("注册成功并已登录,点击确定后返回注册前的页面","-1"); exit; } else { if($myset=='ajax_reg'){ $arr = array("son"=>"err1","msg"=>"注册失败 请联系管理员","foid"=>"user_name"); echo json_encode($arr); exit; } ShowMsg("注册失败,请检查资料是否有误或与管理员联系!", "-1"); exit(); } } } }