1

使用

  • jquery 验证器插件
  • jQuery

尝试:

  • 确保数据库中不存在用户名
    • 有一个表格+一个字段+远程检查
    • 我想让 jquery 使用 ajax 检查它是否存在。

什么有效:

  • check-username.php 自己工作

什么不

  • 表单似乎无法传递返回布尔值来验证远程 jquery 验证
  • 如何让它传递值以便验证该字段?

HTML

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js" type="text/javascript"></script> 
    <script language="javascript" src="validate.js"></script>

    <meta name="generator" content="" />
    <style type="text/css"></style>
  </head>
<body>

<form action="/" method="post" id="register-form">
    <div>
        <label for="username">Username<font color="red">*</font>:</label> 
        <input type="text" name="username" size="20" id="username" />
    </div>
    <div>
        <input type="submit" name="submit" value="submit" />
    </div>
</form>
</body>
</html>

JQUERY 验证

$().ready(function() {
    // validate signup form on keyup and submit
    $("#register-form").validate({
        rules: {
            username: {
                required: true,
                remote: "check-username.php"
                },
        },
        messages: {
            username:{
                remote: "This username is already taken! Try another."
            },
        },
    });
});

检查-USERNAME.php

<?php

$searchVal = $_POST['username'];

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$data", $username, $password);

    $sql = "SELECT * FROM users WHERE USERNAME = " . "'" . $searchVal .  "'";
    $stmt = $dbh->query($sql);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

   if($result>0){
     return true;
   }else {
     return false;
   }

    $dbh = null;
    }
        catch(PDOException $e)
    {
        echo $e->getMessage();
    }       
?>
4

3 回答 3

7

为了验证服务器端的值,您应该添加新的验证方法。

$().ready(function() {

    $.validator.addMethod("checkUserName", 
        function(value, element) {
            var result = false;
            $.ajax({
                type:"POST",
                async: false,
                url: "check-username.php", // script to validate in server side
                data: {username: value},
                success: function(data) {
                    result = (data == true) ? true : false;
                }
            });
            // return true if username is exist in database
            return result; 
        }, 
        "This username is already taken! Try another."
    );

    // validate signup form on keyup and submit
    $("#register-form").validate({
        rules: {
            "username": {
                required: true,
                checkUserName: true
            }
        }
    });
});        

如上所述,方法 checkUserName 将验证服务器端并给出错误消息“此用户名已被占用!尝试另一个。 ”如果用户名不存在。

有关 jQuery Validation 及其方法的更多信息和示例:单击此处

希望这会有所帮助。

于 2013-07-21T04:35:37.487 回答
1

没有检查你的代码的其余部分,但试试这个:

<?php
    $searchVal = $_POST['username'];
    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=$data", $username, $password);
        $sql = "SELECT * FROM users WHERE USERNAME = " . "'" . $searchVal .  "'";
        $stmt = $dbh->query($sql);
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        if($result>0) {
            $valid = "true";
        } else {
            $valid = "false";
        }

        $dbh = null;

        echo $value;
    }
    catch(PDOException $e) {
        echo $e->getMessage();
    }       

?>

于 2013-06-28T07:29:20.657 回答
0

这是使用与此处不同的插件的解决方案。要使用 Ajax 调用检查名称可用性,请执行以下操作:

下载附件jquery.validationEngine.js和您的语言环境后,如:

<script src="js/jquery.validationEngine-en.js" type="text/javascript" charset="utf-"></script>
<script src="js/jquery.validationEngine.js" type="text/javascript" charset="utf-8"></script>

请注意,en语言环境也必须包含在内。

打开并修改您的语言文件,您必须指出您的php文件在哪里,它将检查数据库的名称可用性或使用默认文件名。jquery.validationEngine-en.js因此,如果您使用英语,请找到以下行。

 "ajaxUserCallPhp": {
    "url": "phpajax/ajaxValidateFieldUser.php",

如果需要,您可以在此处更改文件名:

 "ajaxUserCallPhp": {
    "url": "my-file_which_will_check_db.php",

my-file_which_will_check_db.php应该看起来像:

<?
/* RECEIVE VALUE */
$validateValue=$_REQUEST['fieldValue'];
$validateId=$_REQUEST['fieldId'];

$validateError= "This username is already taken";
$validateSuccess= "This username is available";

/* RETURN VALUE */
$arrayToJs = array();
$arrayToJs[0] = $validateId;

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); //Connect with your credentials
$stmt = $dbh->query("SELECT * From `users` WHERE `USERNAME` = '{$validateValue}'"); 
$dbh = null;                    // Disconnect

sleep(1); /*added because check is very fast and the label 'checking...' is not visible*/

if ($result = $stmt->fetch()) { 
$arrayToJs[1] = false;          // found user with that name
echo json_encode($arrayToJs);           
}
else {
$arrayToJs[1] = true;
echo json_encode($arrayToJs);       // that user name is free
}
?>

最后,您的 HTML 标记应如下所示:

<input type="text" name="user_name" id="user_name" class="validate[required],custom[onlyLetterNumber],maxSize[20],ajax[ajaxUserCallPhp] text-input" />

请注意此处的附加class属性。

并包括以下脚本:

<script>
  $(document).ready(function(){
  $("#register_form").validationEngine();
  });
</script>
于 2013-06-29T06:19:05.540 回答