Как определить значение входа для удаленной проверки существующих значений (имя пользователя)? - PullRequest
0 голосов
/ 29 мая 2011

Это использует jQuery 1.6.1 и Validate 1.8.1.

Из-за этой проблемы я ударился головой о стену, и теперь я пытаюсь использовать другой подход, чтобы попытаться решить эту проблему. Мне нужно запросить в базе данных существующие имена пользователей, чтобы кто-нибудь, зарегистрировавшийся, больше не регистрировал это имя.

HTML:

<form class="cmxform" action="register.php" method="post" name="signup" id="signup">
   <ul>
      <li>
        <label for="username">Username: <em>*</em></label>
        <input type="text" id="username" name="Username" size="20" class="required" placeholder="Username" />
      </li>
   </ul>
</form>

На этот раз я пытаюсь использовать удаленную функцию для скрипта проверки:

    $("#signup").validate( {
        var username = $("#username").val();
        rules: {
            Username: {
                required: true,
                minlength: 5,
                remote: {
                    url: "dbquery.php",
                    type: "GET",
                    async: false,
                    data: "action=checkusername&username="+username,
                    success: function (output) {
                            return output;
                    }
                }
            }
        },
        messages: {
            Username: {
                required: "Enter a username",
                remote: jQuery.format("Sorry, {0} is not available")
            },
        },
        submitHandler: function(form) {
            form.submit();
        }
    });

Код, который не работает, var username = = $("#uname").val();. Firebug выдает ошибку missing : after property id.

Я включил упомянутую выше переменную в validate(), потому что мне нужно значение ввода только после того, как я что-то в него ввел, а не при загрузке страницы.

Другая проблема, с которой я столкнулся, заключается в том, что удаленное сообщение об ошибке появляется ТОЛЬКО, когда имя пользователя уже существует в базе данных. К сожалению, он показывает, возвращается ли dbquery.php как true или false. Если я пробую существующее имя пользователя, оно возвращает false, затем я переписываю новое имя пользователя, которое возвращает true, сообщение не исчезает. Точно так же, когда я пишу имя пользователя и оно возвращает true, я все равно получаю удаленное сообщение об ошибке.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Как вы можете прочитать Как заставить jQuery Validate проверять наличие дублированного имени пользователя в базе данных?

Решение состоит в том, чтобы использовать свойство remote:

Пример с remote:

$("#signup").validate( {
    rules: {
        username: {
            required: true,
            minlength: 5,
            remote: {
                url: "dbquery.php",
                type: "get",
                data: {
                    action: function () {
                        return "checkusername";
                    },
                    username: function() {
                        var username = $("#username").val();
                        return username;
                    }
                }
            }
        }
    },
    messages: {
        username: {
            required: "Enter a username"
        }
    },
    submitHandler: function(form) {
        form.submit();
    }
});

Чтобы установить пользовательское сообщение об ошибке, ваш PHP-файл должен возвращать сообщение вместо false, поэтому echo "Sorry, this user name is not available" в вашем PHP-файле.

0 голосов
/ 29 мая 2011
var username = $("#uname").val();

вместо

var username = = $("#uname").val();

Вы не можете иметь = =, это синтаксическая ошибка.

Также убедитесь, что вы правильно экранировали $ ("# username"). Val (). Если кто-то введет: myname&action=dosomethingelse Я бы дал справедливое изменение, это будет dosomethingelse.

Новый ответ:

$("#signup").validate( {
    var username = $("#username").val(); // -- this is wrong
    rules: {
        Username: {
            required: true,
      ...
});

Вы можете исправить это простым способом, просто не объявляя переменную вообще, поскольку вы используете только одно место, но это не весело: D

Решение закрыто:

$("#signup").validate( (function () {
    var username = $("#username").val();
    return {
        rules: {
            Username: {
                required: true,
                minlength: 5,
                remote: {
                    url: "dbquery.php",
                    type: "GET",
                    async: false,
                    data: "action=checkusername&username="+username,
                    success: function (output) {
                            return output;
                    }
                }
            }
        },
        messages: {
            Username: {
                required: "Enter a username",
                remote: jQuery.format("Sorry, {0} is not available")
            }
        },
        submitHandler: function(form) {
            form.submit();
        }
    };
}()));

(я не проверял, может быть опечатка или синтаксическая ошибка). Если вы не знаете, что это делает и почему, не беспокойтесь об этом: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...