За последние 24 часа нас посетил 17491 программист и 1686 роботов. Сейчас ищут 943 программиста ...

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

Тема в разделе "PHP и базы данных", создана пользователем sevalery, 19 фев 2011.

  1. sevalery

    sevalery Активный пользователь

    С нами с:
    11 ноя 2010
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте!
    Пробую (только учусь) вставить капчу в шаблон Smapty. Не получается. Необходима помощь!
    Решил использовать готовое решение kcaptcha от (http://www.captcha.ru/kcaptcha/).
    Создал в корне папку kcaptcha, поместил в нее папку ‘fonts’ и файлы kcaptcha.php и kcaptcha_config.php.
    Создал файл captcha.php и поместил его в ту же папку.
    PHP:
    1. <?php
    2. include('kcaptcha.php');
    3. $captcha = new KCAPTCHA();
    4. $_SESSION['captcha_keystring'] = $captcha->getKeyString();
    5. ?>
    В файле add.tpl (templates/new/ board/ add.tpl )в форму ввода нового объявления добавил запись:
    PHP:
    1. <p>Введите текст, показаний ниже:</p>
    2. <p><img src="{$path_templates}kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></p>
    3. <p><input type="text" tabindex="9"  name="keystring">{$error_captcha_keystring}</p>
    4. <p><input type="submit" tabindex="10" value="Проверить"></p>
    далее идет
    PHP:
    1. <INPUT id="submit" tabindex="11" type="submit" value="Добавить объявление (CTRL+ENTER)" name="submit">
    2. <INPUT type="hidden" name="data_check" value="ok">
    3. </FORM>
    Картинка появилась, изображения цифр при нажатии "Проверить" обновляется.
    Теперь необходимо проверку капчи (в этом виде проверено – работает) на соответствие кода:
    PHP:
    1. <?php
    2. if(count($_POST)>0){
    3.     if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
    4.         echo "Правильно";
    5.     }else{
    6.         echo "Неправильно";
    7.     }
    8. }
    9. unset($_SESSION['captcha_keystring']);
    10. ?>
    Вставить в файл - message.php
    В файле message.php (в корне)
    PHP:
    1. <?php
    2.   $open_error_tpl='<br>&nbsp<font size="1" color=A14F4F>';
    3.   $close_error_tpl='</font>';
    4. $MSG['1'] = $open_error_tpl.'Длина не может превышать 15 символов'.$close_error_tpl;
    добавил запись сообщение об ошибке
    PHP:
    1. $MSG['45'] = $open_error_tpl.'Введенные символы не соответствуют проверочному слову'.$close_error_tpl;
    в части проверки на соответствие условий при заполнении полей формы
    PHP:
    1. if (strlen($f_user_names) > 15)  $err[1]=$MSG['1'];
    добавил
    PHP:
    1. if (isset($_SESSION['captcha_keystring']) && !empty($_SESSION['captcha_keystring']) && isset($_POST['captcha_string']) && $_SESSION['captcha_keystring'] != $_POST['captcha_string']) $err[45]=$MSG['45'];
    2.  unset($_SESSION['captcha_keystring']);
    - убрал значение CAPTCHA из сессии
    в части
    PHP:
    1. $smarty->assign('error_user_category', $err[21]);
    добавил
    PHP:
    1. $smarty->assign('error_captcha_keystring', $err[45]);
    в части
    PHP:
    1. $smarty->assign("name_site",$name_site);
    добавил
    PHP:
    1. $smarty->assign('kaptcha','kcaptcha/index.php?' .str_replace(array(' ', '.'), '', microtime()));
    в части
    PHP:
    1. }else{
    2.  
    3. $error_flooder=$err[36];
    добавил
    PHP:
    1. $error_captcha_keystring=$err[45];
    Сообщение об ошибке 'Введенные символы не соответствуют проверочному слову' – не выводятся.
    При условии правильного заполнения остальных полей формы, при нажатии "Проверить" выполняется "Добавить объявление".
    Не могу понять, где ошибка?
     
  2. sevalery

    sevalery Активный пользователь

    С нами с:
    11 ноя 2010
    Сообщения:
    14
    Симпатии:
    0
    Добил! Заработало! Решил проблему сам. ОШИБКИ!
    Хотя по количеству сообщений не могу понять это был сложный вопрос или очень простой. Или лень вникать?
    Также вставил капчу в форму обратной связи.
    Есть готовое решение для формы обратной связи PHPSendMail v2.1.2, с внедрением captcha.
    Всем спасибо!
    А тему можно закрывать.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сто одежек и все без застежек...

    какие только костыли люди ни изобретают, чтобы просто юзать пхп сообразно своему чувству прекрасного...

    ЗЫ: я у себя капчу отключил. За несколько лет даже "Привет" никто не написал - все строго по делу.
     
  4. sevalery

    sevalery Активный пользователь

    С нами с:
    11 ноя 2010
    Сообщения:
    14
    Симпатии:
    0
    А вот у меня, до недавнего времени, тоже было все "по делу". А как-то "форму частного объявления без регистрации" начали бомбить роботы. (я проверил по IP запретил через .htaccess ) 20-30 заполнений в день с длинными фразами, которые выходили за границы форм (так как форма на div) нарушали внешний вид. Пришлось добавить несколько проверок: на макс. длину слов, макс.длину текста, запретить использование спец.символов, удаление перевода строк и добавить капчу.
    Также вставил капчу в форму обратной связи. Планирую добавить в форму заявки на цену объекта.