Как сделать почтовый запрос для моего reCaptcha ajax api? - PullRequest
0 голосов
/ 22 сентября 2010

Моя reCaptcha теперь включена в мой процесс регистрации с использованием ajax ..

В настоящее время, независимо от того, что набрано в текстовом поле капчи, оно никогда не проверяется. Он просто продолжает давать мне новые слова для ввода.

Я подумал, что это потому, что мне нужно проверить, правильно ли пользователь ввел правильный код проверки. Мне нужно отправить запрос POST.

Я понятия не имею, как это сделать .. Мне никогда не приходилось делать это раньше, и документация для меня недостаточно ясна ..

Буду признателен за любую помощь.

Вот мой код:

$(document).ready(function(){

    $('#fhjoinForm').submit(function(e) {

        register();
        e.preventDefault();

    });

});


function register()
{
    hideshow('loading',1);
    error(0);

    $.ajax({
        type: "POST",
        url: "submit.php",
        data: $('#fhjoinForm').serialize(),
        dataType: "json",
        success: function(msg){

                if(parseInt(msg.status)==1)
                {
                Recaptcha.create("pub key xxxxxxxxxxx",
               "recaptcha_div",
                {
                theme: "clean",
                callback: function(){
                // what to do on success
                window.location=msg.txt;
         }

            }

     );
   }

            else if(parseInt(msg.status)==0)
            {
                error(1,msg.txt);
            }

            hideshow('loading',0);
        }
    });

}


function hideshow(el,act)
{
    if(act) $('#'+el).css('visibility','visible');
    else $('#'+el).css('visibility','hidden');
}

function error(act,txt)
{
    hideshow('error',act);
    if(txt) $('#error').html(txt);
}

Это для моего почтового запроса

<?php
require_once('recaptchalib.php');
$publickey = "pub key hidden"; // you got this from the signup page
$privatekey = "priv key hidden";

$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

if ($resp->is_valid) {
    ?>success<?
}
else 
{
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
       "(reCAPTCHA said: " . $resp->error . ")");
}
?>

1 Ответ

1 голос
/ 22 сентября 2010

Ваш код jQuery выглядит так, как будто он создает reCAPTCHA после отправки формы, потому что он создает ее в функции success () после того, как PHP попытался проверить. Но на самом деле reCAPTCHA должен быть создан и отображен первым.

Затем в форме отправьте регистр запуска и позвольте PHP проверить значение.

  1. Отобразить reCAPTCHA и ждать, пока пользователь не отправит
  2. Отправьте AJAX в PHP и позвольте recaptcha_check_answer сделать свою работу
  3. Отображение ошибки или успеха для пользователя.
...