Securimage captcha — несколько форм проверяются случайным образом

У меня есть несколько форм на странице, которые, кажется, проверяют странно или случайно.

  1. Если я правильно введу первый код, одна и та же форма будет проверяться правильно каждый раз, пока код будет введен неправильно. После этой проверки всегда происходит сбой, пока я не нажму на изображение, чтобы перезагрузить его, тогда все начинается нормально.
  2. Независимо от того, обработана ли первая форма, любая другая форма не проходит проверку до тех пор, пока изображение не будет щелкнуто для перезагрузки. Затем он начинает проходить как в пункте 1. Но все другие формы потерпят неудачу.

Пространства имен, похоже, не помогают.

Это view.php:

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

Это controller.php:

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

$ BUID — это уникальный номер блока формы, то есть каждое поле формы уникально.

Похоже, даже если каждая форма уникальна, изображение Securimage создается один для всех, а не как один для каждой формы. И пространства имен по какой-то причине не помогают.

Есть ли способ создать изображение капчи с уникальным кодом и путем для каждой уникальной формы? Или я не правильно использую пространства имен?

Спасибо.

0

Решение

Попробуйте использовать также image_id вариант помимо namespace,

Вот код, который я использую для целей мультикапчи:

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'])) {
*  ....
* }
* */
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]