SuffeRiNG64
Писатель
- Регистрация
- 21 Сен 2009
- Сообщения
- 2
- Реакции
- 7
- Автор темы
- #1
Нужно задать пользователю пару вопросов, на которые ответ должны знать люди (как минимум) старше 18 лет. Если тест пройден - открывается доступ к закрытой категории на определенное время (в моем варианте на 48 часов). Ограничение можно снять или установить другое но тогда есть риск, что за родительский комп сел малолетний искатель красивого и тогда он как минимум картинки посмотрит (если скачать не додумается)
как это делается? Все просто
Создаем в корне сайта файл 18.php c таким содержимым
и создаем файл с базой вопросов include/18_q.php
(приведу часть своего файла с вопросами чтобы дать понятие о его структуре)
и так далее
как это делается? Все просто
PHP:
#
#-----[ Выполняем SQL запрос ]------------------------------------------------
#
ALTER TABLE `users` ADD `user_not_kid` datetime NOT NULL default '0000-00-00 00:00:00';
PHP:
#
#-----[Изменняем файл download.php]-------------------------------------------
#
//Находим следующее
$res = sql_query("SELECT name FROM torrents WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__);
//и заменяем на
$res = sql_query("SELECT name, category FROM torrents WHERE id = ".sqlesc($id)) or sqlerr(__FILE__, __LINE__);
//Находим
if (!$row)
stderr($tracker_lang['error'], $tracker_lang['invalid_id']);
//И после этого добавляем
if ($row['category'] == XXX && (gmtime() - strtotime($CURUSER['user_not_kid'])) > 172800) {
stderr($tracker_lang['error'], "Закачка из этой категории запрещена возростным цензом!<br>Для доступа к запрещенным разделам нужно быть старше 18 лет.<br>
В связи с тем что многие пользователи ставят в дату рождения не верную информацию, чтобы завысить свой возраст,<br>
принято рещение провести проверку на взрослость. Если у вас есть желание получить 48-и часовой доступ<br>
к запрещенным разделам пройдите пожалуйста <a href=18.php>ТЕСТИРОВАНИЕ</a>");
}
//Здесь XXX = ID категории с запрещенным допуском
//172800 = 48 часов в секундах
PHP:
#
#-----[Изменняем файл details.php]-------------------------------------------
#
//Находим в нем строку (которая при наличии установленных определенных модов может малость отличаться)
$res = sql_query("SELECT torrents.seeders, torrents.banned, torrents.leechers, torrents.info_hash, torrents.filename, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(torrents.last_action) AS lastseed, torrents.numratings, torrents.name, IF(torrents.numratings < $minvotes, NULL, ROUND(torrents.ratingsum / torrents.numratings, 1)) AS rating, torrents.owner, torrents.save_as, torrents.descr, torrents.visible, torrents.size, torrents.added, torrents.views, torrents.hits, torrents.times_completed, torrents.id, torrents.type, torrents.numfiles, torrents.image1, torrents.image2, categories.name AS cat_name, users.username FROM torrents LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN users ON torrents.owner = users.id WHERE torrents.id = $id")
//Находим в этой строке
categories.name AS cat_name,
//И после этого значения дописываем в строку запроса
categories.id AS cat_id,
//Находим дальше
if (!$row || ($row["banned"] == "yes" && !$moderator))
stderr($tracker_lang['error'], $tracker_lang['no_torrent_with_such_id']);
else {
//и после этого вставляем следующее
if ($row["cat_id"]=="ХХХ") {
if(gmtime() - strtotime($CURUSER['user_not_kid']) > 172800) {
stderr($tracker_lang['error'], "Закачка из этой категории запрещена возростным цензом!<br>Для доступа к запрещенным разделам нужно быть старше 18 лет.<br>
В связи с тем что многие пользователи ставят в дату рождения не верную информацию, чтобы завысить свой возраст,<br>
принято рещение провести проверку на взрослость. Если у вас есть желание получить 48-и часовой доступ<br>
к запрещенным разделам пройдите пожалуйста <a href=18.php>ТЕСТИРОВАНИЕ</a>");
}
}
//Здесь XXX = ID категории с запрещенным допуском
//172800 = 48 часов в секундах
#
#-----[На этом пока все]-------------------------------------------
#
Создаем в корне сайта файл 18.php c таким содержимым
PHP:
<?php
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
session_start();
ob_start();
$page_title = 'Возрастной контроль';
stdhead($page_title);
begin_main_frame();
class questions {
var $questions = array();
var $random_questions = array();
var $user_answers = array();
var $Q_prefix = 'UQA_';
var $test_complete = TRUE;
var $show_questions = 3;
var $out = '';
function questions($questions) {
// Создаем массив вопросов
if ( is_array($questions) && sizeof($questions)>0 )
{
$this->questions = $questions;
} else {
die ('База с вопросами не найдена<BR> Свяжитесь с Администратором.');
}
}
function input($in) {
return trim(htmlspecialchars(strtolower($in)));
}
function get_random_questions() {
if ( !isset($_POST) || sizeof($_POST)==0 )
{
// Выбираем случайный вопрос из базы
$rand_keys = array_rand($this->questions, $this->show_questions);
for ($i=0; $i<sizeof( $rand_keys ); $i++) {
$rand_key = $rand_keys [ $i ];
$this->random_questions [ $rand_key ] = $this->questions [ $rand_key ];
}
}
else
{
//
$p_keys = array_keys($_POST);
reset($p_keys);
do
{
$p_key = pos( $p_keys );
if (substr($p_key, 0, 4) == $this->Q_prefix )
{
$qid = intval( substr ( $p_key, 4 ) );
$this->random_questions [ $qid ] = $this->questions [ $qid ];
}
} while ( next($p_keys) );
}
}
function get_user_answers() {
reset( $this->random_questions );
do {
$qid = key( $this->random_questions );
$q = pos( $this->random_questions );
$q_user_answer = $this->user_answers[ $qid ] = $this->input( isset($_POST [ $this->Q_prefix . $qid ]) ? $_POST [ $this->Q_prefix . $qid ] : '' );
$result = $this->validate( $qid );
if (!$result) $this->test_complete = FALSE;
$this->do_out($qid, $result, $q['q'], $q_user_answer);
} while ( next($this->random_questions) );
}
function validate ( $qid ) {
global $lang;
$valid_answer = $this->questions [ $qid ] [ 'a' ];
$user_answer = $this->user_answers[ $qid ];
if (is_array($valid_answer)) {
$tmp_valid_answer = FALSE;
for ($i=0; $i<sizeof($valid_answer); $i++) {
if ( strcasecmp(strtolower($valid_answer[$i]), $user_answer) == 0 ) $tmp_valid_answer = TRUE;
}
$this->questions [ $qid ] ['result'] = ( $tmp_valid_answer ) ? TRUE : FALSE;
}
else
{
$this->questions [ $qid ] ['result'] = ( strcasecmp(strtolower($valid_answer), $user_answer) == 0 ) ? TRUE : FALSE;
}
return $this->questions [ $qid ] ['result'];
}
function do_out($qid, $result, $q_text, $q_user_answer)
{
$id = $this->Q_prefix . $qid;
$mark = ($result) ? 'green' : 'red';
$out = "";
$out .= "<li>\n";
$out .= "\t<div class=\"q_title\"><label for=\"$id\">$q_text</label></div>\n";
$out .= "\t<div class=\"q_answer $mark\">\n";
$out .= "\t\t<input type=\"text\" name=\"$id\" id=\"$id\" value=\"$q_user_answer\" />\n";
$out .= "\t</div>\n";
$out .= "</li>\n";
$this->out .= $out;
}
}
// Считываем вопросы из нужного файла
require($rootpath . 'include/18_q.php');
setlocale(LC_CTYPE, 'ru_RU.CP1251');
$quest = new questions( $questions );
$quest->get_random_questions( );
$quest->get_user_answers( );
// Проверяем согласие на прохождение теста
if (isset( $_POST['over18']) && $quest->input($_POST['over18'])=='on' ) {
$mark = 'green';
$cheked = 'checked';
} else {
$mark = '';
$cheked = '';
$quest->test_complete = FALSE;
}
$over18 = '<input type="checkbox" name="over18" '.$cheked.' />';
//
$msg = '';
if ($quest->test_complete) {
$gdt = getdate();
$cuid = $CURUSER['id'];
sql_query('UPDATE users SET user_not_kid = '.sqlesc(get_date_time()).' WHERE id='.$cuid);
$msg = 'Тест успешно пройден!<br /><br />';
$msg .= 'Через 10 секунд вы будете перенаправлены на главную страницу сайта<br />';
if (!isset($redirect) || $redirect == '' || strlen($redirect) == 0) {
$msg .= 'Нажмите <a href="index.php">сюда</a> для перехода на главную страницу. (если ждать не охота)<br />';
$msg .= 'Теперь вам в течение 48 часов доступны ограниченые разделы форума.';
}
print('
<META HTTP-EQUIV="REFRESH" CONTENT="10;URL=index.php">
<table class="forumline forum">
<col class="row1">
<tr>
<th>Возрастной контроль ПРОЙДЕН</th>
</tr>
<tr>
<td>
<div id="q18">
<div class="message">'.$msg.'</div>
</div>
</td>
</tr>
</table>
');
} else {
//$msg = 'У вас есть ровно 1 минута на то чтобы дать правильные ответы на следующие вопросы:';
$msg .= 'Запрошеный вами раздел может содержать материалы, которые не предназначены для просмотра лицам не достигшим совершенолетия<br />';
$msg .= '';
print('
<META HTTP-EQUIV="REFRESH" CONTENT="60;URL=18.php">
<table class="forumline forum">
<col class="row1">
<form name="age_control" method="POST" action="?">
<tr>
<th>Возрастной контроль</th>
</tr>
<tr>
<td>
<div id="q18">
<div class="message">'.$msg.'</div>
<div class="over18">
'.$over18.' Данной формой я (<span>'.$CURUSER['username'].'</span>)
подтверждаю, что являюсь совершеннолетним (18 лет или более),
и действительно хочу просмотреть материалы данного раздела.
</div>
<div class="i_am_cool">
В подтверждение своего возраста я готов пройти данный тест.
</div>
<div class="test">
<div class="rules">
Дайте правильные ответы на перечисленые вопросы.<br />
Для ответа у вас есть всего 60 секунд.
</div>
<ol>' . $quest->out . '</ol>
</div>
</td>
</tr>
<tr>
<td class="catBottom"><input type="submit" value="Ответить" /></td>
</tr>
</form>
</table>
');
}
$user_time = 0;
// End;
end_main_frame();
stdfoot();
die;
?>
и создаем файл с базой вопросов include/18_q.php
(приведу часть своего файла с вопросами чтобы дать понятие о его структуре)
PHP:
<?PHP
$questions[] = array( 'q' => 'Имя президента Украины ?',
'a' => array('виктор', 'вiктор', 'витя', 'вiтя') );
$questions[] = array( 'q' => '2+2*2 будет равно:',
'a' => '6' );
$questions[] = array( 'q' => 'Страна-Победитель ЧМ по футболу 2006 г.:',
'a' => array('италия', 'iталiя') );
$questions[] = array( 'q' => 'Фамилия <i>последнего</i> президента СССР:',
'a' => array('горбачев', 'горбачёв', 'горбачов') );
$questions[] = array( 'q' => 'Украинская точка обмена трафиком:',
'a' => array('ua-ix', 'uaix', 'юаикс') );
$questions[] = array( 'q' => 'Самая высокая точка Украины (название горы):',
'a' => 'говерла' );
$questions[] = array( 'q' => '"Мастер и Маргарита" написал (Фамилия писателя):',
'a' => 'булгаков' );
$questions[] = array( 'q' => 'Фамилия известного политика на картинке:<BR><img src="http://вашсайт/data/yanukovich.jpg">',
'a' => array('янукович') );
$questions[] = array( 'q' => 'Фамилия известного украинского писателя изображенного на картинке<BR> (автор: "Кобзарь", "Гайдамаки" ...):<BR><img src="http://вашсайт/data/shevchenko.jpg">',
'a' => array('шевченко', 'тарас шевченко') );
$questions[] = array( 'q' => 'Имя первого космонавта ?',
'a' => array('юрий', 'юра', 'юрiй') );
$questions[] = array( 'q' => 'Отчество Брежнева ?',
'a' => array('ильич', 'iлiч') );
$questions[] = array( 'q' => 'Количиство республик в СССР:',
'a' => array('15', '16') );
$questions[] = array( 'q' => 'Главную роль в фильме "3 мушкетера" сыграл :',
'a' => 'боярский' );
$questions[] = array( 'q' => 'Раньше по всем телеканалам в 21-00 вещалась програма:',
'a' => array('время', 'час') );
$questions[] = array( 'q' => ' Санкт-Петербург назывался раньше:',
'a' => array('ленинград', 'ленiнград') );
$questions[] = array( 'q' => 'Первая строка гимна СССР:',
'a' => array('союз нерушимый республик свободных', 'союз нерушимый') );
$questions[] = array( 'q' => 'Реальная фамилия В.И.Ленина:',
'a' => 'ульянов' );
$questions[] = array( 'q' => 'Чью мать обещал показать американцам Хрущев? Чертову, Кузькину, Микояна, свою :',
'a' => 'Кузькину' );
$questions[] = array( 'q' => 'Последовательное изложение самим говорящим или пишущим основных этапов его жизни.',
'a' => 'автобиография' );
$questions[] = array( 'q' => 'Отсутствие конца, предела (в пространстве и времени).',
'a' => 'бесконечность' );
$questions[] = array( 'q' => 'Пространство, не имеющее видимых пределов, границ.',
'a' => 'бесконечность' );
$questions[] = array( 'q' => 'Устройство для приготовления бетонной смеси путем перемешивания ее составных частей во вращающемся барабане.',
'a' => 'бетономешалка' );
$questions[] = array( 'q' => 'Боевая готовность.',
'a' => 'боеготовность' );
$questions[] = array( 'q' => 'Водитель трамвая.',
'a' => 'вагоновожатый' );
$questions[] = array( 'q' => 'Водоем (обычно искусственный), созданный для целей путем перегораживания плотиной реки, ручья и т.п.',
'a' => 'водохранилище' );
$questions[] = array( 'q' => 'Военнослужащий, взятый в плен.',
'a' => 'военнопленный' );
$questions[] = array( 'q' => 'Извлечение из организма некоторого количества крови с лечебной целью.',
'a' => 'кровопускание' );
$questions[] = array( 'q' => 'Член Республиканской партии (в США).',
'a' => 'республиканец' );
$questions[] = array( 'q' => 'Сельскохозяйственная машина.',
'a' => 'сельхозмашина' );
$questions[] = array( 'q' => 'Помещение, где производится сортировка.',
'a' => 'сортировочная' );
$questions[] = array( 'q' => 'Газ, пар или жидкость, передающие тепло в системах бытового и промышленного теплоснабжения.',
'a' => 'теплоноситель' );
?>
и так далее