jQuery Validation Plugin - сравните два поля формы в одном удаленном вызове - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь использовать плагин проверки JQuery для смены имени пользователя. Мне удалось использовать удаленную опцию, чтобы проверить, найдено ли имя пользователя в моей базе данных. Ниже мой рабочий пример. Однако, если Питер из примера формы не меняет свое имя, поле является недействительным, потому что имя уже находится в базе данных. Мне как-то нужно включить условие - если #new_name совпадает с #current_name, поле #new_name является действительным. Возможно ли это?

Плагин проверки jQuery

<script type="text/javascript">
$(document).ready(function(){
   $("form").validate({
      rules: {
         new_name: {
            required: true,
            remote: {
               url: "names.php",
               type: "post",
             }
         }
      },
      messages: {
         new_name: {
            remote: jQuery.validator.format("{0} is already taken, please enter a different name.") 
     }
      }
   });
});
</script>

HTML-форма:

<form method="post" id="myForm" action="">
 <!-- User enters a new name -->
 <input id="new_name" name="new_name" value="peter" type="text" />
 <!-- This is a current username, populated from the database -->
 <input id="current_name" name="current_name" value="peter" readonly="readonly" />
 <input type="submit" name="submit" id="submit"/>
</form>

Удаленный вызов: names.php

<?php
   $request = trim(strtolower($_REQUEST['new_name']));
   // Here is the array of all user names in my database.
   $names = array('peter','jane','bill','george');
   $valid = 'true';
   foreach($names as $name) {
      if( strtolower($name) == $request ) {
         $valid = 'false';
      }
   }
   echo $valid;
?>

Ответы [ 3 ]

0 голосов
/ 03 марта 2012
rules: {
         new_name: {
            required: true,
            remote: {
               url: "names.php",
               type: "post",
               data: current_name: function () {
                return $('current_name').val();
                  new_name: function () {
                return $('new_name').val();
            }
             }
         }
      },
0 голосов
/ 29 августа 2012

Вы не сверяете текущее имя с новым.

Попробуйте это:

<?php
    $request = trim( strtolower( $_REQUEST['new_name'] ) );
    $old = trim( strtolower( $_REQUEST['current_name'] ) );
    // Here is the array of all user names in my database.
    $names = array( 'peter', 'jane', 'bill', 'george' );
    $valid = 'true';

    if ( $request == $old ) {
        $valid = "true";
    } else {
        foreach ( $names as $name ) {
            if ( strtolower( $name ) == $request ) {
                $valid = 'false';
            }
        }
    }
    echo $valid;
?>

Теперь вы возвращаете true, если имя не было изменено, и проверяете только, когда оно изменяется.

0 голосов
/ 03 марта 2012

Я думаю, что вы должны сделать (на стороне сервера)

$request = trim(strtolower($_REQUEST['new_name']));
// Here is the array of all user names in my database.
$names = array('peter','jane','bill','george');
$valid = true;
foreach($names as $name) {
  if( strtolower($name) == $request ) {
     $valid = false;
  }
}
echo json_encode($valid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...