2017-12-12 14 views
0

ページに複数のフォームがあり、奇妙またはランダムに検証されているようです。Securimageのcaptcha - 複数のフォームがランダムに検証されます

  1. 最初のコードを正しく入力すると、コードが正しく入力されなくなるまで、同じフォームが正しく検証されます。画像をクリックしてリロードするまで、この検証が失敗すると、すべて正常に起動します。
  2. 最初に処理されたフォームに関係なく、イメージをクリックしてリロードするまで、他のフォームは検証に失敗します。その後、ポイント1のように渡りますが、他のフォームはすべて失敗します。

名前空間が役に立たないようです。

これはview.phpです:

$captcha->setNamespace($bUID); 
$captcha->display(); 
echo $form->text('code'.$bUID, $code); 

これはcontroller.phpです:$ BUIDは、ユニークな形のブロック番号である

$captcha->setNamespace($_POST['buid']); 
if (!$captcha->check('code')) { 
    array_push($this->form_errors, $this->error_code); 
} 

、それは、各フォームフィールドがユニークです。

各フォームが一意であるように見えますが、Securimageイメージはフォームごとに1つずつ作成されるのではなく、1つずつ作成されます。名前空間は何らかの理由で助けにならない。

固有のフォームごとに一意のコードとパスを持つキャプチャ画像を作成する方法はありますか?または、名前空間を正しく使用していないのですか?

ありがとうございます。

+0

有効にした場合secureimageは、セッション変数やクッキーに正しい答えを保存します。新しい呼び出しを生成する各呼び出しはこれを上書きします – pokeybit

+0

setNamespaceは数値のみ可能ですか? – pokeybit

+0

私は$ captcha-> ​​setNamespace((string)$ bUID)を試しました。 - 変わりはない。私が見た例では、セッションやクッキーを使用していません。一意のパスを持つブロックごとにイメージの一意のインスタンスを生成する方法はありますか? – linuxoid

答えて

0

image_id以外にもnamespaceのオプションを使用してみてください。私はmulticaptchaの目的のために使用ここで

コード:

require_once 'inc/securimage/securimage.php'; 

define('SECURIMAGE_OPTIONS', array(
    'securimage_path' => 'inc/securimage', 
    'input_text' => 'Введите проверочный код', 
    'show_audio_button' => false 
)); 

function display_captcha($identity){ 
    echo Securimage::getCaptchaHtml(
     array_merge(
      SECURIMAGE_OPTIONS, 
      array("image_id"=>$identity, 
       "namespace"=>$identity, 
      ) 
     ) 
    ); 

    $input_attrs = array(); 
    $input_attrs['type'] = 'hidden'; 
    $input_attrs['name'] = 'namespace'; 
    $input_attrs['id'] = 'namespace'; 
    $input_attrs['value'] = $identity; 
    //with captcha component I add tag <input type="hidden" name="namespace" ... /> for using in validation script 
    $input_attr = ''; 
    foreach($input_attrs as $name => $val) { 
     $input_attr .= sprintf('%s="%s" ', $name, htmlspecialchars($val)); 
    } 
    echo(sprintf('<input %s/>', $input_attr)); 
} 

/* 
* Now you can use multiple captchas in forms: with names: captcha1 
* <?php display_captcha("captcha1"); ?> 
* 
* And valudation code: 
* $image = new Securimage(); 
* if(isset($_POST['namespace'])){ 
* $namespace = $_POST['namespace']; 
* $image->setNamespace($namespace); 
* } 
* if (!$image->check($_POST['captcha_code'])) { 
* .... 
* } 
* */ 
関連する問題