Xpoint
   [напомнить пароль]

Вставить капчу в шаблон Smarty

Метки: [без меток]
[удл]
2011-02-19 18:28:58 [обр] sevalery[досье]

Здравствуйте!
Пробую (только учусь) вставить капчу в шаблон Smapty. Не получается. Необходима помощь!
Решил использовать готовое решение kcaptcha от (http://www.captcha.ru/kcaptcha/).
Создал в корне папку kcaptcha, поместил в нее папку ‘fonts’ и файлы kcaptcha.php и kcaptcha_config.php.
Создал файл captcha.php и поместил его в ту же папку.

?php
include('kcaptcha.php');
session_start();
$captcha = new KCAPTCHA();
$_SESSION['captcha_keystring'] = $captcha->getKeyString();
?

В файле add.tpl (templates/new/ board/ add.tpl )в форму ввода нового объявления добавил запись:

p>Введите текст, показаний ниже:</p>
<p><img src="{$path_templates}kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p><input type="text" tabindex="9"  name="keystring">{$error_captcha_keystring}</p>
<p><input type="submit" tabindex="10" value="Проверить"></p

далее идет

INPUT id="submit" tabindex="11" type="submit" value="Добавить объявление (CTRL+ENTER)" name="submit">
<INPUT type="hidden" name="data_check" value="ok">
</FORM

Картинка появилась, изображения цифр при нажатии "Проверить" обновляется.
Теперь необходимо проверку капчи (в этом виде проверено – работает) на соответствие кода:

?php
if(count($_POST)>0){
   if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
      echo "Правильно";
   }else{
      echo "Неправильно";
   }
}
unset($_SESSION['captcha_keystring']);
?

Вставить в файл - message.php
В файле message.php (в корне)

?php
  $open_error_tpl='<br>&nbsp<font size="1" color=A14F4F>';
  $close_error_tpl='</font>';
$MSG['1'] = $open_error_tpl.'Длина не может превышать 15 символов'.$close_error_tpl;

добавил запись сообщение об ошибке

$MSG['45'] = $open_error_tpl.'Введенные символы не соответствуют проверочному слову'.$close_error_tpl;

в части проверки на соответствие условий при заполнении полей формы

if (strlen($f_user_names) > 15)  $err[1]=$MSG['1'];

добавил

if (isset($_SESSION['captcha_keystring']) && !empty($_SESSION['captcha_keystring']) && isset($_POST['captcha_string']) && $_SESSION['captcha_keystring'] != $_POST['captcha_string']) $err[45]=$MSG['45'];
 unset($_SESSION['captcha_keystring']);

  - убрал значение CAPTCHA из сессии
в части

$smarty->assign('error_user_category', $err[21]);

добавил

$smarty->assign('error_captcha_keystring', $err[45]);

в части

$smarty->assign("name_site",$name_site);

добавил

$smarty->assign('kaptcha','kcaptcha/index.php?' .str_replace(array(' ', '.'), '', microtime()));

в части

}else{

$error_flooder=$err[36];

добавил

$error_captcha_keystring=$err[45];

Сообщение об ошибке 'Введенные символы не соответствуют проверочному слову' – не выводятся.
При условии правильного заполнения остальных полей формы, при нажатии "Проверить" выполняется "Добавить объявление".
Не могу понять, где ошибка?

спустя 19 часов [обр] Phlinten(0/14)[досье]

Лень разбиратся.
Там встраивать ничего не нужно

  1. создаете скрипт captcha.php, пускай будет в корне, скрипт отдает картинку и пишет значение в сессию
  2. создаете смарти плагин примерно такого вида
  function smarty_function_captcha($params, &$smarty) {
          extract($params);

          if (@!$_REQUEST[session_name()]) session_start();

          $out  = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
          $out .= "<tr>\n";
          $out .= "<td width=\"120\" valing=\"top\"><div><img id=\"captcha\" src=\"". WEB_ROOT .'/captcha.php?'. substr(rand(), 0, 5) ."\" border=\"0\"></div><div><a href=\"#\" onclick=\"var e=document.getElementById('captcha');e.src='/captcha.php?' + Math.random();return false;\" title=\"Нажать, если не смогли прочесть надпись. Покажем другую.\">обновить картинку</a></div></td>";
          $out .= "<td valign=\"top\" align=\"center\"><input type=\"text\" name=\"code\" size=\"10\" maxlenght=\"5\" class=\"inputbox\" style=\"font-size:2em; font-weight:normal;\" /><br/><span style=\"color:#999;\">(5 символов с картинки)</span></td>";
          $out .= "</tr>\n";
          $out .= "</table>\n";

          return $out;
  }

вызывается в шаблоне так {captcha}
всё, больше смарти ни где не используется

спустя 18 часов [обр] sevalery[досье]
Все таки попытаюсь добить "готовое решение kcaptcha"
спустя 42 секунды [обр] sevalery[досье]
Спасибо!
спустя 6 дней [обр] sevalery[досье]

Добил! Заработало! Решил проблему сам. ОШИБКИ!
Хотя по количеству сообщений не могу понять это был сложный вопрос или очень простой. Или лень вникать? Также вставил капчу в форму обратной связи.
Вопрос к тем кто знаЛ:
В выражение

if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] !==  $_POST['keystring']) $err[45]=$MSG['45'];
    unset($_SESSION['captcha_keystring']);

можно или не нужно добавить

&& isset($_POST['keystring'])

и вот еще такое

&& !empty($_SESSION['captcha_keystring'])

Спасибо!

спустя 1 минуту [обр] sevalery[досье]
А тему можно закрывать.
Powered by POEM™ Engine Copyright © 2002-2005