Перейти к контенту

[2.3.x](bfarber) Викторина (Trivia system)


Рекомендуемые сообщения

  • Ответы 322
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

А нельзя ли зделать чтоб викторина была похожа вот на эту: http://www.viktorina.net/ .

Тут и баллы по времини ответа на вопрос зачисляются и статистика ведется. Да и впринципе початится можно.

Ссылка на комментарий
Поделиться на других сайтах

Дело в том что там и стоит 1 уже

Тогда вам прийдётся колоться какие у вас кодировки форума/базы. Либо обратиться к ФАКу ибо проблемы не с модом а с софтом форума :D

 

А нельзя ли зделать чтоб викторина была похожа вот на эту...

Можно. Только за $ и не прям сейчас.

Будут и очки и победившие и лучшие и сколько угодно отдельных викторин и статистика получше и т.д. ;) Но как я уже сказал, попозже...

Ссылка на комментарий
Поделиться на других сайтах

if(strtolower($this->ipsclass->input['the_answer']) == strtolower($pqrow['answer']))

странно, но эта конструкция не работает. Я насколько понял, переводится в нижний регистр ответ из базы и ответ пользователя и сравниваются, но на самом деле ответ пользователя почему - то не переводится в нижний регистр. То есть по сути строчка КОРТ и корт не равны при сравнении таким образом

Тоже не работает, заменила, как указано. Не срабатывает. Букву ё не видит, с большой буквы не написать :D

Ссылка на комментарий
Поделиться на других сайтах

Не видит ё? Насколько мне известно, это связано с тем что не выбрана русская локаль в PHP. Попробуйте перед этой строчкой добавить (если Linux/Unix etc.):

set_locale(LC_ALL,'RU_ru');

Если суппорт у хостера быстрый, они быстрее меня подскажут решение :D

Ссылка на комментарий
Поделиться на других сайтах

Sannis, спасибо за твою отзывчивость и быструю реакцию на всё, приятно обращаться к тебе :D Я не знаю где добавлять, извиняюсь. Просто написала пользователям, чтоб про ё и заглавные буквы забыли ;)
Ссылка на комментарий
Поделиться на других сайтах

Я не знаю где добавлять, извиняюсь.

Перед

strtolower($this->ipsclass->input['the_answer']) == strtolower($pqrow['answer']))

добавьте

set_locale(LC_ALL,'RU_ru');

Ссылка на комментарий
Поделиться на других сайтах

Спасибо. Сейчас добавлю :D

strtolower это у меня не пашет почему-то, всё равно только с маленькой буквы приходится писать.

 

Правильный ответ: влади

Вы ответили: Влади

Ваш ответ неверный

 

В коде поставила так, верно?

 

set_locale(LC_ALL,'RU_ru');

if(strtolower($this->ipsclass->input['the_answer']) == strtolower($pqrow['answer']))

Изменено пользователем Lera
Ссылка на комментарий
Поделиться на других сайтах

В люборм случае может получиться, что пользователю попадётся вопрос на который он отвечал, ибо он выбирается рандомно.

 

Если бы это было система с отдельными викторинами в которых есть вопросы и засчитывалось бы прохождение викторины - имело бы смысл так делать.

 

Разве имеет смысл делать?

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

Исправлено. Инструкция в архиве отдельным файлом. :D

Ссылка на комментарий
Поделиться на других сайтах

В файле trivia.php строка 407 ошибка:

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_incorrect=trivia_incorrect+1, session_activity='".time()."', currentcorrect='0' WHERE tsid='{$meminfo['tsid']}';");
$this->ipsclass->DB->query("INSERT INTO ".SQL_PREFIX."trivia_sessions SET trivia_incorrect=trivia_incorrect+1, session_activity='".time()."', currentcorrect='0' WHERE tsid='{$meminfo['tsid']}';");[/b]

Похоже, что запрос с INSERT INTO нужно убрать.

 

P.S. В lang файле 'outoftime' нужно исправить, правильно так: "не был дан вовремя" - "не", в данном случае, пишется раздельно.

Изменено пользователем Lazy23
Ссылка на комментарий
Поделиться на других сайтах

Спасибо :D

 

P.S. Больше нужно присматриваться к чужому коду...

Ссылка на комментарий
Поделиться на других сайтах

А как убрать? Приведите, пожалуйста, кусок кода целиком.

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_incorrect=trivia_incorrect+1, session_activity='".time()."', currentcorrect='0' WHERE tsid='{$meminfo['tsid']}';");
$this->ipsclass->DB->query("INSERT INTO ".SQL_PREFIX."trivia_sessions SET trivia_incorrect=trivia_incorrect+1, session_activity='".time()."', currentcorrect='0' WHERE tsid='{$meminfo['tsid']}';");

заменить на

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_incorrect=trivia_incorrect+1, session_activity='".time()."', currentcorrect='0' WHERE tsid='{$meminfo['tsid']}';");

Ссылка на комментарий
Поделиться на других сайтах

Естессно.

 

В ./sources/component_public/trivia.php в функциях start_session() и cont_session() перед

$this->output .= $this->ipsclass->compiled_templates['skin_trivia']->question_block($qrow);

добавить

$qrow['len'] = strlen($qrow['answer']);

и в шаблоне skin_trivia -> question_block в нужном вам месте добавить

{$ques['len']}

Изменено пользователем Sannis
Ссылка на комментарий
Поделиться на других сайтах

Все сделал как описано не появилось кол-во букв...(

 

$qrow['len'] = strlen($qrow['question']);

добавлял 2 раза.

 

{$ques['len']}

вставлял в скине во все возможные места не помогло...(

Ссылка на комментарий
Поделиться на других сайтах

Фикс. Перекачайте архив и замените файлы. Установку проводить заново не надо.

 

Kraft, ваша проблема скорее всего этим решится.

Ссылка на комментарий
Поделиться на других сайтах

хм... после обновления до версии 2.1.2 начала вылезать ошибка:

Fatal error: Call to undefined method skin_trivia_2::button_add_question() in /usr/home/httpdocs/forum/sources/components_public/trivia.php on line 183

 

переустановка шаблонов все решило!

 

к сожалению версия 2.1.2 также не решила вопрос с накруткой счетчика, отвечаешь единожды правильно и после этого жмешь хоть до посинения F5

Ссылка на комментарий
Поделиться на других сайтах

защита от дурака отсутствует в самом модуле)))

афтар не учел, афтар не достоин быть в разработчиках IPB

позор bfarber...

 

				$pquestion = $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."trivia WHERE open='1' AND id='".intval($this->ipsclass->input['id'])."' LIMIT 1");
			$pqrow = $this->ipsclass->DB->fetch_row($pquestion);
			$correct = (strtolower(trim($this->ipsclass->input['the_answer'])) == strtolower($pqrow['answer']))?1:0;

вот тут значит идет проверка...

стало быть, надо делать так

при правильном ответе писать ид вопроса с правильным ответом в таблицу сессий

потом при проверке правильности также смотреть, а не совпадают ли ид последнего отвеченного с intval($this->ipsclass->input['id'])

 

вот наверное и все

 

модифицируецо одним ALTER TABLE и небольшим изменением в

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_correct=trivia_correct+1, session_activity='".time()."', currentcorrect=currentcorrect+1 {$toqry} WHERE tsid='{$meminfo['tsid']}'");

и

$correct = (strtolower(trim($this->ipsclass->input['the_answer'])) == strtolower($pqrow['answer']))?1:0;

 

значицо буду писать мод

 

1.

ALTER TABLE ibf_trivia_sessions ADD last_right_id int(10) NOT NULL default '0'

 

./sources/components_public/trivia.php

2. найти

$correct = (strtolower(trim($this->ipsclass->input['the_answer'])) == strtolower($pqrow['answer']))?1:0;

заменить на

$correct = ((strtolower(trim($this->ipsclass->input['the_answer'])) == strtolower($pqrow['answer'])) and (intval($this->ipsclass->input['id']) != $meminfo['last_right_id']))?1:0;

 

3. найти

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_correct=trivia_correct+1, session_activity='".time()."', currentcorrect=currentcorrect+1 {$toqry} WHERE tsid='{$meminfo['tsid']}'");

заменить на

$this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."trivia_sessions SET trivia_correct=trivia_correct+1, session_activity='".time()."', currentcorrect=currentcorrect+1, last_right_id=".intval($this->ipsclass->input['id'])." {$toqry} WHERE tsid='{$meminfo['tsid']}'");

 

нужно опробовать...

Ссылка на комментарий
Поделиться на других сайтах

ай маладца, уже прикинул решение, сегодня опробую...

 

Arhar, все работает отлично, в случае данных махинаций, счетчик не накручивается, появляеться ошибка что ответ неверный :D

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

Спасибо за решение! Ты один из лучших!

 

Del_Piero_7 вместо этого

<b>{$ques['question']}</b><br /><br />

вставь это:

<b>{$ques['question']}<br />Количество букв в ответе: {$ques['len']}</b><br /><br />

 

теперь осталось только добавить счетчик с обратным отсчетом...

Ссылка на комментарий
Поделиться на других сайтах

защита от дурака отсутствует в самом модуле)))

Вот чёрт. Код у него староватый же был, 2 летней давности для ИПБ 2.0.х) Не заметил проверку не вставил в этот запрос, учту.

Ссылка на комментарий
Поделиться на других сайтах

Фикс. Перекачайте архив и замените файлы. Установку проводить заново не надо.

 

Kraft, ваша проблема скорее всего этим решится.

 

Файлы обновил. Проблема не решилась...

Ссылка на комментарий
Поделиться на других сайтах

Хм. Туплю я что-то. При заходе на вкладку? А раньше открывалась? Посмотрите на вкладке ПРОЧЕЕ в Управлении компонентами есть Викторина?

 

P.S. Напишите в ICQ если что...

Ссылка на комментарий
Поделиться на других сайтах

А нельзя ли сделать так, чтобы можно было создать вопросы с вариантами ответов, то есть допустим из 5 вариантов выбрать 1 верный, как в тесте?
Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.