Py学习  »  Jquery

如何强制jQueryValidate检查数据库中的重复用户名?

Community wiki • 2 年前 • 500 次点击  

我正在进行这个项目,所以由于代码草率,我不得不重新编写一些内容。我使用的是jQuery 1.6.1和Validate 1.8.1。

首先,这里是运行后端的PHP( 数据库查询.php ):

include("../includes/dbconnection.php");
session_start();

$location='';
$action='';
if($_GET['action']=='')
    $action=$_POST['action'];
else
    $action=$_GET['action'];

if($action=='checkusername'){
    $error='';
    $username=$_GET['username'];
    // exclude denied account
    $checkuserquery=mysql_query("Select * from database_users as user LEFT OUTER JOIN  database_approval as approval on user.user_id=approval.approval_user_id  where (approval.approval_status IS NULL or approval.approval_status <> 4) and user_username='".$username."'");
    $checkuserresult=mysql_numrows($checkuserquery);
    if($checkuserresult>0) {
        $error = 'false';
    } else {
        $error = 'true';
    }
    echo $error;
} 

我正在尝试使用jQueryValidate脚本来动态查询数据库中的现有用户名。我要么得到两个极端:它永远不起作用,要么它总是把给定的用户名作为已取用户名。

我认为问题在于我无法获取username变量的输入值。当我创建 alert (username) 在内部 function (output) ,它什么也不返回。我的假设是 .val() 只有当页面加载时才起作用,因此我在输入中键入的任何内容由于某种原因都不起作用。

以下是我重新编写并从网上来源复制的jQuery:

$(document).ready(function(){

$.validator.addMethod("checkAvailability",function(value,element){
    var username = $("#username").val();
    $.ajax({
          url: "dbquery.php",
          type: "GET",
          async: false,
          data: "action=checkusername&username="+username,
          success: function(output) {
                     return output;
         }
     });
},"Sorry, this user name is not available");

// jQuery Validation script
    $("#signup").validate( {
        rules: {
            username: {
                required: true,
                minlength: 5,
                checkAvailability: true // remote check for duplicate username
            },
        },
        messages: {
            username: {
                required: "Enter a username"
            }
        },
        submitHandler: function(form) {
            form.submit();
        }
    });

});

我只是一个jQuery的初学者,但我对这段代码很不熟悉。我走在正确的轨道上还是应该使用 remote: 在下面 rules username ?有人告诉我 remote 方法不起作用,因为我试图验证的输入值具有动态性。

我遇到的另一个主要问题是,当数据库中已经存在用户名时,才会显示远程错误消息。不幸的是,它显示dbquery.php是否返回为 true false 。如果我尝试现有用户名,它会返回 虚假的 ,然后我重写一个新用户名,该用户名返回 真的 ,信息不会消失。类似地,当我编写用户名时,它返回 真的 ,我仍然收到远程错误消息。

原始编码器引用 getXMLHTTP 和使用 ActiveXObject 。他编程的方法似乎有点过时了,所以我试图让代码更现代一点,并将其清理干净。

5/25- 我正在编辑它,以包括旧的原始JavaScript代码,它可以工作,但使用了我想摆脱的过时方法( 此后,我删除了以下代码,并替换为上面的jQuery ) :

function getXMLHTTP() { //function to return the xml http object
    var xmlhttp=false;    
    try{
        xmlhttp=new XMLHttpRequest();
    }
    catch(e)    {        
        try{            
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
            try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e1){
                xmlhttp=false;
            }
        }
    }

    return xmlhttp;
}
//validate username
function validateUsername(username){
    var strURL="dbquery.php?action=checkusername&username="+username;
    var req = getXMLHTTP();        
    if (req) {            
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                // only if "OK"
                if (req.status == 200) {          
                    if(req.responseText=='notavailable'){
                        document.getElementById("errorusername").style.display="block";
                        document.getElementById("errorusername").innerHTML="<div id=\"errors\"><strong>"+username+"</strong> is already taken by another user.</div>";
                        error = true;
                    }
                    else{
                        error = false;
                        document.getElementById("errorusername").style.display="none";   
                    }

                } else {
                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                }
            }                
        }            
        req.open("GET", strURL, true);
        req.send(null);
    }     
}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/159224
文章 [ 5 ]  |  最新文章 2 年前