php运用validate+ajax检测用户名是否已存在

前提:如果还不知道什么是validate,请前往这里


一.remote

rules:

复制代码
username:{
           required:true,
           minlength:8,
           maxlength:8,
           remote: {
              url: 'validateUsername2.php',
              type: 'POST',
              dateType: 'json',
              data: { username:function(){
              return $('#username').val();
              }
             }
          }
        }
复制代码

 

messages:

username:{
             required:"账号不能为空",
             minlength:"账号不得少于8位",
             maxlength:"账号不能多于8位",
             remote: "该账号已被注册"
                }

ajax url处的php文件(使用remote需要在该文件输出true/false):

复制代码
<?php
include 'conn.php';
$username=$_POST['username'];
$sql="SELECT * FROM user where uname = '".$username."'";
$isExist =$conn->query($sql);
if ($isExist->num_rows == 0){
    echo 'true';

}
else{
   echo 'false';
}
复制代码

 

二.自定义

rules:

 username:{
             required:true,
             minlength:8,
             maxlength:8,
             checkStudentid:true
              }

messages:

 username:{
            required:"账号不能为空",
            minlength:"账号不得少于8位",
            maxlength:"账号不能多于8位",
            checkStudentid: "该账号已被注册"
                  }

再加以下方法

复制代码
 //账号验证
      $.validator.addMethod("checkStudentid",function () {
              //定义一个标志
            var flag=false;
              $.ajax({
                  async:false,
                  url:"validateUsername.php",
                  data: { username: $("#username").val()},//data为该页面用户名id的值
                  type:"POST",
                  dataType:"json",
                  success:function (data) {
                      flag = (data == 1? false : true);
                  }
              });
              //如果false代表该效验不通过
          return !flag;
          }

      )
复制代码

!!!!注意这个async写成false,这个是解决等待的问题,如果不处理成false,则会先return !flag 后执行ajax并对flag赋值,导致出错(被这个坑了很长时间)。

 

ajax url处的php文件(使用自定义方法该文件只需输出你所需要的结果,可以是false/true或者1/0或者其他,看你在ajax里面是怎么写的了):

复制代码
<?php
include '../conn.php';
$username=$_POST['username'];
$sql="SELECT * FROM user where uname = '".$username."'";
$isExist =$conn->query($sql);//此处连接数据库
if ($isExist->num_rows == 0){
    echo 1;
}
else{
    echo 0;
}
复制代码

 个人感觉使用自定义比remote显示结果要快,所以建议自定义。

 

结果截图:

 

 

 

posted @   睡觉不困  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示