Защита интернет сайтов и форумов

Автор: Пользователь скрыл имя, 12 Ноября 2010 в 11:29, курсовая работа

Краткое описание

В данной работе рассматривает форум, который построен на движке phpBB. Так как данный вид движка очень популярен в глобальной сети, то существует такая проблема, как автоматическая регистрация и размещение на форуме вредоносных и рекламных ссылок от «спам-ботов». «Спам-боты» - это программы, написанные для поиска в сети определенных сайтов, форумов, досок объявлений со слабой защитой при регистрации или размещения объявлений. Данная программа автоматически регистрируется на сетевом ресурсе и размещает во всех темах форумов и досок объявлений рекламные ссылки и вредоносный контент. В данной работе рассматривается создание дополнительного модуля защиты при регистрации пользователей на форуме, построенном на движке phpBB, и внедрением его в дизайн страницы.

Оглавление

1.РЕФЕРАТ………………………………………………………………..….3
2.ВВЕДЕНИЕ…………..………...…………………………………………..4
3.1 ПОСТАНОВКА ЗАДАЧИ…..……………..…………………………….5
4.2 ВЫБОР ТЕХНИЧЕСКИХ СРЕДСТВ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ……………………………………………………………6
5.3 СТРУКТУРА БАЗЫ ДАННЫХ
3.1 Основы работы с СУБД MySQL………………………………………7

3.2 Стандартные функции PHP для работы с MySQL……………….......9

3.3 Дополнительные таблицы базы данных для защитного модуля…..12

6. 4 СТРУКТУРА ПРИЛОЖЕНИЯ

4.1 Основные функции создаваемого модуля…………………………..13

4.2 Установка модуля защиты……………………………………………14

7. 5 ОПИСАНИЕ ИНТЕРФЕЙСА МОДУЛЯ ЗАЩИТЫ………………….20

8. 6 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ И АДМИНИСТРАТОРА………22

9. ЗАКЛЮЧЕНИЕ………………………….………………………………...24

10. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ………………………25

Файлы: 1 файл

1_курсовой.doc

— 836.50 Кб (Скачать)

<?

$link1 = @mysql_connect("www.somehost.com", "web", "abcde")

or die("Could not connect to MySQL server!");

$linkl = @mysql_connect("www.someotherhost.com", "usr", "secret")

or die("Could not connect to MySQL server!");

?> 

Идентификаторы $link1 и $link2 передаются при последующих обращениях к базам данных с запросами.  

     После успешного соединения с MySQL необходимо выбрать базу данных, находящуюся на сервере. Для этого используется функция mysql_select_db( ). Синтаксис функции mysql_select_db( ): 

     int mysql_select_db (string имя_базы_данных [, int идентификатор_соединения]) 

Параметр имя_базы_данных определяет выбираемую базу данных, идентификатор которой возвращается функцией mysql_select_db( ). Параметр идентификатор_соединения необязателен лишь при одном открытом соединении с сервером MySQL. При наличии нескольких открытых соединений этот параметр должен указываться.

     После завершения работы с сервером MySQL соединение необходимо закрыть. Функция mysql_close( ) закрывает соединение, определяемое необязательным параметром. Если параметр не задан, функция mysql_close( ) закрывает последнее открытое соединение. Синтаксис функции mysql_close(): 

int mysql_close ([int идентификатор_соединения])

     Функция mysql_query( ) обеспечивает интерфейс для обращения с запросами к базам данных. Синтаксис функции mysql_query( ):

int mysql_query (string запрос [, int идентификатор_соединения]) 

Параметр запрос содержит текст запроса на языке SQL. Запрос передается либо соединению, определяемому необязательным параметром идентификатор_соединения, либо, при отсутствии параметра, последнему открытому соединению.

     Во  многих ситуациях требуется узнать количество записей, участвующих в  запросе SQL с командами INSERT, UPDATE, REPLACE или DELETE. Задача решается функцией mysql_affected_rows( ). Синтаксис функции: 

int mysql_affected_rows ([int идентификатор_соединения]) 

Параметр  идентификатор_соединения не является обязательным. Если он не указывается, mysql_affected_rqws( ) пытается использовать последнее открытое соединение. 

     Функция mysql_affected_rows( ) не работает с запросами, основанными на команде SELECT. Для определения количества записей, возвращенных при вызове SELECT, используется функция mysql_num_rows( ), которая определяет количество записей, возвращаемых командой SELECT. Синтаксис функции: 

     int mysql_num_rows(int результат) 

     Функция mysql_result() используется в сочетании с mysql_query( ) (при выполнении запроса с командой SELECT) для получения набора данных. Синтаксис функции: 

int mysql_result (int идентификатор_результата, int запись [, mixed поле])

 
В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query( ). Параметр запись ссылается на определенную запись набора данных, определяемого параметром идентификатор_результата. В необязательном параметре поле могут передаваться:

  • смещение поля в таблице;
  • имя поля;
  • имя поля в формате имя_поля_имя_таблицы.

 

    3.3 Дополнительные таблицы базы данных для защитного модуля

   Для правильного функционирования модуля защиты необходимо дополнить текущую  базу данных дополнительными таблицами, в которых будут содержаться  вопросы и варианты ответов к ним, а так же используемые изображения для дополнительной проверки пользователей при регистрации (рис. 3). Для этого создадим файл со скриптом PHP, который добавит нужную нам таблицу в базу данных на начальном этапе установки модуля.  

   $sql = array(

               "CREATE TABLE {$table_prefix}anti_bot_quest (

                     id mediumint(8) NOT NULL auto_increment,

                     question text NOT NULL,

                     answer1 varchar(255) NOT NULL default '',

                     answer2 varchar(255) NOT NULL default '',

                     answer3 varchar(255) NOT NULL default '',

                     answer4 varchar(255) NOT NULL default '',

                     answer5 varchar(255) NOT NULL default '',

                     anti_bot_img varchar(255) NOT NULL default '',

                     lang varchar(255) NOT NULL default '',

                     use_html CHAR( 1 ) DEFAULT '0' NOT NULL,

                     PRIMARY KEY (id)

                     ) TYPE=MyISAM AUTO_INCREMENT=1;"

   Данная  часть кода файла, добавляет в  базу таблицу по названию модуля anti_bot_quest, которая включает в себя:

  • id mediumint(8) – уникальный идентификатор вопроса;
  • question text – поле для вопроса;
  • answer1…5 – варианты ответов на вопрос;
  • anti_bot_img varchar – поле для изображения, если оно используется при вопросе;
  • lang varchar – язык, на котором задается вопрос;
  • use_html – использование HTML тэгов, при составлении вопроса.

    Рис. 3 Пример заполненной таблицы базы данных.

 

    4 СТРУКТУРА ПРИЛОЖЕНИЯ 

  • 4.1 Основные функции создаваемого модуля   

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

         Динамически изменяемый набор защиты состоит  в том, что в любой момент администратор  форума может изменить контрольные  вопросы и изображения при  регистрации через панель управления форумом. Для этого необходимо добавить в администраторскую панель раздел, который позволит составлять новые вопросы, редактировать существующие и добавлять изображения. Так как форум использует шаблоны для генерации страниц, необходимо создать файлы шаблона с расширением tpl для администраторского раздела (листинг файлов шаблонов находится в приложении).

         Файлы шаблонов модуля защиты:

    1. anti_bot_config_body.tpl – шаблон основной конфигурации модуля;
    2. anti_bot_quest_body.tpl – шаблон основного раздела модуля;
    3. anti_bot_quest_delete_body.tpl – шаблон удаления вопросов;
    4. anti_bot_quest_edit_body.tpl – шаблон редактирования вопросов.

    Данные  файлы копируются в директорию форума, содержащую все используемые шаблоны.

     

  • 4.2 Установка модуля защиты 
  •      В начале установки модуля, необходимо скопировать скрипты PHP в соответствующие директории форума. Список файлов для копирования:

      • db_update.php – файл обновления базы данных;
      • admin/admin_anti_bot_config.php – скрипт основной конфигурации модуля;
      • admin/admin_anti_bot_quest.php – скрипт создания и редактирования вопросов;
      • images/anti_bot/example1…5.jpg – файлы изображений для вопросов;

    Полный  листинг файлов php находится в приложении.

          Для правильного функционирования приложения, необходимо внести изменения в существующие файлы движка форума. Изменения в файлы вносятся с помощью редактора phpEdit.

          Файл  constants.php содержит основные константы движка форума, в него необходимо добавить новые данные нашего модуля:

     

    // Anti Bot Question Mod – Начало модуля

    define('ANTI_BOT_QUEST_TABLE', $table_prefix.'anti_bot_quest');

    // Anti Bot Question Mod – Конец модуля 

          Файл usercp_register.php – скрипт обрабатывающий данные, переданные при регистрации нового пользователя. Добавляем в него код модуля:  

    //находим  строку обработки встроенной стандартной защиты

    $error = TRUE;

                            $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong'];

                      }

                      $db->sql_freeresult($result);

                }

          }

    //добавляем код инициализации модуля

    // Anti Bot Question Mod - Начало

          if (($mode == 'register') && ($board_config['anti_bot_quest']))

          {

                $abq_aw = htmlspecialchars(stripslashes($abq_aw));

                $abq_id = intval(htmlspecialchars(stripslashes($idabq))); 

                $sql = 'SELECT answer1, answer2, answer3, answer4, answer5

                      FROM ' . ANTI_BOT_QUEST_TABLE . '

                      WHERE id = ' . $abq_id;

                if(!$result = $db->sql_query($sql))

                {

                      message_die(GENERAL_ERROR, 'Could not obtain anti-bot-question information', '', __LINE__, __FILE__, $sql);

                }

                if( $db->sql_numrows($result) == 0 )

                {

                      $sql = 'SELECT answer1, answer2, answer3, answer4, answer5

                            FROM ' . ANTI_BOT_QUEST_TABLE . '

                            WHERE lang = \'' . $board_config['default_lang'] . '\'

                            LIMIT 1';

                      if(!$result = $db->sql_query($sql))

                      {

                            message_die(GENERAL_ERROR, 'Could not obtain anti-bot-question information', '', __LINE__, __FILE__, $sql);

                      }

                      if( $db->sql_numrows($result) == 0 )

                      { 

                      }

                      else

                      {

                            $error = TRUE;

                            $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['ABQ_Incorrect'];

                      }

                }

                else

                {

                      $abqrow = $db->sql_fetchrow($result);

                      if ($board_config['anti_bot_quest_casesen'])

                      {

                            if (($abq_aw == $abqrow['answer1']) || (($abqrow['answer2'] != '') && ($abq_aw == $abqrow['answer2'])) || (($abqrow['answer3'] != '') && ($abq_aw == $abqrow['answer3'])) || (($abqrow['answer4'] != '') && ($abq_aw == $abqrow['answer4'])) || (($abqrow['answer5'] != '') && ($abq_aw == $abqrow['answer5'])))

                            {}

                            else

                            {

                                  $error = TRUE;

                                  $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['ABQ_Incorrect'];

                            }

                      }

                      else

                      {

                            $abq_aw = strtolower($abq_aw);

                            if (($abq_aw == strtolower($abqrow['answer1'])) || (($abqrow['answer2'] != '') && ($abq_aw == strtolower($abqrow['answer2']))) || (($abqrow['answer3'] != '') && ($abq_aw == strtolower($abqrow['answer3']))) || (($abqrow['answer4'] != '') && ($abq_aw == strtolower($abqrow['answer4']))) || (($abqrow['answer5'] != '') && ($abq_aw == strtolower($abqrow['answer5']))))

                            {}

                            else

                            {

                                  $error = TRUE;

                                  $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['ABQ_Incorrect'];

                            }

                      }

                }

          }

          // Anti Bot Question Mod – Конец 

    //находим  объявление переменных  для шаблонов страниц 

    'CONFIRM_IMG' => $confirm_image, 

    //добавляем  переменные шаблонов  модуля 

    // Anti Bot Question Mod - Начало

                'L_ABQ_Quest' => $abq_quest,

                'L_ABQ_EXPLAIN' => ($board_config['anti_bot_quest_casesen']) ? $lang['ABQ_explain'].' '.$lang['ABQ_explain2'] : $lang['ABQ_explain'],

                'L_ABQ_IMAGE' => $abq_image,

                'L_ABQ_QUESTION' => $lang['ABQ_Question'],

                'L_ABQ_ANSWER' => $lang['ABQ_Answer'],

                'L_ABQ_VARNAME' => $board_config['anti_bot_quest_get'],

                // Anti Bot Question Mod – Конец 

          Файл  lang_admin.php содержит переменные для генерации шаблона администраторского раздела. В него необходимо добавить новые переменные нашего модуля, для доступа к настройкам. 

    //в  конец файла добавляем  переменные модуля

    // Anti Bot Question Mod - Начало

    $lang['Anti_Bot_Quest'] = 'ABQ';

    $lang['Anti_Bot_Question'] = 'Включить Anti Bot Question при регистрации';

    $lang['Anti_Bot_Question_explain'] = 'Чтобы зарегистрироваться, пользователь должен  будет правильно  ответить на вопрос';

    $lang['ABQ_Admin_Title'] = 'Администрирование ABQ';

    $lang['ABQ_Delete_Title'] = 'Удалить Anti Bot Question';

    $lang['ABQ_Admin_Explain'] = 'Здесь ты можешь  создать новые  вопросы и отредактировать  или удалить старые.<br />Мод  при регистрации  использует один  из вопросов. Они  выбираются случайным образом.<br /><br />Пример:<br />Вопрос: Что из названного - фрукт? Кастрюля, Апельсин, Дуб, Медвед<br />Ответ: Апельсин<br />';

    $lang['ABQ_Question'] = 'Вопрос';

    $lang['ABQ_Answer'] = 'Ответ';

    $lang['ABQ_Answer_Explain'] = 'Регистрозависимый!';

    $lang['ABQ_CaseSensitive'] = 'Учитывать при  ответе заглавные  и строчные буквы';

    $lang['ABQ_VarName'] = 'Настройка переменной';

    $lang['ABQ_VarName_Explain'] = 'Сделай любую  комбинацию. На регистрации  нормальных посетителей  это не отразится.';

    $lang['Anti_Bot_Question_Guest'] = 'Включить Anti Bot Question для гостей';

    $lang['Anti_Bot_Question_Guest_explain'] = 'Гость должен  будет правильно  ответить на вопрос, чтобы оставить  сообщение';

    $lang['ABQ_Use_HTML'] = 'Использовать HTML';

    $lang['ABQ_Use_HTML_Explain'] = 'Чтобы использовать в вопросе HTML-код, выбери \'Да\'.<br /> Следующие теги нельзя будет использовать (независимо от этой настройки): &lt;textarea&gt; &lt;table&gt;';

    $lang['ABQ_ImageURL'] = 'URL картинки';

    $lang['ABQ_Image'] = 'Картинка';

    $lang['ABQ_No_Image'] = 'Выбранного изображения не существует';

    $lang['ABQ_Image_DNE'] = 'Не существует';

    $lang['ABQ_Create_Question'] = 'Создать вопросы  и ответы';

    $lang['ABQ_Edit_Question'] = 'Редактировать  вопрос';

    $lang['ABQ_Delete_Question'] = 'Удалить вопрос';

    $lang['ABQ_No_questions'] = '<br />Нету вопросов для ABQ<br /><br />';

    $lang['ABQ_not_updated'] = 'База не обновлена.';

    $lang['ABQ_Question_too_long'] = 'Твой вопрос  слишком длинный  (макс. %s знаков)';

    $lang['ABQ_Answer_too_long'] = 'Как минимум  один из ответов  слишком длинный  (максимальная длина  %s знаков)';

    $lang['ABQ_Missed_Question'] = 'Ты должен выбрать  вопрос для ABQ';

    $lang['ABQ_Missed_Answer'] = 'Ты должен выбрать  как минимум один  ответ для ABQ';

    $lang['ABQ_New_Question_created'] = 'Новый вопрос  для ABQ добавлен';

    $lang['ABQ_BildPHP'] = 'Используй файл bild.php для показа изображений';

    $lang['ABQ_BildPHP_Explain'] = 'Этот файл делает  идентификацию картинки  более сложной  для ботов (возможно  не на всех серверах). Проверь, если тестовое изображение здесь есть, то нужно активизировать эту опцию.';

    $lang['ABQ_Configuration'] = 'Конфигурация';

    $lang['ABQ_Questions'] = 'Вопросы';

    $lang['Anti_Bot_Quest_MOD'] = 'Anti Bot Question';

    $lang['ABQ_Config'] = 'Anti Bot Question';

    $lang['ABQ_Config_explain'] = 'Эта форма позволит  настроить ABQ';

    $lang['ABQ_Config_updated'] = 'Конфигурация ABQ успешно  обновлена';

    $lang['ABQ_Click_return_config'] = '%sВернуться к  настройкам ABQ %s';

    $lang['ABQ_confirm_aktiv'] = 'Код визуального подтверждения тоже сейчас включен';

    // Anti Bot Question Mod – Конец 

          Файл  lang_main.php содержит переменные для генерации шаблонов основных страниц форума. Добавляем в него переменные модуля: 

    // в конец файла добавляем переменные модуля

    // Anti Bot Question Mod - Начало

    $lang['ABQ_explain'] = 'Этот вопрос нужен для защиты от автоматических регистраций.';

    $lang['ABQ_post_explain'] = 'Этот вопрос  нужен для защиты  от автоматических  сообщений.';

    $lang['ABQ_explain2'] = '(регистрозависимый)';

    $lang['ABQ_Incorrect'] = 'ОТВЕТ НЕПРАВИЛЬНЫЙ!';

    $lang['ABQ_Question'] = 'Вопрос';

    $lang['ABQ_Answer'] = 'Ваш ответ';

    // Anti Bot Question Mod – Конец 

          Файл  profile_add_body.tpl – шаблон страницы регистрации нового пользователя. В него необходимо добавить дополнительные html тэги, для отображения модуля защиты при регистрации. 

    //находим окончание модуля стандартной защиты форума 

    <tr>

            <td class="row1"><span class="gen">{L_CONFIRM_CODE}: * </span><br /><span class="gensmall">{L_CONFIRM_CODE_EXPLAIN}</span></td>

            <td class="row2"><input type="text" class="post" style="width: 200px" name="confirm_code" size="6" maxlength="6" value="" /></td>

          </tr>

          <!— END switch_confirm —> 

    //добавляем  отображение дополнительного  модуля защиты 
     
     
     

    <!—Начало anti_bot_question —>

          <tr>

            <td class="row1" valign="top"><span class="gen">{L_ABQ_QUESTION}:</span><br />

                <span class="gensmall">{L_ABQ_EXPLAIN}</span></td>

            <td class="row2"><span class="gen">{L_ABQ_Quest}{L_ABQ_IMAGE}</span>

            </td>

          </tr>

          <tr>

            <td class="row1"><span class="gen">{L_ABQ_ANSWER}: *</td>

            <td class="row2"><input type="text" class="post" style="width: 200px"  name="{L_ABQ_VARNAME}" size="35" maxlength="250" value="" />

            </td>

          </tr>

          <!—Конец  anti_bot_question —> 

          После редактирования закрываем и сохраняем  все измененные файлы.

          Перед копированием файлов на сервер, необходимо протестировать работоспособность  модуля на локальном сервере с  помощью программного пакета Denwer.

     

    1. ОПИСАНИЕ ИНТЕРФЕЙСА МОДУЛЯ ЗАЩИТЫ
     

         Основной  интерфейс пользователя, созданного модуля, находится на странице регистрации. Он включает в себя (рис. 4):

    1. Поле с вопросом и вариантами ответов, либо с заданием на изображении;
    2. Поле для ввода ответа на вопрос.
     

    Рис. 4 Интерфейс пользователя при регистрации 

          Основные  настройки модуля, с возможностью создания новых вопросов, редактированием  существующих, добавлением новых  изображений, а так же отключением  модуля – находится в администраторском  разделе форума. Он включает в себя:

    1. Основную конфигурацию модуля (рис. 5);

    Рис. 5 Основные настройки

     

    1. Форма отображения существующих вопросов и управление ими (рис. 6);

    Рис. 6 Интерфейс управления вопросами и изображениями 

    1. Форма создания нового вопроса или редактирования существующего (рис. 7).

    Рис. 7 Интерфейс создания нового вопроса

     

    1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ И АДМИНИСТРАТОРА
     

         При регистрации пользователь должен правильно  ответить на вопрос, задаваемый модулем  защиты (рис. 4), в противном случае регистрация не будет произведена, и пользователь не сможет участвовать в обсуждении тем на форуме и создавать новые.

         Руководство администратора включает в себя:

      • настройка основной конфигурации модуля (рис. 5)
      • составление контрольных вопросов модуля (вопросы должны быть понятными обычному пользователю, а так же могут содержать варианты ответов)
      • включение в вопрос изображения с тестовым заданием для пользователя (файл изображения может быть в формате jpg, bmp или gif, в настройке указывается путь к файлу (рис. 7))
      • создание вариантов ответов на контрольные вопросы (количество вариантов может быть не более пяти (рис. 7))
      • редактирование и/или удаление существующих вопросов (рис. 6)
     

         Настройка основной конфигурации производится выбором  соответствующих полей в интерфейсе основной настройки (рис. 5). Сохранение изменений производится нажатием кнопки «Отправить».

         Составление контрольных вопросов производится нажатием кнопки «Создать вопросы и  ответы» в интерфейсе управления (рис. 6). После нажатия соответствующей  кнопки, необходимо заполнить форму (рис. 7). Ввести текст вопроса, установить выбор использования HTML тэгов, указать путь к используемому изображению (если оно необходимо в тестовом задании), заполнить форму правильных ответов на вопрос. Сохранение изменений производится нажатием кнопки «Создать вопросы и ответы» (рис. 8).

           

      
     
     
     
     
     
     
     
     
     
     
     

    Рис. 8 Пример создания нового вопроса

     

     Редактирование  существующих вопросов производиться  в интерфейсе управления вопросами (рис. 6), для этого необходимо нажать на ссылку «Изменить» напротив соответствующего вопроса. В появившейся форме необходимо внести изменения в поля вопроса и/или ответов. Сохранение изменений производится нажатием кнопки «Редактировать вопрос» (рис. 9).

     
     
     
     
     
     
     
     
     
     
     

    Рис. 9 Пример редактирования вопроса

          Удаление  существующих вопросов производиться в интерфейсе управления вопросами (рис. 6), для этого необходимо нажать на ссылку «Удалить» напротив соответствующего вопроса. В появившимся окне необходимо подтвердить удаление нажатием кнопки «Да», либо отменить удаление нажатием кнопки «Нет».

     

    ЗАКЛЮЧЕНИЕ 

          В данной работе было рассмотрено создание дополнительной защиты для определенного  вида форумов. Созданный модуль прост  в установке и настройке, имеет  дружественный к пользователю интерфейс. Количество создаваемых тестовых заданий  может быть очень велико и зависит лишь от фантазии администратора. Использование изображений в заданиях, позволяет дополнительно усилить защиту при регистрации. Так как модуль использует в отображении шаблоны страниц, то он может быть легко подстроен под определенный дизайн страницы.

          При использовании данного дополнения, количество не желаемых регистраций на форуме сократилось на 80%, а автоматическое размещение в темах форума вредоносных ссылок и рекламных объявлений на 95%.

     

    СПИСОК  ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 

    1. Спейнауэр С., Куэрсиа В. Справочник Web-мастера. - К: "BHV", 1997. - 368 с.
    2. Яргер Р., Риз Дж., Кинг Т. MySQL и mSQL. Базы данных для небольших предприятий и Интернета. - СПб: Символ-Плюс, 2000 - 560 с.
    3. Ратшиллер Т., Геркен Т. PHP4: разработка Web-приложений. - СПб: Питер, 2001. - 384 с.
    4. Томсон Л., Веллинг Л. Разработка Web-приложений на PHP и MySQL. - К.: "ДиаСофт", 2001. - 672 с.
    5. Интернет ресурс http://ru.wikipedia.org/.
    6. Интернет ресурс http://php.su/.

     

      ПРИЛОЖЕНИЕ: ЛИСТИНГ ПРОГРАММНЫХ  МОДУЛЕЙ

    1. Листинг файла admin_anti_bot_config.php
     

    <?php

    /***************************************************************************

    *                           admin_anti_bot_config.php

    ***************************************************************************/ 

    define('IN_PHPBB', true); 

    if( !empty($setmodules) )

    {

          $filename = basename(__FILE__);

          $module['Anti_Bot_Quest_MOD']['ABQ_Configuration'] = $filename;

          return;

    } 

    //

    // Корневой каталог  phphBB

    //

    $phpbb_root_path = "./../";

    require($phpbb_root_path . 'extension.inc');

    require('./pagestart.' . $phpEx); 

    //

    // Антибот конфиг

    //

    $sql = "SELECT *

          FROM " . CONFIG_TABLE . "

          WHERE config_name LIKE 'anti_bot_quest%' OR config_name = 'enable_confirm'";

    if(!$result = $db->sql_query($sql))

    {

          message_die(CRITICAL_ERROR, "Could not query config information in admin_anti_bot_config", "", __LINE__, __FILE__, $sql);

    }

    else

    {

          while( $row = $db->sql_fetchrow($result) )

          {

                $config_name = $row['config_name'];

                $config_value = $row['config_value'];

                $default_config[$config_name] = isset($HTTP_POST_VARS['submit']) ? str_replace("'", "\'", $config_value) : $config_value; 

                $new[$config_name] = ( isset($HTTP_POST_VARS[$config_name]) ) ? $HTTP_POST_VARS[$config_name] : $default_config[$config_name]; 

                if (($config_name == 'anti_bot_quest_get') && (isset($HTTP_POST_VARS['abq_get_s1'])))

                {

                      $abq_new_get = '';

                      if (isset($HTTP_POST_VARS['abq_get_s1']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s1'];

                      }

                      if (isset($HTTP_POST_VARS['abq_get_s2']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s2'];

                      }

                      if (isset($HTTP_POST_VARS['abq_get_s3']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s3'];

                      }

                      if (isset($HTTP_POST_VARS['abq_get_s4']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s4'];

                      }

                      if (isset($HTTP_POST_VARS['abq_get_s5']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s5'];

                      }

                      if (isset($HTTP_POST_VARS['abq_get_s6']))

                      {

                            $abq_new_get .= $HTTP_POST_VARS['abq_get_s6'];

                      }

                      if (preg_match('/\A[a-z_]{2,5}[0-9]{4}[0-9a-z]{0,5}\z/',$abq_new_get))

                      {

                            $new['anti_bot_quest_get'] = $abq_new_get;

                      }

                } 

                if( isset($HTTP_POST_VARS['submit']) )

                {

                      $sql = "UPDATE " . CONFIG_TABLE . " SET

                            config_value = '" . str_replace("\'", "''", $new[$config_name]) . "'

                            WHERE config_name = '$config_name'";

                      if( !$db->sql_query($sql) )

                      {

                            message_die(GENERAL_ERROR, "Failed to update general configuration for $config_name", "", __LINE__, __FILE__, $sql);

                      }

                }

          } 

          if( isset($HTTP_POST_VARS['submit']) )

          {

                $message = $lang['ABQ_Config_updated'] . "<br /><br />" . sprintf($lang['ABQ_Click_return_config'], "<a href=\"" . append_sid("admin_anti_bot_config.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>"); 

                message_die(GENERAL_MESSAGE, $message);

          }

    } 

    $anti_bot_quest_yes = ($new['anti_bot_quest']) ? 'checked="checked"' : '';

    $anti_bot_quest_no = (!$new['anti_bot_quest']) ? 'checked="checked"' : ''; 

    $anti_bot_quest_guest_yes = ($new['anti_bot_quest_guest']) ? 'checked="checked"' : '';

    $anti_bot_quest_guest_no = (!$new['anti_bot_quest_guest']) ? 'checked="checked"' : ''; 

    $anti_bot_quest_casesen_yes = ($new['anti_bot_quest_casesen']) ? 'checked="checked"' : '';

    $anti_bot_quest_casesen_no = (!$new['anti_bot_quest_casesen']) ? 'checked="checked"' : ''; 

    $anti_bot_quest_bild_yes = ($new['anti_bot_quest_bild']) ? 'checked="checked"' : '';

    $anti_bot_quest_bild_no = (!$new['anti_bot_quest_bild']) ? 'checked="checked"' : ''; 

    if ($new['anti_bot_quest_get'] != '')

    {

          $abq_get_t2 = '';

          if (preg_match('/\A(fg|ih|zg)[0-9]{4}[0-9a-z]{0,5}\z/',$new['anti_bot_quest_get']))

          {

                $abq_get_t1 = strval(substr($new['anti_bot_quest_get'],0,2));

                $abq_get_z1 = strval(substr($new['anti_bot_quest_get'],2,1));

                $abq_get_z2 = strval(substr($new['anti_bot_quest_get'],3,1));

                $abq_get_z3 = strval(substr($new['anti_bot_quest_get'],4,1));

                $abq_get_z4 = strval(substr($new['anti_bot_quest_get'],5,1));

                if (strlen($new['anti_bot_quest_get']) > 6)

                {

                      $abq_get_t2 = strval(substr($new['anti_bot_quest_get'],6));

                }

          }

          elseif (preg_match('/\A(bfj|g_e|www|xwe|xxx)[0-9]{4}[0-9a-z]{0,5}\z/',$new['anti_bot_quest_get']))

          {

                $abq_get_t1 = strval(substr($new['anti_bot_quest_get'],0,3));

                $abq_get_z1 = strval(substr($new['anti_bot_quest_get'],3,1));

                $abq_get_z2 = strval(substr($new['anti_bot_quest_get'],4,1));

                $abq_get_z3 = strval(substr($new['anti_bot_quest_get'],5,1));

                $abq_get_z4 = strval(substr($new['anti_bot_quest_get'],6,1));

                if (strlen($new['anti_bot_quest_get']) > 7)

                {

                      $abq_get_t2 = strval(substr($new['anti_bot_quest_get'],7));

                }

          }

          elseif (preg_match('/\A(abq_|home|name|sfhf|www_)[0-9]{4}[0-9a-z]{0,5}\z/',$new['anti_bot_quest_get']))

          {

                $abq_get_t1 = strval(substr($new['anti_bot_quest_get'],0,4));

                $abq_get_z1 = strval(substr($new['anti_bot_quest_get'],4,1));

                $abq_get_z2 = strval(substr($new['anti_bot_quest_get'],5,1));

                $abq_get_z3 = strval(substr($new['anti_bot_quest_get'],6,1));

                $abq_get_z4 = strval(substr($new['anti_bot_quest_get'],7,1));

                if (strlen($new['anti_bot_quest_get']) > 8)

                {

                      $abq_get_t2 = strval(substr($new['anti_bot_quest_get'],8));

                }

          }

          elseif (preg_match('/\A(email|ldknf|name_|rgwsf)[0-9]{4}[0-9a-z]{0,5}\z/',$new['anti_bot_quest_get']))

          {

                $abq_get_t1 = strval(substr($new['anti_bot_quest_get'],0,5));

                $abq_get_z1 = strval(substr($new['anti_bot_quest_get'],5,1));

                $abq_get_z2 = strval(substr($new['anti_bot_quest_get'],6,1));

                $abq_get_z3 = strval(substr($new['anti_bot_quest_get'],7,1));

                $abq_get_z4 = strval(substr($new['anti_bot_quest_get'],8,1));

                if (strlen($new['anti_bot_quest_get']) > 9)

                {

                      $abq_get_t2 = strval(substr($new['anti_bot_quest_get'],9));

                }

          }

          else

          {

                $new['anti_bot_quest_get'] = '';

          }

    }

    if ($new['anti_bot_quest_get'] == '')

    {

          $new['anti_bot_quest_get'] = 'abq_0001';

          $abq_get_t1 = 'abq_';

          $abq_get_t2 = '';

          $abq_get_z1 = '0';

          $abq_get_z2 = '0';

          $abq_get_z3 = '0';

          $abq_get_z4 = '1';

    } 

    $abq_get_A1 = array();

    $abq_get_A1[] = 'abq_';

    $abq_get_A1[] = 'bfj';

    $abq_get_A1[] = 'email';

    $abq_get_A1[] = 'fg';

    $abq_get_A1[] = 'g_e';

    $abq_get_A1[] = 'home';

    $abq_get_A1[] = 'ih';

    $abq_get_A1[] = 'ldknf';

    $abq_get_A1[] = 'name';

    $abq_get_A1[] = 'name_';

    $abq_get_A1[] = 'rgwsf';

    $abq_get_A1[] = 'sfhf';

    $abq_get_A1[] = 'www';

    $abq_get_A1[] = 'www_';

    $abq_get_A1[] = 'xwe';

    $abq_get_A1[] = 'xxx';

    $abq_get_A1[] = 'zg';

    $abq_get_A2 = array();

    $abq_get_A2[] = '';

    $abq_get_A2[] = '001';

    $abq_get_A2[] = '3567';

    $abq_get_A2[] = '94859';

    $abq_get_A2[] = 'abf';

    $abq_get_A2[] = 'f';

    $abq_get_A2[] = 'sfgr';

    $abq_get_A2[] = 'uc';

    $abq_get_A2[] = 'dsdvg';

    $abq_get_s1 = '';

    for ($i=0; $i<count($abq_get_A1); $i++)

    {

          if ($abq_get_A1[$i] == $abq_get_t1)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s1 .= '<option value="' . $abq_get_A1[$i] . '"' . $abq_get_selected . '>' . $abq_get_A1[$i] . '</option>';

    }

    $abq_get_s2 = '';

    for ($i=0; $i<10; $i++)

    {

          if (strval($i) == $abq_get_z1)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s2 .= '<option value="' . $i . '"' . $abq_get_selected . '>' . $i . '</option>';

    }

    $abq_get_s3 = '';

    for ($i=0; $i<10; $i++)

    {

          if (strval($i) == $abq_get_z2)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s3 .= '<option value="' . $i . '"' . $abq_get_selected . '>' . $i . '</option>';

    }

    $abq_get_s4 = '';

    for ($i=0; $i<10; $i++)

    {

          if (strval($i) == $abq_get_z3)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s4 .= '<option value="' . $i . '"' . $abq_get_selected . '>' . $i . '</option>';

    }

    $abq_get_s5 = '';

    for ($i=0; $i<10; $i++)

    {

          if (strval($i) == $abq_get_z4)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s5 .= '<option value="' . $i . '"' . $abq_get_selected . '>' . $i . '</option>';

    }

    $abq_get_s6 = '';

    for ($i=0; $i<count($abq_get_A2); $i++)

    {

          if ($abq_get_A2[$i] == $abq_get_t2)

          {

                $abq_get_selected = ' selected="selected"';

          }

          else

          {

                $abq_get_selected = "";

          }

          $abq_get_s6 .= '<option value="' . $abq_get_A2[$i] . '"' . $abq_get_selected . '>' . $abq_get_A2[$i] . '</option>';

    } 

    $template->set_filenames(array(

          "body" => "admin/anti_bot_config_body.tpl")

    ); 

    //

    // Убираем ковычки  в описании сайта,  дабы не было  проблем)))

    // 

    $template->assign_vars(array(

          'S_CONFIG_ACTION' => append_sid("admin_anti_bot_config.$phpEx"),

          'L_YES' => $lang['Yes'],

          'L_NO' => $lang['No'],

          'L_SUBMIT' => $lang['Submit'],

          'L_RESET' => $lang['Reset'],

          'L_CONFIGURATION_TITLE' => $lang['ABQ_Config'],

          'L_CONFIGURATION_EXPLAIN' => $lang['ABQ_Config_explain'],

          'L_GENERAL_SETTINGS' => $lang['ABQ_Config'],

          'S_ABQ_VERSION' => $lang['ABQ_Version'], 

          'L_ANTI_BOT_QUEST' => $lang['Anti_Bot_Question'],

          'L_ANTI_BOT_QUEST_EXPLAIN' => $lang['Anti_Bot_Question_explain'],

          'L_ANTI_BOT_QUEST_CONFIRM' => ($new['enable_confirm']) ? '<br />'.$lang['ABQ_confirm_aktiv'] : '',

          'L_ANTI_BOT_QUEST_GUEST' => $lang['Anti_Bot_Question_Guest'],

          'L_ANTI_BOT_QUEST_GUEST_EXPLAIN' => $lang['Anti_Bot_Question_Guest_explain'],

          'L_ANTI_BOT_QUEST_CASESEN' => $lang['ABQ_CaseSensitive'],

          'L_ANTI_BOT_QUEST_BILD' => $lang['ABQ_BildPHP'],

          'L_ANTI_BOT_QUEST_BILD_EXPLAIN' => $lang['ABQ_BildPHP_Explain'] . '<br /><img src="' . $phpbb_root_path . 'images/anti_bot/bild.php?b=test">',

          'L_ANTI_BOT_QUEST_VARNAME' => $lang['ABQ_VarName'],

          'L_ANTI_BOT_QUEST_VARNAME_EXPLAIN' => $lang['ABQ_VarName_Explain'],  

          'ANTI_BOT_QUEST_ENABLE' => $anti_bot_quest_yes,

          'ANTI_BOT_QUEST_DISABLE' => $anti_bot_quest_no,

          'ANTI_BOT_QUEST_GUEST_ENABLE' => $anti_bot_quest_guest_yes,

          'ANTI_BOT_QUEST_GUEST_DISABLE' => $anti_bot_quest_guest_no,

          'ANTI_BOT_QUEST_CASESEN_ENABLE' => $anti_bot_quest_casesen_yes,

          'ANTI_BOT_QUEST_CASESEN_DISABLE' => $anti_bot_quest_casesen_no,

          'ANTI_BOT_QUEST_BILD_ENABLE' => $anti_bot_quest_bild_yes,

          'ANTI_BOT_QUEST_BILD_DISABLE' => $anti_bot_quest_bild_no,

          'ANTI_BOT_QUEST_VARNAME1' => $abq_get_s1,

          'ANTI_BOT_QUEST_VARNAME2' => $abq_get_s2,

          'ANTI_BOT_QUEST_VARNAME3' => $abq_get_s3,

          'ANTI_BOT_QUEST_VARNAME4' => $abq_get_s4,

          'ANTI_BOT_QUEST_VARNAME5' => $abq_get_s5,

          'ANTI_BOT_QUEST_VARNAME6' => $abq_get_s6)

    ); 

    $template->pparse("body"); 

    include('./page_footer_admin.'.$phpEx); 

    ?>

     

    1. Листинг файла admin_anti_bot_quest.php
     

      <?php

      /**************************************************************************

      *                             admin_anti_bot_quest.php

      ***************************************************************************/ 

      define('IN_PHPBB', true); 

      if( !empty($setmodules) )

      {

            $filename = basename(__FILE__);

            $module['Anti_Bot_Quest_MOD']['ABQ_Questions'] = $filename;

            return;

      } 

      //

      // Ищим корневой  каталог форума

      //

      $phpbb_root_path = '../';

      require($phpbb_root_path . 'extension.inc');

      require('./pagestart.' . $phpEx); 

      include($phpbb_root_path . 'includes/functions_selects.'.$phpEx); 

      $ABQ_Question_Maxlenght = 1000;

      $ABQ_Answer_Maxlenght = 250; 

      if (!isset($HTTP_POST_VARS['mode']))

      {

            if (!isset($HTTP_GET_VARS['action']))

            {

                  $template->set_filenames(array(

                        'body' => 'admin/anti_bot_quest_body.tpl')

                  ); 

                  $template->assign_vars(array(

                        'L_ABQ_TITLE' => $lang['ABQ_Admin_Title'],

                        'L_ABQ_EXPLAIN' => $lang['ABQ_Admin_Explain'],

                        'L_ABQ_ANSWER' => $lang['ABQ_Answer'],

                        'L_ABQ_IMAGE' => $lang['ABQ_Image'],

                        'L_CREATE_QUESTION' => $lang['ABQ_Create_Question'],

                        'L_EDIT' => $lang['Edit'],

                        'L_DELETE' => $lang['Delete'],

                        'L_ACTION' => $lang['Action'],

                        'L_BOARD_LANGUAGE' => $lang['Board_lang'],

                        'S_ABQ_VERSION' => $lang['ABQ_Version'],

                        'U_ABQ_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx))

                  ); 

                  $sql = 'SELECT *

                        FROM ' . ANTI_BOT_QUEST_TABLE . '

                        ORDER BY lang ASC, anti_bot_img ASC, question ASC';

                  if(!$result = $db->sql_query($sql))

                  {

                        message_die(GENERAL_ERROR, 'Could not query anti-bot-question information', '', __LINE__, __FILE__, $sql);

                  }

                  while ($row = $db->sql_fetchrow($result))

                  {

                        $abqrow[] = $row;

                  } 

                  $abq_count = count($abqrow);

                  if ($abq_count > 0)

                  {

                        for ($i=0; $i<$abq_count; $i++)

                        {

                              $abq_aw = $abqrow[$i]['answer1'];

                              if ($abqrow[$i]['answer2'] != '')

                              {

                                    $abq_aw = 'A) ' . $abq_aw . '<br />B) ' . $abqrow[$i]['answer2'] . '<br />';

                              }

                              if ($abqrow[$i]['answer3'] != '')

                              {

                                    $abq_aw .= 'C) ' . $abqrow[$i]['answer3'] . '<br />';

                              }

                              if ($abqrow[$i]['answer4'] != '')

                              {

                                    $abq_aw .= 'D) ' . $abqrow[$i]['answer4'] . '<br />';

                              }

                              if ($abqrow[$i]['answer5'] != '')

                              {

                                    $abq_aw .= 'E) ' . $abqrow[$i]['answer5'] . '<br />';

                              } 

                              $aqb_idne = '';

                              if ($abqrow[$i]['anti_bot_img'] != '')

                              {

                                    $aqb_idne = '<br /><b>' . $lang['ABQ_Image_DNE'] . '</b>';

                                    if (!@is_dir(phpbb_realpath($phpbb_root_path . 'images/anti_bot/' . $abqrow[$i]['anti_bot_img'])))

                                    {

                                          unset($img_datendung);

                                          $img_datendung = strtolower(preg_replace('/.*\.([a-z]+)$/','\1',$abqrow[$i]['anti_bot_img'])); 

                                          if (($img_datendung == 'gif') || ($img_datendung == 'jpg') || ($img_datendung == 'jpeg') || ($img_datendung == 'png'))

                                          {

                                                $aqb_idne = '';

                                          }

                                    }

                              } 

                              $template->assign_block_vars('abqrow', array(

                                    'COLOR' => ($i % 2) ? 'row1' : 'row2',

                                    'QUESTION' => $abqrow[$i]['question'],

                                    'ANSWER' => $abq_aw,

                                    'ANTI_BOT_IMG' => $abqrow[$i]['anti_bot_img'],

                                    'IMG_NOTI' => $aqb_idne,

                                    'LANGUAGE' => $abqrow[$i]['lang'],

                                    'U_EDIT_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx.'?action=edit&amp;id=' . $abqrow[$i]['id']),

                                    'U_DELETE_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx.'?action=delete&amp;id=' . $abqrow[$i]['id'])

                                    )

                              );

                        }

                  }

                  else

                  {

                        $template->assign_block_vars('switch_no_questions', array());

                        $template->assign_vars(array(

                              'L_ABQ_NO_QUESTION' => $lang['ABQ_No_questions'])

                        );

                  } 

                  $template->pparse('body'); 

                  include('./page_footer_admin.'.$phpEx);

            }

            else

            {

                  if ($HTTP_GET_VARS['action'] == 'edit')

                  {

                        $script_path = $board_config['script_path'];

                        $server_name = trim($board_config['server_name']);

                        $server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';

                        $server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; 

                        $server_url = $server_name . $server_port . $script_path;

                        $server_url = $server_protocol . str_replace('//', '/', $server_url); 

                        $abq_id = intval($HTTP_GET_VARS['id']);

                        $sql = 'SELECT *

                              FROM ' . ANTI_BOT_QUEST_TABLE . '

                              WHERE id = ' . $abq_id;

                        if(!$result = $db->sql_query($sql))

                        {

                              message_die(GENERAL_ERROR, 'Could not anti-bot-question information', '', __LINE__, __FILE__, $sql);

                        }

                        if( $db->sql_numrows($result) == 0 )

                        {

                              message_die(GENERAL_ERROR, 'The requested anti-bot-question does not exist');

                        }

                        $abqrow = $db->sql_fetchrow($result); 

                        $template->set_filenames(array(

                              'body' => 'admin/anti_bot_quest_edit_body.tpl')

                        ); 

                        // Считываем загруженные  изображения

                        $dir = @opendir($phpbb_root_path . 'images/anti_bot/'); 

                        while($file = @readdir($dir))

                        {

                              if (!@is_dir(phpbb_realpath($phpbb_root_path . 'images/anti_bot/' . $file)))

                              {

                                    unset($img_datendung);

                                    $img_datendung = strtolower(preg_replace('/.*\.([a-z]+)$/','\1',$file)); 

                                    if (($img_datendung == 'gif') || ($img_datendung == 'jpg') || ($img_datendung == 'jpeg') || ($img_datendung == 'png'))

                                    {

                                          $anti_bot_images[] = $file;

                                    }

                              }

                        } 

                        @closedir($dir); 

                        $filename_list = '<option value="">-</option>';

                        for( $i = 0; $i < count($anti_bot_images); $i++ )

                        {

                              if ($anti_bot_images[$i] == $abqrow['anti_bot_img'])

                              {

                                    $anti_bot_img_selected = ' selected="selected"';

                              }

                              else

                              {

                                    $anti_bot_img_selected = "";

                              }

                              $filename_list .= '<option value="' . $anti_bot_images[$i] . '"' . $anti_bot_img_selected . '>' . $anti_bot_images[$i] . '</option>';

                        } 

                        $abq_img = $phpbb_root_path . 'images/spacer.gif';

                        if ($abqrow['anti_bot_img'] != '')

                        {

                              $abq_img = $phpbb_root_path . 'images/anti_bot/' . $abqrow['anti_bot_img'];

                        } 

                        $template->assign_vars(array(

                              'L_ABQ_TITLE' => $lang['ABQ_Admin_Title'],

                              'L_ABQ_EXPLAIN' => $lang['ABQ_Admin_Explain'],

                              'L_PANEL_TITLE' => $lang['ABQ_Edit_Question'],

                              'L_QUESTION' => $lang['ABQ_Question'],

                              'L_ANTI_BOT_IMG' => $lang['ABQ_ImageURL'],

                              'L_ANSWER' => $lang['ABQ_Answer'],

                              'L_ANSWER_EXPLAIN' => ($board_config['anti_bot_quest_casesen']) ? '<br />'.$lang['ABQ_Answer_Explain'] : '',

                              'L_HTML' => $lang['ABQ_Use_HTML'],

                              'L_HTML_EXPLAIN' => $lang['ABQ_Use_HTML_Explain'],

                              'L_YES' => $lang['Yes'],

                              'L_NO' => $lang['No'],

                              'L_BOARD_LANGUAGE' => $lang['Board_lang'],

                              'ANTI_BOT_IMG_OPTIONS' => $filename_list,

                              'S_ANTI_BOT_IMG_BASEDIR' => $phpbb_root_path . 'images/anti_bot/',

                              'S_ANTI_BOT_IMG_UP' => $phpbb_root_path . 'images/',

                              'S_ANTI_BOT_IMG' => $abq_img,

                              'S_HTML_NO_CHECKED' => (!$abqrow['use_html']) ? ' checked' : '',

                              'S_HTML_YES_CHECKED' => ($abqrow['use_html']) ? ' checked' : '',

                              'S_QUESTION' => $abqrow['question'],

                              'S_ANSWER1' => $abqrow['answer1'],

                              'S_ANSWER2' => $abqrow['answer2'],

                              'S_ANSWER3' => $abqrow['answer3'],

                              'S_ANSWER4' => $abqrow['answer4'],

                              'S_ANSWER5' => $abqrow['answer5'],

                              'S_MODE' => 'edit',

                              'S_LANGUAGE' => language_select($abqrow['lang'], 'language'),

                              'S_ABQ_VERSION' => $lang['ABQ_Version'],

                              'U_ABQ_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx.'?eid='.$abq_id))

                        ); 

                        $template->pparse('body'); 

                        include('./page_footer_admin.'.$phpEx);

                  }

                  elseif ($HTTP_GET_VARS['action'] == 'delete')

                  {

                        $script_path = $board_config['script_path'];

                        $server_name = trim($board_config['server_name']);

                        $server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';

                        $server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; 

                        $server_url = $server_name . $server_port . $script_path;

                        $server_url = $server_protocol . str_replace('//', '/', $server_url); 

                        $abq_id = intval($HTTP_GET_VARS['id']);

                        $sql = 'SELECT *

                              FROM ' . ANTI_BOT_QUEST_TABLE . '

                              WHERE id = ' . $abq_id;

                        if(!$result = $db->sql_query($sql))

                        {

                              message_die(GENERAL_ERROR, 'Could not anti-bot-question information', '', __LINE__, __FILE__, $sql);

                        }

                        if( $db->sql_numrows($result) == 0 )

                        {

                              message_die(GENERAL_ERROR, 'The requested anti-bot-question does not exist');

                        }

                        $abqrow = $db->sql_fetchrow($result); 

                        $template->set_filenames(array(

                              'body' => 'admin/anti_bot_quest_delete_body.tpl')

                        ); 

                        if (trim($abqrow['anti_bot_img']) != '')

                        {

                              $abq_img = '<br /><img src="' . $server_url . 'images/anti_bot/' . $abqrow['anti_bot_img'] . '">';

                        }

                        else

                        {

                              $abq_img = '';

                        } 

                        $template->assign_vars(array(

                              'L_ABQ_TITLE' => $lang['ABQ_Delete_Title'],

                              'L_ABQ_EXPLAIN' => $lang['ABQ_Admin_Explain'],

                              'L_PANEL_TITLE' => $lang['ABQ_Delete_Question'],

                              'L_QUESTION' => $lang['ABQ_Question'],

                              'L_ANTI_BOT_IMG' => $lang['ABQ_ImageURL'],

                              'L_ANSWER' => $lang['ABQ_Answer'],

                              'L_ANSWER_EXPLAIN' => ($board_config['anti_bot_quest_casesen']) ? '<br />'.$lang['ABQ_Answer_Explain'] : '',

                              'L_BOARD_LANGUAGE' => $lang['Board_lang'],

                              'ANTI_BOT_IMG' => $abq_img,

                              'S_QUESTION' => $abqrow['question'],

                              'S_ANSWER1' => $abqrow['answer1'],

                              'S_ANSWER2' => $abqrow['answer2'],

                              'S_ANSWER3' => $abqrow['answer3'],

                              'S_ANSWER4' => $abqrow['answer4'],

                              'S_ANSWER5' => $abqrow['answer5'],

                              'S_ANTI_BOT_IMG' => ($abqrow['anti_bot_img'] != '') ? $server_url.'images/anti_bot/'.$abqrow['anti_bot_img'] : '',

                              'S_LANGUAGE' => $abqrow['lang'],

                              'S_ABQ_VERSION' => $lang['ABQ_Version'],

                              'U_ABQ_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx.'?eid='.$abq_id))

                        ); 

                        $template->pparse('body'); 

                        include('./page_footer_admin.'.$phpEx);

                  }

            }

      }

      else

      {

            if ($HTTP_POST_VARS['mode'] == 'new')

            {

                  if (!isset($HTTP_POST_VARS['question']))

                  {

                        $template->set_filenames(array(

                              'body' => 'admin/anti_bot_quest_edit_body.tpl')

                        ); 

                        $script_path = $board_config['script_path'];

                        $server_name = trim($board_config['server_name']);

                        $server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';

                        $server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; 

                        $server_url = $server_name . $server_port . $script_path;

                        $server_url = $server_protocol . str_replace('//', '/', $server_url); 

                        // Считываем загруженные  изображения

                        $dir = @opendir($phpbb_root_path . 'images/anti_bot/'); 

                        while($file = @readdir($dir))

                        {

                              if (!@is_dir(phpbb_realpath($phpbb_root_path . 'images/anti_bot/' . $file)))

                              {

                                    unset($img_datendung);

                                    $img_datendung = strtolower(preg_replace('/.*\.([a-z]+)$/','\1',$file)); 

                                    if (($img_datendung == 'gif') || ($img_datendung == 'jpg') || ($img_datendung == 'jpeg') || ($img_datendung == 'png'))

                                    {

                                          $anti_bot_images[] = $file;

                                    }

                              }

                        } 

                        @closedir($dir); 

                        $filename_list = '<option value="">-</option>';

                        for( $i = 0; $i < count($anti_bot_images); $i++ )

                        {

                              $filename_list .= '<option value="' . $anti_bot_images[$i] . '">' . $anti_bot_images[$i] . '</option>';

                        } 

                        $template->assign_vars(array(

                              'L_ABQ_TITLE' => $lang['ABQ_Admin_Title'],

                              'L_ABQ_EXPLAIN' => $lang['ABQ_Admin_Explain'],

                              'L_PANEL_TITLE' => $lang['ABQ_Create_Question'],

                              'L_QUESTION' => $lang['ABQ_Question'],

                              'L_ANTI_BOT_IMG' => $lang['ABQ_ImageURL'],

                              'L_ANSWER' => $lang['ABQ_Answer'],

                              'L_ANSWER_EXPLAIN' => ($board_config['anti_bot_quest_casesen']) ? '<br />'.$lang['ABQ_Answer_Explain'] : '',

                              'L_HTML' => $lang['ABQ_Use_HTML'],

                              'L_HTML_EXPLAIN' => $lang['ABQ_Use_HTML_Explain'],

                              'L_YES' => $lang['Yes'],

                              'L_NO' => $lang['No'],

                              'L_BOARD_LANGUAGE' => $lang['Board_lang'],

                              'ANTI_BOT_IMG_OPTIONS' => $filename_list,

                              'S_ANTI_BOT_IMG_BASEDIR' => $phpbb_root_path . 'images/anti_bot/',

                              'S_ANTI_BOT_IMG_UP' => $phpbb_root_path . 'images/',

                              'S_ANTI_BOT_IMG' => $phpbb_root_path . 'images/spacer.gif',

                              'S_HTML_NO_CHECKED' => ' checked',

                              'S_HTML_YES_CHECKED' => '',

                              'S_QUESTION' => '',

                              'S_ANSWER1' => '',

                              'S_ANSWER2' => '',

                              'S_ANSWER3' => '',

                              'S_ANSWER4' => '',

                              'S_ANSWER5' => '',

                              'S_LANGUAGE' => language_select($board_config['default_lang'], 'language'),

                              'S_MODE' => 'new',

                              'S_ABQ_VERSION' => $lang['ABQ_Version'],

                              'U_ABQ_ACTION' => append_sid('admin_anti_bot_quest.'.$phpEx))

                        ); 

                        $template->pparse('body'); 

                        include('./page_footer_admin.'.$phpEx);

                  }

                  else

                  {

                        $ABQ_Error = '';

                        if (strlen($HTTP_POST_VARS['question']) > $ABQ_Question_Maxlenght)

                        {

                              $ABQ_Error .= sprintf($lang['ABQ_Question_too_long'], $ABQ_Question_Maxlenght) . '<br />';

                        }

                        if ((strlen($HTTP_POST_VARS['answer1']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer2']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer3']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer4']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer5']) > $ABQ_Answer_Maxlenght))

                        {

                              $ABQ_Error .= sprintf($lang['ABQ_Answer_too_long'], $ABQ_Answer_Maxlenght) . '<br />';

                        } 

                        if ($HTTP_POST_VARS['usehtml'] == 'yes')

                        {

                              $abq_question = str_replace("\'", "''", trim($HTTP_POST_VARS['question']));

                              $abq_question = str_replace('<textarea', '&lt;textarea', $abq_question);

                              $abq_question = str_replace('</textarea', '&lt;/textarea', $abq_question);

                              $abq_question = str_replace('<table', '&lt;table', $abq_question);

                              $abq_question = str_replace('</table', '&lt;/table', $abq_question);

                              $abq_question = str_replace('<tr>', '&lt;tr&gt;', $abq_question);

                              $abq_question = str_replace('<tr ', '&lt;tr ', $abq_question);

                              $abq_question = str_replace('</tr>', '&lt;/tr&gt;', $abq_question);

                              $abq_question = str_replace('<td>', '&lt;td&gt;', $abq_question);

                              $abq_question = str_replace('<td ', '&lt;td ', $abq_question);

                              $abq_question = str_replace('</td>', '&lt;/td&gt;', $abq_question);

                              $abq_question = str_replace('<th>', '&lt;th&gt;', $abq_question);

                              $abq_question = str_replace('<th ', '&lt;th ', $abq_question);

                              $abq_question = str_replace('</th>', '&lt;/th&gt;', $abq_question);

                        }

                        else

                        {

                              $abq_question = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['question'])));

                        }

                        $abq_answer1 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer1'])));

                        $abq_answer2 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer2'])));

                        $abq_answer3 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer3'])));

                        $abq_answer4 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer4'])));

                        $abq_answer5 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer5'])));

                        $abq_anti_bot_img = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['anti_bot_img'])));

                        $abq_language = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['language']))); 

                        if ($HTTP_POST_VARS['usehtml'] == 'yes')

                        {

                              $abq_use_html = 1;

                        }

                        else

                        {

                              $abq_use_html = 0;

                        } 

                        if (empty($abq_question))

                        {

                              $ABQ_Error .= $lang['ABQ_Missed_Question'] . '<br />';

                        } 

                        if ((!empty($abq_answer2)) && (empty($abq_answer1)))

                        {

                              $abq_answer1 = $abq_answer2;

                              $abq_answer2 = '';

                        }

                        if ((!empty($abq_answer3)) && ((empty($abq_answer1)) || (empty($abq_answer2))))

                        {

                              if (empty($abq_answer1))

                              {

                                    $abq_answer1 = $abq_answer3;

                                    $abq_answer3 = '';

                              }

                              elseif (empty($abq_answer2))

                              {

                                    $abq_answer2 = $abq_answer3;

                                    $abq_answer3 = '';

                              }

                        }

                        if ((!empty($abq_answer4)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3))))

                        {

                              if (empty($abq_answer1))

                              {

                                    $abq_answer1 = $abq_answer4;

                                    $abq_answer4 = '';

                              }

                              elseif (empty($abq_answer2))

                              {

                                    $abq_answer2 = $abq_answer4;

                                    $abq_answer4 = '';

                              }

                              elseif (empty($abq_answer3))

                              {

                                    $abq_answer3 = $abq_answer4;

                                    $abq_answer4 = '';

                              }

                        }

                        if ((!empty($abq_answer5)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3)) || (empty($abq_answer4))))

                        {

                              if (empty($abq_answer1))

                              {

                                    $abq_answer1 = $abq_answer5;

                                    $abq_answer5 = '';

                              }

                              elseif (empty($abq_answer2))

                              {

                                    $abq_answer2 = $abq_answer5;

                                    $abq_answer5 = '';

                              }

                              elseif (empty($abq_answer3))

                              {

                                    $abq_answer3 = $abq_answer5;

                                    $abq_answer5 = '';

                              }

                              elseif (empty($abq_answer4))

                              {

                                    $abq_answer4 = $abq_answer5;

                                    $abq_answer5 = '';

                              }

                        } 

                        if (empty($abq_answer1))

                        {

                              $ABQ_Error .= $lang['ABQ_Missed_Answer'] . '<br />';

                        } 

                        if (!empty($abq_anti_bot_img))

                        {

                              $abq_img_url = '../images/anti_bot/' . $abq_anti_bot_img;

                              if ((!file_exists($abq_img_url)) || (!filesize($abq_img_url)))

                              {

                                    $ABQ_Error .= $lang['ABQ_No_Image'] . '<br />';

                              }

                        } 

                        if (trim($ABQ_Error) != '')

                        {

                              message_die(GENERAL_ERROR, $lang['ABQ_not_updated'] . '<br /><br />' . $ABQ_Error);

                        } 

                        $sql = 'INSERT INTO ' . ANTI_BOT_QUEST_TABLE . ' (question, answer1, answer2, answer3, answer4, answer5, anti_bot_img, lang, use_html)

                              VALUES (\'' . $abq_question . '\', \'' . $abq_answer1 . '\', \'' . $abq_answer2 . '\', \'' . $abq_answer3 . '\', \'' . $abq_answer4 . '\', \'' . $abq_answer5 . '\', \'' . $abq_anti_bot_img . '\', \'' . $abq_language . '\', \'' . $abq_use_html . '\')'; 

                        if(!$result = $db->sql_query($sql))

                        {

                              message_die(GENERAL_ERROR, 'Could not create new anti-bot-question', '', __LINE__, __FILE__, $sql);

                        } 

                        $message = $lang['ABQ_New_Question_created'] . '<br /><br />' . sprintf($lang['ABQ_Click_return_ABQ'], '<a href="' . append_sid('admin_anti_bot_quest.'.$phpEx) . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid('index.'.$phpEx.'?pane=right') . '">', '</a>'); 

                        message_die(GENERAL_MESSAGE, $message);

                  }

            }

            elseif ($HTTP_POST_VARS['mode'] == 'edit')

            {

                  $abq_id = intval($HTTP_GET_VARS['eid']);

                  $ABQ_Error = '';

                  if (strlen($HTTP_POST_VARS['question']) > $ABQ_Question_Maxlenght)

                  {

                        $ABQ_Error .= sprintf($lang['ABQ_Question_too_long'], $ABQ_Question_Maxlenght) . '<br />';

                  }

                  if ((strlen($HTTP_POST_VARS['answer1']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer2']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer3']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer4']) > $ABQ_Answer_Maxlenght) || (strlen($HTTP_POST_VARS['answer5']) > $ABQ_Answer_Maxlenght))

                  {

                        $ABQ_Error .= sprintf($lang['ABQ_Answer_too_long'], $ABQ_Answer_Maxlenght) . '<br />';

                  } 

                  if ($HTTP_POST_VARS['usehtml'] == 'yes')

                  {

                        $abq_question = str_replace("\'", "''", trim($HTTP_POST_VARS['question']));

                        $abq_question = str_replace('<textarea', '&lt;textarea', $abq_question);

                        $abq_question = str_replace('</textarea', '&lt;/textarea', $abq_question);

                        $abq_question = str_replace('<table', '&lt;table', $abq_question);

                        $abq_question = str_replace('</table', '&lt;/table', $abq_question);

                        $abq_question = str_replace('<tr>', '&lt;tr&gt;', $abq_question);

                        $abq_question = str_replace('<tr ', '&lt;tr ', $abq_question);

                        $abq_question = str_replace('</tr>', '&lt;/tr&gt;', $abq_question);

                        $abq_question = str_replace('<td>', '&lt;td&gt;', $abq_question);

                        $abq_question = str_replace('<td ', '&lt;td ', $abq_question);

                        $abq_question = str_replace('</td>', '&lt;/td&gt;', $abq_question);

                        $abq_question = str_replace('<th>', '&lt;th&gt;', $abq_question);

                        $abq_question = str_replace('<th ', '&lt;th ', $abq_question);

                        $abq_question = str_replace('</th>', '&lt;/th&gt;', $abq_question);

                  }

                  else

                  {

                        $abq_question = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['question'])));

                  }

                  $abq_answer1 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer1'])));

                  $abq_answer2 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer2'])));

                  $abq_answer3 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer3'])));

                  $abq_answer4 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer4'])));

                  $abq_answer5 = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['answer5'])));

                  $abq_anti_bot_img = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['anti_bot_img'])));

                  $abq_language = str_replace("\'", "''", htmlspecialchars(trim($HTTP_POST_VARS['language']))); 

                  if ($HTTP_POST_VARS['usehtml'] == 'yes')

                  {

                        $abq_use_html = 1;

                  }

                  else

                  {

                        $abq_use_html = 0;

                  } 

                  if (empty($abq_question))

                  {

                        $ABQ_Error .= $lang['ABQ_Missed_Question'] . '<br />';

                  } 

                  if ((!empty($abq_answer2)) && (empty($abq_answer1)))

                  {

                        $abq_answer1 = $abq_answer2;

                        $abq_answer2 = '';

                  }

                  if ((!empty($abq_answer3)) && ((empty($abq_answer1)) || (empty($abq_answer2))))

                  {

                        if (empty($abq_answer1))

                        {

                              $abq_answer1 = $abq_answer3;

                              $abq_answer3 = '';

                        }

                        elseif (empty($abq_answer2))

                        {

                              $abq_answer2 = $abq_answer3;

                              $abq_answer3 = '';

                        }

                  }

                  if ((!empty($abq_answer4)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3))))

                  {

                        if (empty($abq_answer1))

                        {

                              $abq_answer1 = $abq_answer4;

                              $abq_answer4 = '';

                        }

                        elseif (empty($abq_answer2))

                        {

                              $abq_answer2 = $abq_answer4;

                              $abq_answer4 = '';

                        }

                        elseif (empty($abq_answer3))

                        {

                              $abq_answer3 = $abq_answer4;

                              $abq_answer4 = '';

                        }

                  }

                  if ((!empty($abq_answer5)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3)) || (empty($abq_answer4))))

                  {

                        if (empty($abq_answer1))

                        {

                              $abq_answer1 = $abq_answer5;

                              $abq_answer5 = '';

                        }

                        elseif (empty($abq_answer2))

                        {

                              $abq_answer2 = $abq_answer5;

                              $abq_answer5 = '';

                        }

                        elseif (empty($abq_answer3))

                        {

                              $abq_answer3 = $abq_answer5;

                              $abq_answer5 = '';

                        }

                        elseif (empty($abq_answer4))

                        {

                              $abq_answer4 = $abq_answer5;

                              $abq_answer5 = '';

                        }

                  } 

                  if (empty($abq_answer1))

                  {

                        $ABQ_Error .= $lang['ABQ_Missed_Answer'] . '<br />';

                  } 

                  if (!empty($abq_anti_bot_img))

                  {

                        $abq_img_url = '../images/anti_bot/' . $abq_anti_bot_img;

                        if ((!file_exists($abq_img_url)) || (!filesize($abq_img_url)))

                        {

                              $ABQ_Error .= $lang['ABQ_No_Image'] . '<br />';

                        }

                  } 

                  if (trim($ABQ_Error) != '')

                  {

                        message_die(GENERAL_ERROR, $lang['ABQ_not_updated'] . '<br /><br />' . $ABQ_Error);

                  } 

                  $sql = 'UPDATE ' . ANTI_BOT_QUEST_TABLE . '

                        SET question = \'' . $abq_question . '\',

                        answer1 = \'' . $abq_answer1 . '\',

                        answer2 = \'' . $abq_answer2 . '\',

                        answer3 = \'' . $abq_answer3 . '\',

                        answer4 = \'' . $abq_answer4 . '\',

                        answer5 = \'' . $abq_answer5 . '\',

                        anti_bot_img = \'' . $abq_anti_bot_img . '\',

                        lang = \'' . $abq_language . '\',

                        use_html = \'' . $abq_use_html . '\'

                        WHERE id = ' . $abq_id;

                  if(!$result = $db->sql_query($sql))

                  {

                        message_die(GENERAL_ERROR, 'Could not update this anti-bot-question', '', __LINE__, __FILE__, $sql);

                  } 

                  $message = $lang['ABQ_Question_updated'] . '<br /><br />' . sprintf($lang['ABQ_Click_return_ABQ'], '<a href="' . append_sid('admin_anti_bot_quest.'.$phpEx) . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid('index.'.$phpEx.'?pane=right') . '">', '</a>'); 

                  message_die(GENERAL_MESSAGE, $message);

            }

            elseif ($HTTP_POST_VARS['mode'] == 'delete')

            {

                  $abq_id = intval($HTTP_GET_VARS['eid']); 

                  $sql = 'DELETE FROM ' . ANTI_BOT_QUEST_TABLE . '

                        WHERE id = ' . $abq_id;

                  if(!$result = $db->sql_query($sql))

                  {

                        message_die(GENERAL_ERROR, 'Could not delete this anti-bot-question', '', __LINE__, __FILE__, $sql);

                  } 

                  $message = $lang['ABQ_Question_deleted'] . '<br /><br />' . sprintf($lang['ABQ_Click_return_ABQ'], '<a href="' . append_sid('admin_anti_bot_quest.'.$phpEx) . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid('index.'.$phpEx.'?pane=right') . '">', '</a>'); 

                  message_die(GENERAL_MESSAGE, $message);

            }

      } 

      ?>

     

    1. Листинг файла db_update.php
     

      <?php

      /***************************************************************************

      *                           db_update.php

         *                          ---------------

      **************************************************************************/ 

      define('IN_PHPBB', true);

      $phpbb_root_path = './';  

      $i = 0;

      while ( !file_exists($phpbb_root_path . 'extension.inc') && ($i++ < 4) )

      {

            $phpbb_root_path .= '../';

      }

      if ( $i > 4 )

      {

         message_die(GENERAL_MESSAGE, 'Unable to find extension.inc, terminating. Please move this file into your main/"root" phpbb directory and try again.');

      } 

      include($phpbb_root_path . 'extension.inc');

      include($phpbb_root_path . 'common.'.$phpEx);  

      //

      // Start session management

      //

      $userdata = session_pagestart($user_ip, PAGE_INDEX);

      init_userprefs($userdata);

      //

      // End session management

      //  

      if( !$userdata['session_logged_in'] )

      {

            redirect(append_sid("login.$phpEx?redirect=db_update.$phpEx", true));

      }  

      if( $userdata['user_level'] != ADMIN )

      {

         message_die(GENERAL_MESSAGE, 'You are not authorised to access this page');

      }  

      $page_title = 'Installing Anti-Bot-Question Tables';

      include($phpbb_root_path . 'includes/page_header.'.$phpEx);  

      print<<<DELIM

      <table width="100%" cellspacing="1" cellpadding="2" border="0" class="forumline">

        <tr>

          <th class="thHead">Updating the database</th>

        </tr>

        <tr>

          <td>

            <span class="genmed">

              <ul type="circle"> 

      DELIM; 

      $current_time = time(); 

      switch ( SQL_LAYER )

      {

            case 'msaccess':

            break; 

            case 'postgresql':

                  $sql = array(

                  "CREATE SEQUENCE {$table_prefix}anti_bot_quest_id_seq start 31 increment 1 maxvalue 2147483647 minvalue 1 cache 1;", 

                  "CREATE TABLE {$table_prefix}anti_bot_quest (

                        id int DEFAULT nextval('{$table_prefix}anti_bot_quest_id_seq'::text) NOT NULL,

                        question text NOT NULL,

                        answer1 varchar(255) DEFAULT '' NOT NULL,

                        answer2 varchar(255) DEFAULT '' NOT NULL,

                        answer3 varchar(255) DEFAULT '' NOT NULL,

                        answer4 varchar(255) DEFAULT '' NOT NULL,

                        answer5 varchar(255) DEFAULT '' NOT NULL,

                        anti_bot_img varchar(255) DEFAULT '' NOT NULL,

                        lang varchar(255) DEFAULT '' NOT NULL,

                        use_html char(1) DEFAULT '0' NOT NULL,

                        CONSTRAINT {$table_prefix}anti_bot_quest_pkey PRIMARY KEY (id)

                        );", 

                        "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What of these four is an planet?<br />America, Cat, Earth, University', 'Earth', '', '', '', '', '', 'english', '1');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What of these four is an animal?<br />Car, Europe, Horse, Mountain', 'Horse', '', '', '', '', '', 'english', '1');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What is the result of three multiplied by three? (Do not use numbers in your answer. e.g. If the result is 5, then write five.)', 'nine', 'Nine', '', '', '', '', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'Shows the picture fire? Yes or no', 'Yes', 'yes', '', '', '', 'example2.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What kind of fruit is shown on the picture?', 'Appel', 'appel', '', '', '', 'example5.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'Can you see an airplane on the photo?', 'No', 'no', '', 'example2.jpg', '', '', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many blue lines can you count on the image?', '4', 'four', 'Four', '', '', 'example3.gif', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many red lines can you see on the image?', '5', 'five', 'Five', '', '', 'example3.gif', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What is the result of...', '5', 'five', 'Five', '', '', 'example4.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many arrows can you find?', '6', 'six', 'Six', '', '', 'example1.jpg', 'english', '0');" 

                  ); 

            break; 

            case 'mysql':

            case 'mysql4':

            default:

                  $sql = array(

                  "CREATE TABLE {$table_prefix}anti_bot_quest (

                        id mediumint(8) NOT NULL auto_increment,

                        question text NOT NULL,

                        answer1 varchar(255) NOT NULL default '',

                        answer2 varchar(255) NOT NULL default '',

                        answer3 varchar(255) NOT NULL default '',

                        answer4 varchar(255) NOT NULL default '',

                        answer5 varchar(255) NOT NULL default '',

                        anti_bot_img varchar(255) NOT NULL default '',

                        lang varchar(255) NOT NULL default '',

                        use_html CHAR( 1 ) DEFAULT '0' NOT NULL,

                        PRIMARY KEY (id)

                        ) TYPE=MyISAM AUTO_INCREMENT=1;", 

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What of these four is an planet?<br />America, Cat, Earth, University', 'Earth', '', '', '', '', '', 'english', '1');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What of these four is an animal?<br />Car, Europe, Horse, Mountain', 'Horse', '', '', '', '', '', 'english', '1');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What is the result of three multiplied by three? (Do not use numbers in your answer. e.g. If the result is 5, then write five.)', 'nine', 'Nine', '', '', '', '', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'Shows the picture fire? Yes or no', 'Yes', 'yes', '', '', '', 'example2.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What kind of fruit is shown on the picture?', 'Appel', 'appel', '', '', '', 'example5.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'Can you see an airplane on the photo?', 'No', 'no', '', 'example2.jpg', '', '', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many blue lines can you count on the image?', '4', 'four', 'Four', '', '', 'example3.gif', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many red lines can you see on the image?', '5', 'five', 'Five', '', '', 'example3.gif', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'What is the result of...', '5', 'five', 'Five', '', '', 'example4.jpg', 'english', '0');",

                  "INSERT INTO {$table_prefix}anti_bot_quest VALUES ('', 'How many arrows can you find?', '6', 'six', 'Six', '', '', 'example1.jpg', 'english', '0');"

                  );

            break;

      } 

      foreach ( $sql AS $query )

      {

         if ( !($result = $db->sql_query($query)) )

         {

            $error = $db->sql_error();

            print('<li>' . nl2br($query) . '<br /> +++ <font color="#FF0000"><b>Error:</b></font> ' . $error['message'] . '</li><br />');

         }

         else

         {

            print('<li>' . nl2br($query) . '<br /> +++ <font color="#00AA00"><b>Successfull</b></font></li><br />');

         }

      } 

      $forum_url = append_sid($phpbb_root_path . "index.$phpEx"); 

      print<<<DELIM

              </ul>

            </span>

          </td>

        </tr>

        <tr>

          <td class="catBottom" height="28">&nbsp;</td>

        </tr>

        <tr>

          <td class="catBottom" colspan="2" align="center">Finished</td>

        </tr>

      </table> 

      <br />

      <br /> 

      <table width="100%" cellspacing="1" cellpadding="2" border="0" class="forumline">

        <tr>

          <th class="thHead">SQL Installation complete</th>

        </tr>

        <tr>

          <td>

            <span class="genmed">Please delete this file (db_update.{$phpEx}).<br />

            If you have any problems, please visit <a href="{$phpbb_url}" target="_new">{$phpbb_url}</a> and ask for help.</span>

          </td>

        </tr>

        <tr>

          <td class="catBottom" height="28" align="center">

            <span class="genmed"><a href="{$forum_url}">Click Here to return to your forum.</a>

            </span>

          </td>

        </tr>

      </table> 

      DELIM; 

      include($phpbb_root_path . 'includes/page_tail.'.$phpEx);  

      ?>

     

    1. Листинг файла anti_bot_config_body.tpl
     

      <h1>{L_CONFIGURATION_TITLE}</h1> 

      <p>{L_CONFIGURATION_EXPLAIN}</p> 

      <form action="{S_CONFIG_ACTION}" method="post"><table width="99%" cellpadding="4" cellspacing="1" border="0" align="center" class="forumline">

            <tr>

              <th class="thHead" colspan="2">{L_GENERAL_SETTINGS}</th>

            </tr>

            <tr>

                  <td class="row1">{L_ANTI_BOT_QUEST}<br /><span class="gensmall">{L_ANTI_BOT_QUEST_EXPLAIN}</span><b>{L_ANTI_BOT_QUEST_CONFIRM}</b></td>

                  <td class="row2"><input type="radio" name="anti_bot_quest" value="1" {ANTI_BOT_QUEST_ENABLE} />{L_YES}&nbsp; &nbsp;<input type="radio" name="anti_bot_quest" value="0" {ANTI_BOT_QUEST_DISABLE} />{L_NO}</td>

            </tr>

            <tr>

                  <td class="row1">{L_ANTI_BOT_QUEST_GUEST}<br /><span class="gensmall">{L_ANTI_BOT_QUEST_GUEST_EXPLAIN}</span></td>

                  <td class="row2"><input type="radio" name="anti_bot_quest_guest" value="1" {ANTI_BOT_QUEST_GUEST_ENABLE} />{L_YES}&nbsp; &nbsp;<input type="radio" name="anti_bot_quest_guest" value="0" {ANTI_BOT_QUEST_GUEST_DISABLE} />{L_NO}</td>

            </tr>

            <tr>

                  <td class="row1">{L_ANTI_BOT_QUEST_CASESEN}</td>

                  <td class="row2"><input type="radio" name="anti_bot_quest_casesen" value="1" {ANTI_BOT_QUEST_CASESEN_ENABLE} />{L_YES}&nbsp; &nbsp;<input type="radio" name="anti_bot_quest_casesen" value="0" {ANTI_BOT_QUEST_CASESEN_DISABLE} />{L_NO}</td>

            </tr>

            <tr>

                  <td class="row1">{L_ANTI_BOT_QUEST_BILD}<br /><span class="gensmall">{L_ANTI_BOT_QUEST_BILD_EXPLAIN}</span></td>

                  <td class="row2"><input type="radio" name="anti_bot_quest_bild" value="1" {ANTI_BOT_QUEST_BILD_ENABLE} />{L_YES}&nbsp; &nbsp;<input type="radio" name="anti_bot_quest_bild" value="0" {ANTI_BOT_QUEST_BILD_DISABLE} />{L_NO}</td>

            </tr>

            <tr>

                  <td class="row1">{L_ANTI_BOT_QUEST_VARNAME}<br /><span class="gensmall">{L_ANTI_BOT_QUEST_VARNAME_EXPLAIN}</span></td>

                  <td class="row2"><select name="abq_get_s1">{ANTI_BOT_QUEST_VARNAME1}</select><select name="abq_get_s2">{ANTI_BOT_QUEST_VARNAME2}</select><select name="abq_get_s3">{ANTI_BOT_QUEST_VARNAME3}</select><select name="abq_get_s4">{ANTI_BOT_QUEST_VARNAME4}</select><select name="abq_get_s5">{ANTI_BOT_QUEST_VARNAME5}</select><select name="abq_get_s6">{ANTI_BOT_QUEST_VARNAME6}</select></td>

            </tr>

            <tr>

                  <td class="catBottom" colspan="2" align="center"><input type="submit" name="submit" value="{L_SUBMIT}" class="mainoption" />&nbsp;&nbsp;<input type="reset" value="{L_RESET}" class="liteoption" />

                  </td>

            </tr>

      </table></form> 

      <br clear="all" />

     

    1. Листинг файла anti_bot_quest_body.tpl
     

      <h1>{L_ABQ_TITLE}</h1> 

      <p>{L_ABQ_EXPLAIN}</p> 

      <form action="{U_ABQ_ACTION}" method="post">

      <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">

            <tr>

                  <td class="catBottom" align="center" height="28" colspan="6"><input type="hidden" value="new" name="mode" /><input name="submit" type="submit" value="{L_CREATE_QUESTION}" class="liteoption"></td>

            </tr>

            <tr>

                  <th class="thCornerL">{L_ABQ_TITLE}</th>

                  <th class="thTop">{L_ABQ_IMAGE}</th>

                  <th class="thTop">{L_ABQ_ANSWER}</th>

                  <th class="thTop">{L_BOARD_LANGUAGE}</th>

                  <th class="thCornerR" colspan="2">{L_ACTION}</th>

            </tr>

            <!-- BEGIN switch_no_questions -->

            <tr>

            <td class="row1" colspan="6" align="center">{L_ABQ_NO_QUESTION}</td>

            </tr>

            <!-- END switch_no_questions -->

            <!-- BEGIN abqrow -->

            <tr>

                  <td class="{abqrow.COLOR}" width="35%"><span class="gen">{abqrow.QUESTION}</span></td>

                  <td class="{abqrow.COLOR}" width="15%"><span class="gen">{abqrow.ANTI_BOT_IMG}{abqrow.IMG_NOTI}</span></td>

                  <td class="{abqrow.COLOR}" width="20%"><span class="gen">{abqrow.ANSWER}</span></td>

                  <td class="{abqrow.COLOR}" width="10%"><span class="gen">{abqrow.LANGUAGE}</span></td>

                  <td class="{abqrow.COLOR}" width="10%" align="center"><span class="genmed"><a href="{abqrow.U_EDIT_ACTION}">{L_EDIT}</a></span></td>

                  <td class="{abqrow.COLOR}" width="10%" align="center"><span class="genmed"><a href="{abqrow.U_DELETE_ACTION}">{L_DELETE}</a></span></td>

            </tr>

            <!-- END abqrow -->

            <tr>

                  <td class="catBottom" align="center" height="28" colspan="6"><input type="hidden" value="new" name="mode" /><input name="submit" type="submit" value="{L_CREATE_QUESTION}" class="liteoption"></td>

            </tr>

      </table>

      </form> 

      <br />

     

    1. Листинг файла anti_bot_quest_delete_body.tpl
     

      <h1>{L_ABQ_TITLE}</h1> 

      <p>{L_ABQ_EXPLAIN}</p> 

      <form action="{U_ABQ_ACTION}" method="post">

        <table cellpadding="4" cellspacing="1" border="0" class="forumline" align="center">

            <tr>

              <th colspan="2" class="thHead">{L_PANEL_TITLE}</th>

              </tr>

            <tr>

              <td class="row1"><span class="gen">{L_QUESTION}:</span></td>

              <td class="row1"><span class="genmed">{S_QUESTION}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANTI_BOT_IMG}:</span></td>

              <td class="row1"><span class="genmed">{S_ANTI_BOT_IMG}</span>{ANTI_BOT_IMG}</td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANSWER} 1:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

              <td class="row1"><span class="genmed">{S_ANSWER1}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANSWER} 2:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

              <td class="row1"><span class="genmed">{S_ANSWER2}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANSWER} 3:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

              <td class="row1"><span class="genmed">{S_ANSWER3}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANSWER} 4:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

              <td class="row1"><span class="genmed">{S_ANSWER4}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_ANSWER} 5:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

              <td class="row1"><span class="genmed">{S_ANSWER5}</span></td>

            </tr>

            <tr>

              <td class="row1"><span class="gen">{L_BOARD_LANGUAGE}:</span></td>

              <td class="row1"><span class="genmed">{S_LANGUAGE}</span></td>

            </tr>

            <tr>

              <td class="catBottom" colspan="2" align="center"><input type="hidden" name="mode" value="delete" /><input type="submit" name="submit" value="{L_PANEL_TITLE}" class="mainoption" /></td>

            </tr>

        </table>

      </form> 

      <br />

     

    1. Листинг файла anti_bot_quest_edit_body.tpl
     

      <h1>{L_ABQ_TITLE}</h1> 

      <p>{L_ABQ_EXPLAIN}</p> 

      <script language="javascript" type="text/javascript">

      <!--

      function update_anti_bot_image(newimage)

      {

            if (newimage == '')

            {

                  document.anti_bot_img.src = "{S_ANTI_BOT_IMG_UP}/spacer.gif";

            }

            else

            {

                  document.anti_bot_img.src = "{S_ANTI_BOT_IMG_BASEDIR}/" + newimage;

            }

      }

      //-->

      </script> 

      <form action="{U_ABQ_ACTION}" method="post">

      <table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">

            <tr>

                  <th class="thHead" height="25" nowrap="nowrap" colspan="2">{L_PANEL_TITLE}</th>

            </tr>

            <tr>

                  <td class="row1" width="20%" valign="top"><span class="gen">{L_QUESTION}:</span></td>

                  <td class="row2"><textarea name="question" class="post" rows="5" cols="45" wrap="virtual">{S_QUESTION}</textarea></td>

            </tr>

            <tr>

                  <td class="row1" width="20%" valign="top"><span class="gen">{L_HTML}:</span></td>

                  <td class="row2"><input type="radio" name="usehtml" value="no"{S_HTML_NO_CHECKED} />{L_NO}&nbsp; &nbsp;<input type="radio" name="usehtml" value="yes"{S_HTML_YES_CHECKED} />{L_YES}<br /><span class="gensmall">{L_HTML_EXPLAIN}</span></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANTI_BOT_IMG}:</span></td>

                  <td class="row2"><select name="anti_bot_img" onchange="update_anti_bot_image(this.options[selectedIndex].value);">{ANTI_BOT_IMG_OPTIONS}</select><br />

                  <img name="anti_bot_img" src="{S_ANTI_BOT_IMG}" border="0" alt="" /></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANSWER} 1:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

                  <td class="row2"><input name="answer1" type="text" class="post" size="35" value="{S_ANSWER1}" /></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANSWER} 2:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

                  <td class="row2"><input name="answer2" type="text" class="post" size="35" value="{S_ANSWER2}" /></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANSWER} 3:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

                  <td class="row2"><input name="answer3" type="text" class="post" size="35" value="{S_ANSWER3}" /></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANSWER} 4:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

                  <td class="row2"><input name="answer4" type="text" class="post" size="35" value="{S_ANSWER4}" /></td>

            </tr>

            <tr>

                  <td class="row1" width="20%"><span class="gen">{L_ANSWER} 5:</span><span class="gensmall">{L_ANSWER_EXPLAIN}</span></td>

                  <td class="row2"><input name="answer5" type="text" class="post" size="35" value="{S_ANSWER5}" /></td>

            </tr>

            <tr>

                  <td class="row1"><span class="gen">{L_BOARD_LANGUAGE}:</span></td>

                  <td class="row2"><span class="gensmall">{S_LANGUAGE}</span></td>

            </tr> 

            <tr>

                  <td class="catBottom" align="center" height="28" colspan="2"><input type="hidden" value="{S_MODE}" name="mode" /><input name="submit" type="submit" value="{L_PANEL_TITLE}" class="liteoption" /></td>

            </tr>

      </table>

      </form> 

      <br /> 
       

    Информация о работе Защита интернет сайтов и форумов