1

キャプチャ入力からのユーザーの応答をテストしようとしています。ユーザーが間違った応答を入力すると、このコードは機能してエラーメッセージを吐き出しますが、ユーザーが正しい応答を入力しても成功メッセージは返されません。実際、応答は空です。私はこれで数日間遊んでいますが、ここで何が起こっているのかわかりません。実際、この構造をアプリの他の部分で使用していて、問題なく動作しています。何が起こっているのか考えてみませんか?

if ($recaptcha_response_field !== '') {

    require_once('recaptchalib.php');
    $privatekey = "removed_this_duh...";
    $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], 
            $recaptcha_challenge_field, $recaptcha_response_field);

    if (!$resp->is_valid) {
        $entry_display = 'Sorry, I know this sucks... 
                          but your entry was invalid, please try again.';
    } else {
        $entry_display = 'success';
    }
return $entry_display;

クライアント側のajaxビジネスは次のとおりです。

function(data) {

    if (data == 'success') {
        alert('success');
        $('#mask').hide();  
        $('#modal_container').hide();

    } else {
        alert(data);
        $('#captcha_error_area').empty().append(data);
        javascript:Recaptcha.reload();
    }

成功すると、これが私がテストしているオブジェクトです。

Failure:     
ReCaptchaResponse Object ( [is_valid] => [error] => incorrect-captcha-sol )

Success: 
ReCaptchaResponse Object
        (
            [is_valid] => 1
            [error] => 
        )
4

2 に答える 2

3

オブジェクトのダンプから、エラーが発生して何かで埋められているis_valid場合は、NULLまたは空のように見えます。errorこの場合、私はあなたのifの順序を切り替えます。なぜなら、1はに評価されtrue、何も評価されないからfalseです。

if($resp->is_valid) {
    $entry_display = 'success'; // is_vald is 1

} else {  // is_valid is empty
    $entry_display = 'Sorry, I know this sucks...but your entry was invalid, please try again.';
}
于 2012-08-19T17:58:00.757 に答える
2

if (!$resp->is_valid) {...コードが失敗のケースに到達しているがelse、成功条件でブロックに進んでいない場合、唯一の可能性は、成功時にコードが実行されていないことです...つまり、次のことを意味します。

if ($recaptcha_response_field !== '') { 実行されていません。captchaプラグインが、戻り値に関して予期しないことをしているのではないかと思います。検証ブロックの外に移動することもincludeできますが、コードの残りの部分が表示されない限り、それが直接問題であるかどうかについてコメントすることはできません。

編集:これは答えであることになったわけではありません、受け入れられた答えはお金に正解です。ただし、私の答えは、似ているが異なる状況で役立つ可能性があるため、そのままにしておきます。

于 2012-08-19T17:38:15.977 に答える