Ошибка проверки JQuery или ошибка пользователя? - PullRequest
2 голосов
/ 18 августа 2010

Ссылка на рассматриваемый сайт .

Вы можете посмотреть исходный код javascript в JQuery или основную часть здесь:

// validate signup form on keyup and submit
var validator = $("#Register").validate({
    rules: {
        UserID: {
            required: true,
            minlength: 2,
            remote: {
                url: "form_check_user.php",
                type: "post",
            }
        },
        ....

Так что он отправляет form_check_user.php UserID = ValueFromForm

Вот код form_check_user.php:

<?
    if ($_POST['UserID']) {
            $User = strtolower($_POST['UserID']);
            $htpasswd_array = file("/etc/passwd");
            $pattern = "/^$User:/";

          foreach ($htpasswd_array as $key => $value) {
              if (preg_match($pattern, $value)) {
                  echo "false";
                  exit;
              }
          }
          echo "true";
          exit;
    }
    echo "false";
    exit;
?>

Функция работает должным образом, я пытаюсь использовать UserID в качестве пользователя root или любого действующего пользователя linux и обнаруживает, что он недействителен ...

Проблема возникает, если вы вводите "root" в ... Он говорит, что он недействителен ... и вы по-прежнему переходите к следующей форме, а затем показывает [объект Object] уже используется

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

    messages: {
        UserID: {
            required: "Enter a username",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        },

Обновление: 8/20

Я подтвердил, что это ошибка в плагине проверки после отладки. (Хотя я заблудился там, где произошла ошибка, я знаю, что это никак не связано с моим ответом.)

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Я думаю, что нашел ошибку;

Проверка имеет: message = message.call (this, rule.parameters, element);

Это должно быть:

message = message.call (this, message.parameters, element);

после этого исправления все выглядит нормально.Я новичок в JQuery и отлаживаю javascript, поэтому, возможно, его нужно будет протестировать более тщательно, но я думаю, что это была проблема.

Я написал разработчику этого плагина по электронной почте (я заметил несколько проблем с его ошибкойв своем трекере и на форумах JQuery)

0 голосов
/ 18 августа 2010

Я не получаю никакой ошибки при вводе «root» или любого другого имени пользователя в поле имени пользователя (в FF 3.6.8). Я получаю предупреждение, говорящее The 'charCode' property of a keyup event should not be used. The value is meaningless, хотя, если быть честным, я получаю то же предупреждение, пока набираю этот ответ

Вы могли бы несколько упростить свой код и исключить foreach(). Поскольку file() уже считывает содержимое файла в массив, вы можете просто использовать вместо него preg_grep(). Если какие-либо строки массива соответствуют шаблону, они будут возвращены, поэтому ...

$htpasswd_array = file('/etc/passwd');

$matches = preg_grep("/^{$User}:/", $htpasswd_array);

if (count($matches) == 0) {
   echo "false"; // no matches
} else if (count($matches) == 1) {
   echo "true"; // username in use
} else {
   echo "file_not_found"; // in true TDWTF fashion, in case there's multiple accounts
}

комментарий, продолжение:

Хорошо, теперь я тоже получил ошибку. И да, ваше редактирование имеет смысл. Я предполагаю, что jquery и / или плагин валидатора используют декодированный ответ JSON для заполнения этого сообщения, которое будет стандартным объектом. Поскольку вы не возвращаете имя пользователя, о котором идет речь, как часть ответа, бесполезно выводить сам объект, так как он будет содержать true или false. Должен быть какой-то способ ссылаться на содержимое поля ввода и выводить его, поскольку оно содержит неверное имя пользователя.

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