2

おそらく単純なものですが、ここで問題が発生しました。ユーザーシステムに単純なキャプチャを実装しましたが、コールバックフォームの検証を使用して、キャプチャが正しいかどうかを確認できないようです。

回答をユーザーセッションに保存し、フォームの検証時に正しいかどうかを確認します。

ここでライブで見ることができます:http://77.96.119.180/beer/user/register ビールへの言及を許してください;)

これが私のコードです:

$this->form_validation->set_rules('captcha', 'Image verification', 'trim|required|xss_clean|integer|callback_captcha_check');

これがフォームの一部です

// CAPTCHA
$random_word = rand(10000, 99999);
$vals = array(
    'word'   => $random_word,
    'img_path'   => './captcha/',
    'img_url'    => 'http://77.96.119.180/beer/captcha/',
    'font_path'  => './captcha/fonts/pdark.ttf',
    'img_width'  => '150',
    'img_height' => 50,
    'expiration' => 7200
);

$cap = create_captcha($vals);

// Store captcha answer in session
$this->session->set_userdata('captcha_answer', $random_word);

$content .= form_label('Please enter the numbers in the box to verify you are human (Hint: Only numbers will appear)', 'captcha');
$content .= '<div class="left" style="margin-left:20px;">' . $cap['image'] . '</div>';
$content .= form_input(array('name' => 'captcha', 'value' => '', 'class' => 'right', 'style' => 'width:75%; margin-top:5px;'));

そしてここにコールバック関数があります

public function captcha_check($str)
    {
        if ($str == $this->session->userdata('captcha_answer'))
        {
            // Captcha is correct
            $this->form_validation->set_message('captcha', 'The %s was wrong, please try again');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }
4

1 に答える 1

2

検証規則はコールバック関数で逆になります。return true と return false のロジックを逆にする必要があります。

if ステートメントを次のように変更するだけです。

if ($str != $this->session->userdata('captcha_answer'))
于 2012-06-21T22:38:14.103 に答える