Автор: Пользователь скрыл имя, 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
<?
$link1 =
@mysql_connect("www.somehost.
or die("Could not connect to MySQL server!");
$linkl =
@mysql_connect("www.
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 идентификатор_результата,
В параметре идентификатор_результата
передается значение, возвращенное функцией
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_
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, которая включает в себя:
Рис. 3 Пример заполненной таблицы базы данных.
4
СТРУКТУРА ПРИЛОЖЕНИЯ
4.1
Основные функции создаваемого
модуля
При создании данного приложения было взято в расчет то, что данный модуль не может быть статическим, без возможности изменения и дополнения функций защиты, так как многие «спам-боты» легко и быстро подстраиваются под определенный вид статической защиты.
Динамически изменяемый набор защиты состоит в том, что в любой момент администратор форума может изменить контрольные вопросы и изображения при регистрации через панель управления форумом. Для этого необходимо добавить в администраторскую панель раздел, который позволит составлять новые вопросы, редактировать существующие и добавлять изображения. Так как форум использует шаблоны для генерации страниц, необходимо создать файлы шаблона с расширением tpl для администраторского раздела (листинг файлов шаблонов находится в приложении).
Файлы шаблонов модуля защиты:
Данные файлы копируются в директорию форума, содержащую все используемые шаблоны.
В начале установки модуля, необходимо скопировать скрипты PHP в соответствующие директории форума. Список файлов для копирования:
Полный листинг файлов 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;
$
}
$db->sql_
}
}
//добавляем код инициализации модуля
// Anti Bot Question Mod - Начало
if
(($mode == 'register') && ($board_config['anti_bot_
{
$abq_aw = htmlspecialchars(stripslashes(
$abq_id = intval(htmlspecialchars(
$sql = 'SELECT answer1, answer2, answer3, answer4, answer5
FROM ' . ANTI_BOT_QUEST_TABLE . '
WHERE id = ' . $abq_id;
if(!$result = $db->sql_query($sql))
{
message_die(
}
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))
{
messag
}
if( $db->sql_numrows($result) == 0 )
{
}
else
{
$error = TRUE;
$
}
}
else
{
$abqrow = $db->sql_fetchrow($result);
if ($board_config['anti_bot_
{
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
{
}
}
else
{
$abq_
if (($abq_aw ==
strtolower($abqrow['answer1'])
{}
else
{
}
}
}
}
//
Anti Bot Question Mod – Конец
//находим
объявление переменных
для шаблонов страниц
'CONFIRM_IMG'
=> $confirm_image,
//добавляем
переменные шаблонов
модуля
// Anti Bot Question Mod - Начало
'L_ABQ_Quest' => $abq_quest,
'L_ABQ_EXPLAIN'
=> ($board_config['anti_bot_
'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_
// 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_
$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_
$lang['Anti_Bot_Question_
$lang['ABQ_Use_HTML'] = 'Использовать HTML';
$lang['ABQ_Use_HTML_Explain'] = 'Чтобы использовать в вопросе HTML-код, выбери \'Да\'.<br /> Следующие теги нельзя будет использовать (независимо от этой настройки): <textarea> <table>';
$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_
$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_
$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_
<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 class="gensmall">{L_ABQ_
<td class="row2"><span class="gen">{L_ABQ_Quest}{L_
</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.
Основной интерфейс пользователя, созданного модуля, находится на странице регистрации. Он включает в себя (рис. 4):
Рис. 4 Интерфейс
пользователя при регистрации
Основные
настройки модуля, с возможностью
создания новых вопросов, редактированием
существующих, добавлением новых
изображений, а так же отключением
модуля – находится в
Рис. 5 Основные настройки
Рис. 6 Интерфейс
управления вопросами и изображениями
Рис. 7 Интерфейс создания нового вопроса
При регистрации пользователь должен правильно ответить на вопрос, задаваемый модулем защиты (рис. 4), в противном случае регистрация не будет произведена, и пользователь не сможет участвовать в обсуждении тем на форуме и создавать новые.
Руководство администратора включает в себя:
Настройка
основной конфигурации производится выбором
соответствующих полей в
Составление контрольных вопросов производится нажатием кнопки «Создать вопросы и ответы» в интерфейсе управления (рис. 6). После нажатия соответствующей кнопки, необходимо заполнить форму (рис. 7). Ввести текст вопроса, установить выбор использования HTML тэгов, указать путь к используемому изображению (если оно необходимо в тестовом задании), заполнить форму правильных ответов на вопрос. Сохранение изменений производится нажатием кнопки «Создать вопросы и ответы» (рис. 8).
Рис. 8 Пример создания нового вопроса
Редактирование существующих вопросов производиться в интерфейсе управления вопросами (рис. 6), для этого необходимо нажать на ссылку «Изменить» напротив соответствующего вопроса. В появившейся форме необходимо внести изменения в поля вопроса и/или ответов. Сохранение изменений производится нажатием кнопки «Редактировать вопрос» (рис. 9).
Рис. 9 Пример редактирования вопроса
Удаление существующих вопросов производиться в интерфейсе управления вопросами (рис. 6), для этого необходимо нажать на ссылку «Удалить» напротив соответствующего вопроса. В появившимся окне необходимо подтвердить удаление нажатием кнопки «Да», либо отменить удаление нажатием кнопки «Нет».
ЗАКЛЮЧЕНИЕ
В данной работе было рассмотрено создание дополнительной защиты для определенного вида форумов. Созданный модуль прост в установке и настройке, имеет дружественный к пользователю интерфейс. Количество создаваемых тестовых заданий может быть очень велико и зависит лишь от фантазии администратора. Использование изображений в заданиях, позволяет дополнительно усилить защиту при регистрации. Так как модуль использует в отображении шаблоны страниц, то он может быть легко подстроен под определенный дизайн страницы.
При
использовании данного
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ: ЛИСТИНГ ПРОГРАММНЫХ МОДУЛЕЙ
<?php
/*****************************
* admin_anti_bot_config.php
******************************
define('IN_PHPBB',
true);
if( !empty($setmodules) )
{
$filename = basename(__FILE__);
$module['Anti_Bot_Quest_
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_
}
else
{
while( $row = $db->sql_fetchrow($result) )
{
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$default_config[$
$new[$config_name]
= ( isset($HTTP_POST_VARS[$config_
if (($config_name
== 'anti_bot_quest_get') && (isset($HTTP_POST_VARS['abq_
{
$abq_new_get = '';
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (isset($HTTP_POST_VARS['abq_
{
$abq_
}
if (preg_match('/\A[a-z_]{2,5}[0-
{
$new['
}
}
if( isset($HTTP_POST_VARS['submit'
{
$sql = "UPDATE " . CONFIG_TABLE . " SET
config
WHERE config_name = '$config_name'";
if( !$db->sql_query($sql) )
{
messag
}
}
}
if(
isset($HTTP_POST_VARS['submit'
{
$message = $lang['ABQ_Config_updated']
. "<br /><br />" . sprintf($lang['ABQ_Click_
message_die(
}
}
$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']
$anti_bot_quest_casesen_yes
= ($new['anti_bot_quest_casesen'
$anti_bot_quest_casesen_no
= (!$new['anti_bot_quest_
$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-
{
$abq_get_t1 = strval(substr($new['anti_bot_
$abq_get_z1 = strval(substr($new['anti_bot_
$abq_get_z2 = strval(substr($new['anti_bot_
$abq_get_z3 = strval(substr($new['anti_bot_
$abq_get_z4 = strval(substr($new['anti_bot_
if (strlen($new['anti_bot_quest_
{
$abq_get_t2 = strval(substr($new['anti_bot_
}
}
elseif
(preg_match('/\A(bfj|g_e|www|
{
$abq_get_t1 = strval(substr($new['anti_bot_
$abq_get_z1 = strval(substr($new['anti_bot_
$abq_get_z2 = strval(substr($new['anti_bot_
$abq_get_z3 = strval(substr($new['anti_bot_
$abq_get_z4 = strval(substr($new['anti_bot_
if (strlen($new['anti_bot_quest_
{
$abq_get_t2 = strval(substr($new['anti_bot_
}
}
elseif
(preg_match('/\A(abq_|home|
{
$abq_get_t1 = strval(substr($new['anti_bot_
$abq_get_z1 = strval(substr($new['anti_bot_
$abq_get_z2 = strval(substr($new['anti_bot_
$abq_get_z3 = strval(substr($new['anti_bot_
$abq_get_z4 = strval(substr($new['anti_bot_
if (strlen($new['anti_bot_quest_
{
$abq_get_t2 = strval(substr($new['anti_bot_
}
}
elseif
(preg_match('/\A(email|ldknf|
{
$abq_get_t1 = strval(substr($new['anti_bot_
$abq_get_z1 = strval(substr($new['anti_bot_
$abq_get_z2 = strval(substr($new['anti_bot_
$abq_get_z3 = strval(substr($new['anti_bot_
$abq_get_z4 = strval(substr($new['anti_bot_
if (strlen($new['anti_bot_quest_
{
$abq_get_t2 = strval(substr($new['anti_bot_
}
}
else
{
$new['anti_bot_
}
}
if ($new['anti_bot_quest_get'] == '')
{
$new['anti_bot_quest_
$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(
"body"
=> "admin/anti_bot_config_body.
);
//
// Убираем ковычки в описании сайта, дабы не было проблем)))
//
$template->assign_vars(array(
'S_CONFIG_ACTION'
=> append_sid("admin_anti_bot_
'L_YES' => $lang['Yes'],
'L_NO' => $lang['No'],
'L_SUBMIT' => $lang['Submit'],
'L_RESET' => $lang['Reset'],
'L_CONFIGURATION_TITLE' => $lang['ABQ_Config'],
'L_CONFIGURATION_
'L_GENERAL_SETTINGS' => $lang['ABQ_Config'],
'S_ABQ_VERSION'
=> $lang['ABQ_Version'],
'L_ANTI_BOT_QUEST' => $lang['Anti_Bot_Question'],
'L_ANTI_BOT_QUEST_
'L_ANTI_BOT_QUEST_
'L_ANTI_BOT_QUEST_GUEST'
=> $lang['Anti_Bot_Question_
'L_ANTI_BOT_QUEST_GUEST_
'L_ANTI_BOT_QUEST_
'L_ANTI_BOT_QUEST_BILD' => $lang['ABQ_BildPHP'],
'L_ANTI_BOT_QUEST_BILD_
'L_ANTI_BOT_QUEST_
'L_ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_ENABLE' => $anti_bot_quest_yes,
'ANTI_BOT_QUEST_DISABLE' => $anti_bot_quest_no,
'ANTI_BOT_QUEST_GUEST_
'ANTI_BOT_QUEST_GUEST_
'ANTI_BOT_QUEST_CASESEN_
'ANTI_BOT_QUEST_CASESEN_
'ANTI_BOT_QUEST_BILD_
'ANTI_BOT_QUEST_BILD_
'ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_
'ANTI_BOT_QUEST_
);
$template->pparse("body");
include('./page_footer_admin.'
?>
<?php
/*****************************
* admin_anti_bot_quest.php
******************************
define('IN_PHPBB',
true);
if( !empty($setmodules) )
{
$filename = basename(__FILE__);
$module['Anti_Bot_Quest_
return;
}
//
// Ищим корневой каталог форума
//
$phpbb_root_path = '../';
require($phpbb_root_path . 'extension.inc');
require('./pagestart.'
. $phpEx);
include($phpbb_root_path
. 'includes/functions_selects.'.
$ABQ_Question_Maxlenght = 1000;
$ABQ_Answer_Maxlenght
= 250;
if (!isset($HTTP_POST_VARS['mode'
{
if
(!isset($HTTP_GET_VARS['
{
$template->set_
'body' => 'admin/anti_bot_quest_body.
);
$template->assign_
'L_ABQ_
'L_ABQ_
'L_ABQ_
'L_ABQ_
'L_CREATE_
'L_EDIT' => $lang['Edit'],
'L_DELETE' => $lang['Delete'],
'L_ACTION' => $lang['Action'],
'L_BOARD_
'S_ABQ_
'U_ABQ_
);
$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(
}
while ($row = $db->sql_fetchrow($result))
{
$abqrow[] = $row;
}
$abq_count = count($abqrow);
if ($abq_count > 0)
{
for ($i=0; $i<$abq_count; $i++)
{
$abq_
if ($abqrow[$i]['answer2'] != '')
{
}
if ($abqrow[$i]['answer3'] != '')
{
}
if ($abqrow[$i]['answer4'] != '')
{
}
if ($abqrow[$i]['answer5'] != '')
{
}
$aqb_
if ($abqrow[$i]['anti_bot_img'] != '')
{
}
$
);
}
}
else
{
$template->
$template->
'L_
);
}
$template->pparse(
include('./page_
}
else
{
if ($HTTP_GET_VARS['action'] == 'edit')
{
$script_path = $board_config['script_path'];
$server_name = trim($board_config['server_
$server_
$server_port = (
$board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_
$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))
{
messag
}
if( $db->sql_numrows($result) == 0 )
{
messag
}
$abqrow = $db->sql_fetchrow($result);
$template->
'body' => 'admin/anti_bot_quest_edit_
);
// Считываем загруженные изображения
$dir = @opendir($phpbb_root_path
. 'images/anti_bot/');
while($file = @readdir($dir))
{
if (!@is_dir(phpbb_realpath($
{
}
}
@closedir($
$filename_
for( $i = 0; $i < count($anti_bot_images); $i++ )
{
if ($anti_bot_images[$i] == $abqrow['anti_bot_img'])
{
}
else
{
}
$
}
$abq_img = $phpbb_root_path . 'images/spacer.gif';
if ($abqrow['anti_bot_img'] != '')
{
$abq_
}
$template->
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_NO' => $lang['No'],
'L_
'ANTI_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'U_
);
$template->
include('./
}
elseif ($HTTP_GET_VARS['action'] == 'delete')
{
$script_path = $board_config['script_path'];
$server_name = trim($board_config['server_
$server_
$server_port = (
$board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_
$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))
{
messag
}
if( $db->sql_numrows($result) == 0 )
{
messag
}
$abqrow = $db->sql_fetchrow($result);
$template->
'body' => 'admin/anti_bot_quest_delete_
);
if (trim($abqrow['anti_bot_img']) != '')
{
$abq_
}
else
{
$abq_
}
$template->
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'ANTI_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'U_
);
$template->
include('./
}
}
}
else
{
if ($HTTP_POST_VARS['mode'] == 'new')
{
if (!isset($HTTP_POST_VARS['
{
$template->
'body' => 'admin/anti_bot_quest_edit_
);
$script_path = $board_config['script_path'];
$server_name = trim($board_config['server_
$server_
$server_port = (
$board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_
$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($
{
}
}
@closedir($
$filename_
for( $i = 0; $i < count($anti_bot_images); $i++ )
{
$
}
$template->
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_
'L_NO' => $lang['No'],
'L_
'ANTI_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'S_
'U_
);
$template->
include('./
}
else
{
$ABQ_Error = '';
if (strlen($HTTP_POST_VARS['
{
$ABQ_
}
if ((strlen($HTTP_POST_VARS['
{
$ABQ_
}
if ($HTTP_POST_VARS['usehtml'] == 'yes')
{
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
}
else
{
$abq_
}
$abq_answer1 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer2 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer3 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer4 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer5 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_anti_
$abq_
if ($HTTP_POST_VARS['usehtml'] == 'yes')
{
$abq_
}
else
{
$abq_
}
if (empty($abq_question))
{
$ABQ_
}
if ((!empty($abq_answer2)) && (empty($abq_answer1)))
{
$abq_
$abq_
}
if ((!empty($abq_answer3)) && ((empty($abq_answer1)) || (empty($abq_answer2))))
{
if (empty($abq_answer1))
{
}
elseif (empty($abq_answer2))
{
}
}
if ((!empty($abq_answer4)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3))))
{
if (empty($abq_answer1))
{
}
elseif (empty($abq_answer2))
{
}
elseif (empty($abq_answer3))
{
}
}
if ((!empty($abq_answer5)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3)) || (empty($abq_answer4))))
{
if (empty($abq_answer1))
{
}
elseif (empty($abq_answer2))
{
}
elseif (empty($abq_answer3))
{
}
elseif (empty($abq_answer4))
{
}
}
if (empty($abq_answer1))
{
$ABQ_
}
if (!empty($abq_anti_bot_img))
{
$abq_
if ((!file_exists($abq_img_url)) || (!filesize($abq_img_url)))
{
}
}
if (trim($ABQ_Error) != '')
{
messag
}
$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))
{
messag
}
$message = $lang['ABQ_New_Question_
message_die(
}
}
elseif ($HTTP_POST_VARS['mode'] == 'edit')
{
$abq_id = intval($HTTP_GET_VARS['eid']);
$ABQ_Error = '';
if (strlen($HTTP_POST_VARS['
{
$ABQ_Error .= sprintf($lang['ABQ_Question_
}
if ((strlen($HTTP_POST_VARS['
{
$ABQ_Error .= sprintf($lang['ABQ_Answer_too_
}
if ($HTTP_POST_VARS['usehtml'] == 'yes')
{
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
$abq_
}
else
{
$abq_
}
$abq_answer1 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer2 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer3 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer4 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_answer5 = str_replace("\'",
"''", htmlspecialchars(trim($HTTP_
$abq_anti_bot_img
= str_replace("\'", "''", htmlspecialchars(trim($HTTP_
$abq_language =
str_replace("\'", "''", htmlspecialchars(trim($HTTP_
if ($HTTP_POST_VARS['usehtml'] == 'yes')
{
$abq_use_
}
else
{
$abq_use_
}
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_
$abq_
}
elseif (empty($abq_answer2))
{
$abq_
$abq_
}
}
if ((!empty($abq_answer4)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3))))
{
if (empty($abq_answer1))
{
$abq_
$abq_
}
elseif (empty($abq_answer2))
{
$abq_
$abq_
}
elseif (empty($abq_answer3))
{
$abq_
$abq_
}
}
if ((!empty($abq_answer5)) && ((empty($abq_answer1)) || (empty($abq_answer2)) || (empty($abq_answer3)) || (empty($abq_answer4))))
{
if (empty($abq_answer1))
{
$abq_
$abq_
}
elseif (empty($abq_answer2))
{
$abq_
$abq_
}
elseif (empty($abq_answer3))
{
$abq_
$abq_
}
elseif (empty($abq_answer4))
{
$abq_
$abq_
}
}
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_
}
}
if (trim($ABQ_Error) != '')
{
message_die(
}
$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(
}
$message = $lang['ABQ_Question_updated']
. '<br /><br />' . sprintf($lang['ABQ_Click_
message_die(
}
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(
}
$message = $lang['ABQ_Question_deleted']
. '<br /><br />' . sprintf($lang['ABQ_Click_
message_die(
}
}
?>
<?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("
}
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.'.$
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_
"CREATE TABLE {$table_prefix}anti_bot_quest (
id int DEFAULT nextval('{$table_prefix}anti_
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_
);",
"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><
}
else
{
print('<li>' . nl2br($query) . '<br /> +++ <font color="#00AA00"><b>
}
}
$forum_url
= append_sid($phpbb_root_path . "index.$phpEx");
print<<<DELIM
</ul>
</span>
</td>
</tr>
<tr>
<td class="catBottom" height="28"> </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);
?>
<h1>{L_CONFIGURATION_TITLE}</
<p>{L_CONFIGURATION_EXPLAIN}</
<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_
</tr>
<tr>
<td class="row1">{L_ANTI_BOT_
<td class="row2"><input type="radio" name="anti_bot_quest" value="1" {ANTI_BOT_QUEST_ENABLE} />{L_YES} <input type="radio" name="anti_bot_quest" value="0" {ANTI_BOT_QUEST_DISABLE} />{L_NO}</td>
</tr>
<tr>
<td class="row1">{L_ANTI_BOT_
<td class="row2"><input type="radio" name="anti_bot_quest_guest" value="1" {ANTI_BOT_QUEST_GUEST_ENABLE} />{L_YES} <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_
<td class="row2"><input
type="radio" name="anti_bot_quest_casesen" value="1"
{ANTI_BOT_QUEST_CASESEN_
</tr>
<tr>
<td class="row1">{L_ANTI_BOT_
<td class="row2"><input type="radio" name="anti_bot_quest_bild" value="1" {ANTI_BOT_QUEST_BILD_ENABLE} />{L_YES} <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_
<td class="row2"><select
name="abq_get_s1">{ANTI_BOT_
</tr>
<tr>
<td class="catBottom" colspan="2" align="center"><input type="submit" name="submit" value="{L_SUBMIT}" class="mainoption" /> <input type="reset" value="{L_RESET}" class="liteoption" />
</td>
</tr>
</table></form>
<br clear="all" />
<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_
<th class="thTop">{L_ABQ_IMAGE}</
<th class="thTop">{L_ABQ_ANSWER}</
<th class="thTop">{L_BOARD_
<th class="thCornerR" colspan="2">{L_ACTION}</th>
</tr>
<!-- BEGIN switch_no_questions -->
<tr>
<td
class="row1" colspan="6" align="center">{L_ABQ_NO_
</tr>
<!-- END switch_no_questions -->
<!-- BEGIN abqrow -->
<tr>
<td class="{abqrow.COLOR}"
width="35%"><span class="gen">{abqrow.QUESTION}<
<td class="{abqrow.COLOR}"
width="15%"><span class="gen">{abqrow.ANTI_BOT_
<td class="{abqrow.COLOR}"
width="20%"><span class="gen">{abqrow.ANSWER}</
<td class="{abqrow.COLOR}"
width="10%"><span class="gen">{abqrow.LANGUAGE}<
<td class="{abqrow.COLOR}"
width="10%" align="center"><span class="genmed"><a
href="{abqrow.U_EDIT_ACTION}">
<td class="{abqrow.COLOR}"
width="10%" align="center"><span class="genmed"><a
href="{abqrow.U_DELETE_ACTION}
</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 />
<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}
</tr>
<tr>
<td class="row1"><span class="gen">{L_QUESTION}:</
<td class="row1"><span class="genmed">{S_QUESTION}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANTI_BOT_IMG}:<
<td class="row1"><span class="genmed">{S_ANTI_BOT_
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANSWER}
1:</span><span class="gensmall">{L_ANSWER_
<td class="row1"><span class="genmed">{S_ANSWER1}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANSWER}
2:</span><span class="gensmall">{L_ANSWER_
<td class="row1"><span class="genmed">{S_ANSWER2}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANSWER}
3:</span><span class="gensmall">{L_ANSWER_
<td class="row1"><span class="genmed">{S_ANSWER3}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANSWER}
4:</span><span class="gensmall">{L_ANSWER_
<td class="row1"><span class="genmed">{S_ANSWER4}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_ANSWER}
5:</span><span class="gensmall">{L_ANSWER_
<td class="row1"><span class="genmed">{S_ANSWER5}</
</tr>
<tr>
<td class="row1"><span class="gen">{L_BOARD_LANGUAGE}
<td class="row1"><span class="genmed">{S_LANGUAGE}</
</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 />
<h1>{L_ABQ_TITLE}</h1>
<p>{L_ABQ_EXPLAIN}</p>
<script language="javascript" type="text/javascript">
<!--
function
update_anti_bot_image(
{
if (newimage == '')
{
document.anti_bot_
}
else
{
document.anti_bot_
}
}
//-->
</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}</
</tr>
<tr>
<td class="row1"
width="20%" valign="top"><span class="gen">{L_QUESTION}:</
<td class="row2"><textarea
name="question" class="post" rows="5"
cols="45" wrap="virtual">{S_QUESTION}</
</tr>
<tr>
<td class="row1"
width="20%" valign="top"><span class="gen">{L_HTML}:</span></
<td class="row2"><input
type="radio" name="usehtml" value="no"{S_HTML_NO_CHECKED}
/>{L_NO} <input type="radio" name="usehtml"
value="yes"{S_HTML_YES_
</tr>
<tr>
<td class="row1"
width="20%"><span class="gen">{L_ANTI_BOT_IMG}:<
<td class="row2"><select
name="anti_bot_img" onchange="update_anti_bot_
<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_
<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_
<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_
<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_
<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_
<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}
<td class="row2"><span
class="gensmall">{S_LANGUAGE}<
</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
/>