Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите с викториной
Форумы портала PHP.SU » » Вопросы новичков » помогите с викториной

Страниц (1): [1]
 

1. Bio man - 06 Ноября, 2011 - 12:37:40 - перейти к сообщению
если комната с викториной то подключаем контроллер
PHP:
скопировать код в буфер обмена
  1. if($mode['mode'] == 'victorina') {
  2.         include '../includes/victorina.php';
  3. }

вот с самим контроллером запара. как лучше организовать работу викторины (контроллера)?
он должен задавать вопросы, давать подсказки, зачислять баллы итд... пробовал сам стряпать но получилось просто ужасно и работает очень плохо и не так как надо
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $bot = new user(2);
  4. $time = time();
  5. $query = 'SELECT `time`, `curr_quest` FROM `chat_rooms` WHERE `id` = '.$data->getGetObj()->rm;
  6. $last_quest = $db->query($query)->fetch_assoc();// Время и id последнего вопроса
  7.  
  8. $query = 'SELECT * FROM `victorina`';
  9. $num = $db->query($query)->num_rows;
  10.  
  11. if($last_quest['curr_quest'] > 0) {
  12.         $query = 'SELECT `answer` FROM `victorina` WHERE `id` = '.$last_quest['curr_quest'];
  13.         $answer = $db->query($query)->fetch_assoc();
  14. }
  15.  
  16. $query = 'SELECT `uid`, `message`, `time` FROM `chat_msgs` WHERE `time` > '.$last_quest['time'].' AND `room_id` = '.$data->getGetObj()->rm.' ORDER BY `time` ASC';// Ответы
  17. $result = $db->query($query);
  18.  
  19. while($row = $result->fetch_assoc()) {
  20.        
  21.         if(strtoupper($row['message']) == strtoupper($answer['answer'])) {
  22.                 $usr = new user($row['uid']);
  23.                 $uid = $usr->getProporties()->id;
  24.                 $room = $data->getGetObj()->rm;
  25.                 $answ_time = $row['time'];
  26.                
  27.                 $msg = '<b>Молодец, <a href=\"../user.php?rm='.$data->getGetObj()->rm.'&uid='.$usr->getProporties()->id.'\">'.$usr->getProporties()->username.'</a>!</b> Правильный ответ: <b>'.$answer['answer'].'</b>. <a href=\"../user.php?rm='.$data->getGetObj()->rm.'&uid='.$usr->getProporties()->id.'\">'.$usr->getProporties()->username.'</a> правильно ответил на вопрос(ов). Следующий вопрос через 10 секунд';
  28.                
  29.                 $query = 'INSERT INTO `chat_msgs` (`uid`, `private_id`, `room_id`, `message`, `time`) VALUES ('.$uid.', 0, '.$room.', "'.$msg.'", '.$time.')';
  30.                
  31.                 if(!$db->query($query)) echo $db->error;
  32.                
  33.                 break;
  34.         }
  35. }
  36. if(($last_quest['time'] == 0) || $time >= $answ_time) {
  37.         $quest_id = mt_rand(1, $num);
  38.         $query = 'SELECT * FROM `victorina` WHERE `id` = '.$quest_id;
  39.         $question = $db->query($query)->fetch_assoc();
  40.        
  41.         $query = 'UPDATE `chat_rooms` SET `time` = '.$time.', `curr_quest` = '.$quest_id.' WHERE `id` = '.$data->getGetObj()->rm;
  42.         $db->query($query);
  43.        
  44.         $n = mb_strlen($answer['answer'], 'UTF-8');
  45.        
  46.         $msg = '<b>Вопрос:</b> '.$question['quest'].' ('.$n.' букв)';
  47.         $query = 'INSERT INTO `chat_msgs` (`uid`, `private_id`, `room_id`, `message`, `time`) VALUES ('.$bot->getProporties()->id.', 0, '.$data->getGetObj()->rm.', "'.$msg.'", '.$time.')';
  48.         $db->query($query);
  49. }
  50. ?>
  51.  
2. caballero - 06 Ноября, 2011 - 12:48:48 - перейти к сообщению
не надо сваливать все в кучу да еще и называть модным словом контроллер

разберись сначала с бизнес-логикой
где какие данные как выбираются в какой последовательности

напиши запросы к базе отдельно вверху а лучше в отдельных функциях - оттестируй их

а потом собирай уже все вместе
3. Bio man - 06 Ноября, 2011 - 12:55:27 - перейти к сообщению
ну контроллер он и в африке контроллер и ничего модного в этом слове нету... что такое бизнес логика? попробую класс написать
4. caballero - 06 Ноября, 2011 - 13:20:14 - перейти к сообщению
замечательно

что такое бизнес-логика в программе ты не знаешь
зато знаешь что такое контроллер

так может просветишь почему то что ты написал именно контроллер а не просто код на PHP
5. Bio man - 06 Ноября, 2011 - 13:27:07 - перейти к сообщению
ну потому что он управляет ботом, а именно задает вопросы, проверяет ответы, дает подсказки, кароче контролирует поведение бота. а что такое бизнес логика?
6. caballero - 06 Ноября, 2011 - 13:37:58 - перейти к сообщению
бизнес логика - это логика твоей программы касающаяся обработки бизнес данных - то есть прикладных данных с которыми работает твоя программа


Цитата:
задает вопросы, проверяет ответы, дает подсказки

именно этот алгоритм и есть бизнес логика в данном случае

в отличие о например функций как законектится к базе или принять данные со страницы

 

Powered by ExBB FM 1.0 RC1