2009-09-25 2 views
1

У меня есть этот маленький код (часть моего регистрационного кода):Validate перед столбом

<?php 
if (@$_POST['Submit'] == 'Register'){ 

    if (strcmp(md5($_POST['user_code']),$_SESSION['ckey'])) 
    { 
     die("Invalid code entered. Please enter the correct code as shown in the Image"); 
    } 
} 
?> 

<form name="form1" id="signupForm" method="post" action="register.php" style="padding:5px;"> 
<div class="reg_left">Security code:</div> 
<div class="reg_right"><input name="user_code" type="text" size="10"> <img src="pngimg.php" align="middle" width="100" height="40"></div> 
<div><input type="submit" name="Submit" class="submit" value="<?php echo $gomb_reg;?>"></div> 
</form> 

К сожалению, это проверить, если код действителен после поста данные форм. Я бы хотел проверить перед публикацией.

Поэтому я думаю, что должен использовать плагин проверки jQuery (btw Я использую jQuery для проверки других полей, таких как электронная почта, пользователь, пароль). Но поскольку я не эксперт в jQuery, мне нужна помощь в написании этого php-кода выше в jQuery.

спасибо.

+0

Похоже, что вам нужен Аякс. $ _SESSION ['ckey'] невозможно получить без него. – Eric

+0

Не ждите, чтобы код * был написан * здесь, но, по крайней мере, немного помог в правильном направлении. –

+0

Я беру это обратно. –

ответ

1

Я считаю, что основной тэк будет:

  • Hook функцию к представить элемент
  • Эта функция JS посылает значение user_code в PHP скрипт
  • PHP-скрипт проверяет значение и и выходы (возвращает) логическое значение (или JSON)
  • функция JS позволяет пост, если хорошее значение возвращается

(Примечание: Так как функция JQuery AJAX не остановить выполнение скрипта, вы должны остановить форму от представления, а затем отправить форму в функции обратного вызова AJAX)

Посмотрите на документы JQuery. для .post или .getJSON, используйте эту функцию для отправки «user_code» для проверки.

+0

Ой, и я думаю, вы могли бы просто дать jQuery код (на загрузку страницы), но это вроде бы поражает весь смысл, теоретически. На практике это все равно остановит большинство ботов (ИМО), но просто придает элементам формы странные (или меняющиеся) имена, а добавление некоторых скрытых элементов с привлекательными именами остановит большинство ботов. –

1

Вы можете сохранить большую часть своего PHP-кода таким же, но вы захотите проверить тип заголовка запроса.

Я уверен, что JQuery отправляет X-Requested-With: XMLHttpRequest, но я не совсем уверен, и его поздно, так что в некоторой степени изменить свой скрипт, это будет выглядеть примерно так

if (@$_POST['submit'] == 'Register') { 
    if (strcmp(md5($_POST['user_code']),$_SESSION['ckey'])) 
    { 
      // check if the request was from an ajax call 
      if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ 

      //if it is an ajax request we need to send back a json encoded array 
      $response = array('success' => 'true', 'message' => 'Invalid code'; 

       // now we encode the array and echo it back 
       echo json_encode($response); 

       // exit the script for safety 
       exit(); 
      } else { 
      // if the request wasn't ajax the respond business as usual 
      die("Invalid code entered. Please enter the correct code as shown in the Image"); 
     } 
    } 
} 

Что касается кода jQuery, то это, вероятно, будет выглядеть примерно так:

$(document).ready(function(){ 

    // this creates an event handler on the form submit 
    $('#signUpForm').submit(function(){ 

      // you'll need to give your user_code input an id of user_code 
      var user_code = $('#user_code').val(); 

      // I like to use the jQuery $.ajax method since it gives you more controll 
      $.ajax({ 
       // send a post request 

       type : 'POST', 

       // the url you'll be sending the request too 

       url: 'register.php', 

       // the type of data you're expecting back 
       // i prefer json since its easier to work with for me 

       dataType : 'json', 

       // the data you want to send which would be your user_code data 
       // send this in a name/value pair 

       data : 'user_code=' + user_code + '&submit=Register', 

       // the success function is called when the ajax call has been 
       // completed, not whether the user_code matches the $_SESSION['ckey'] 
       // the data variable will contain your json data 
       success : function(data, textStatus){ 

        // since we json encoded the php array it will 
        // look something like this 
        //{ success : 'true', message : 'incorrect code'} 

         if(data.success == 'true'){ 
          // what you plan on doing if the code is correct 
          alert(data.message); 
         } else { 
          // what you do if the code is incorrect 
          alert(data.message); 
         } 
       } 
      }); 

     // stop the form from submitting 
     return false; 
    }); 
}); 

Я думаю, что это должно было сделать это. метод $ .ajax имеет несколько других функций обратного вызова, таких как onError, полные и подобные сообщения, которые стоит посмотреть на here. Метод $ .ajax немного пугающий сначала, но после использования его несколько раз, теперь я предпочитаю его над другими методами АЯКСА они имеют ($.load, $.get, $.getJSON или $.post)

Смежные вопросы