Форумы портала PHP.SU » » Работа с СУБД » Умник в чате

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

1. Coder1994 - 05 Декабря, 2010 - 14:49:08 - перейти к сообщению
Один знакомый написал скрипт, бота умника в чате, но проблема в том, что при подсказке умником ответа на вопрос,он подсказывает по одной букве по порядку (вначале первую, потом вторую),а мне нужно чтобы он подсказывал случайную букву.
Вот код:
PHP:
скопировать код в буфер обмена
  1. $set['umnik_help']='30';
  2. $set['umnik_new']='30';
  3. $set['umnik_time']='90';
  4. $num=rand(0,2);
  5. $umnik_last = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' ORDER BY id DESC"));
  6. if ($umnik_last!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last['umnik_st']!=0)
  7. {
  8. $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  9. $umnik_post = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `msg` like '%$umnik_vopros[otvet]%' AND `umnik_st` = '0' AND `time` >= '".($time-$umnik_last['time'])."' ORDER BY `id` ASC LIMIT 1"));
  10. if($umnik_post!=NULL){
  11. $inf=mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `id` = '$umnik_post[user_id]' LIMIT 1"));
  12. $add_credits=0;
  13. if ($umnik_last['umnik_st']==1){$add_credits=0.5;$pods='не используя подсказок';}
  14. if ($umnik_last['umnik_st']==2){$add_credits=0.1;$pods='используя одну подсказку';}
  15. if ($umnik_last['umnik_st']==3){$add_credits=0.05;$pods='используя обе посказки';}
  16. $msg="[b]$inf[nick][/b] самый первый дал верный ответ на вопрос: [b]$umnik_vopros[vopros][/b] $pods.<br/>\nИ получает $add_credits кредитов.<br/>\nСледующий вопрос будет через $set[umnik_new] сек.";
  17. mysql_query("INSERT INTO `chat_posts` (`user_id`, `umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '4', '$time', '$msg', '3', '$umnik_vopros[id]')");
  18. mysql_query("UPDATE `users` SET `credits` = '".($inf['credits']+$add_credits)."' WHERE `id` = '$inf[id]' LIMIT 1");
  19. }
  20. }
  21. $umnik_last1 = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `umnik_st` = '1' ORDER BY id DESC"));
  22. if ($umnik_last1!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last1['time']<time()-$set['umnik_time'])
  23. {
  24. $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last1[vopros]' LIMIT 1"));
  25. $msg="На вопрос никто не ответил.<br/>\nПравильный ответ: $umnik_vopros[otvet].<br/>\nСледующий вопрос через $set[umnik_new] сек.";
  26. mysql_query("INSERT INTO `chat_posts` (`user_id`, `umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '4', '$time', '$msg', '3', '$umnik_vopros[id]')");
  27. }
  28. $umnik_last = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `umnik_st` <> '0' ORDER BY id DESC"));
  29. if ($umnik_last==NULL || $umnik_last['umnik_st']==4 && $umnik_last['time']<time()-$set['umnik_new'])
  30. {
  31. // задается вопрос
  32. $k_vopr=mysql_result(mysql_query("SELECT COUNT(*) FROM `chat_vopros`"),0);
  33. $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` LIMIT ".rand(0,$k_vopr).", 1"));
  34. $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Ответ:[/b] слово из ".mb_strlen($umnik_vopros['otvet'])." букв.";
  35. mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '1', '$time', '$msg', '3', '$umnik_vopros[id]')");
  36. }
  37. if ($umnik_last!=NULL && $umnik_last['umnik_st']==1 && $umnik_last['time']<time()-$set['umnik_help'])
  38. {
  39. $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  40. if (function_exists('iconv_substr'))
  41. $help=iconv_substr($umnik_vopros['otvet'], 0, 1, 'utf-8');
  42. else
  43. $help=substr($umnik_vopros['otvet'], 0, 2);
  44. for ($i=$num;$i<mb_strlen($umnik_vopros['otvet'])-1 ;$i++ ) {
  45.         $help.='.';
  46. }
  47. $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Первая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  48. mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '2', '$time', '$msg', '3', '$umnik_vopros[id]')");
  49. }
  50. if ($umnik_last!=NULL && $umnik_last['umnik_st']==2 && $umnik_last['time']<time()-$set['umnik_help'])
  51. {
  52. $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  53. if (function_exists('iconv_substr'))
  54. $help=iconv_substr($umnik_vopros['otvet'], 0, 2, 'utf-8');
  55. else
  56. $help=substr($umnik_vopros['otvet'], 0, 4);
  57. for ($i=$num;$i<mb_strlen($umnik_vopros['otvet'])-2 ;$i++ ) {
  58.         $help.='.';
  59. }
  60. $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Вторая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  61. mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '3', '$time', '$msg', '3', '$umnik_vopros[id]')");
  62. }

Может кстати, вы подскажете можно ли упростить\улучшить этот код, а то мне кажется, что как-то кривовато выглядит?
(Добавление)
Что скажете?
2. OrmaJever - 05 Декабря, 2010 - 15:29:46 - перейти к сообщению
Coder1994 пишет:
Может кстати, вы подскажете можно ли упростить\улучшить этот код, а то мне кажется, что как-то кривовато выглядит?


Не тебе одному так кажется Ха-ха

Мягко говоря это самый плохой код который я видел. Надо ж так всё натулить. Попробую разобратсяпоже отпишесь.
(Добавление)
Как я увидел даётся только 2 подсказки? первая и потом 2 буква?
3. Coder1994 - 05 Декабря, 2010 - 15:54:25 - перейти к сообщению
да, я хотел бы чтобы было по другому, чтобы слово подсказывалось на 50%, то есть если в слове 8 букв,то даётся четыре подсказки...
(Добавление)
ждёмс...
4. OrmaJever - 05 Декабря, 2010 - 18:53:40 - перейти к сообщению
Вобщемто там нужно много переписывать чтобы зделать полный рендум.
Ну вот я немного изменил и теперь первая подсказка это случайная буква а 2 это две подряд. Бесплатно больше не смогу зделать.
PHP:
скопировать код в буфер обмена
  1. <?
  2. $set['umnik_help']='30';
  3. $set['umnik_new']='30';
  4. $set['umnik_time']='90';
  5. $num=rand(0,2);
  6.  
  7. $umnik_last = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' ORDER BY id DESC"));
  8.  
  9. if ($umnik_last!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last['umnik_st']!=0)
  10. {
  11.         $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  12.         $umnik_post = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `msg` like '%$umnik_vopros[otvet]%' AND `umnik_st` = '0' AND `time` >= '".($time-$umnik_last['time'])."' ORDER BY `id` ASC LIMIT 1"));
  13.         if($umnik_post!=NULL){
  14.                 $inf=mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `id` = '$umnik_post[user_id]' LIMIT 1"));
  15.                 $add_credits=0;
  16.                 if ($umnik_last['umnik_st']==1){$add_credits=0.5;$pods='не используя подсказок';}
  17.                 if ($umnik_last['umnik_st']==2){$add_credits=0.1;$pods='используя одну подсказку';}
  18.                 if ($umnik_last['umnik_st']==3){$add_credits=0.05;$pods='используя обе посказки';}
  19.                 $msg="[b]$inf[nick][/b] самый первый дал верный ответ на вопрос: [b]$umnik_vopros[vopros][/b] $pods.<br/>\nИ получает $add_credits кредитов.<br/>\nСледующий вопрос будет через $set[umnik_new] сек.";
  20.                 mysql_query("INSERT INTO `chat_posts` (`user_id`, `umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '4', '$time', '$msg', '3', '$umnik_vopros[id]')");
  21.                 mysql_query("UPDATE `users` SET `credits` = '".($inf['credits']+$add_credits)."' WHERE `id` = '$inf[id]' LIMIT 1");
  22.         }
  23. }
  24.  
  25. $umnik_last1 = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `umnik_st` = '1' ORDER BY id DESC"));
  26.  
  27. if ($umnik_last1!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last1['time']<time()-$set['umnik_time'])
  28. {
  29.         $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last1[vopros]' LIMIT 1"));
  30.         $msg="На вопрос никто не ответил.<br/>\nПравильный ответ: $umnik_vopros[otvet].<br/>\nСледующий вопрос через $set[umnik_new] сек.";
  31.         mysql_query("INSERT INTO `chat_posts` (`user_id`, `umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '4', '$time', '$msg', '3', '$umnik_vopros[id]')");
  32. }
  33.  
  34. $umnik_last = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_posts` WHERE `chat_id` = '3' AND `umnik_st` <> '0' ORDER BY id DESC"));
  35.  
  36. if ($umnik_last==NULL || $umnik_last['umnik_st']==4 && $umnik_last['time']<time()-$set['umnik_new'])
  37. {
  38.         // задается вопрос
  39.         $k_vopr=mysql_result(mysql_query("SELECT COUNT(*) FROM `chat_vopros`"),0);
  40.         $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` LIMIT ".rand(0,$k_vopr).", 1"));
  41.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Ответ:[/b] слово из ".mb_strlen($umnik_vopros['otvet'])." букв.";
  42.         mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '1', '$time', '$msg', '3', '$umnik_vopros[id]')");
  43. }
  44.  
  45. if ($umnik_last!=NULL && $umnik_last['umnik_st']==1 && $umnik_last['time']<time()-$set['umnik_help'])
  46. {
  47.         $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  48.     $_SESSION['rand'] = rand(0, mb_strlen($umnik_vopros['otvet']) - 1);
  49.     $help = '';
  50.         for ($i=0;$i<$_SESSION['rand'];$i++ ) {
  51.         $help.='*';
  52.         }
  53.         if (function_exists('iconv_substr'))
  54.                 $help.=iconv_substr($umnik_vopros['otvet'], $_SESSION['rand'], 1, 'utf-8');
  55.         else
  56.                 $help.=substr($umnik_vopros['otvet'], $_SESSION['rand'], 2);
  57.  
  58.         for ($i=0;$i<mb_strlen($umnik_vopros['otvet'])-$_SESSION['rand'];$i++ ) {
  59.         $help.='*';
  60.         }
  61.  
  62.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Первая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  63.         mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '2', '$time', '$msg', '3', '$umnik_vopros[id]')");
  64. }
  65.  
  66. if ($umnik_last!=NULL && $umnik_last['umnik_st']==2 && $umnik_last['time']<time()-$set['umnik_help'])
  67. {
  68.         $umnik_vopros = mysql_fetch_assoc(mysql_query("SELECT * FROM `chat_vopros` WHERE `id` = '$umnik_last[vopros]' LIMIT 1"));
  69.         $help = '';
  70.  
  71.         for ($i=0;$i<$_SESSION['rand'];$i++ ) {
  72.         $help.='*';
  73.         }
  74.  
  75.         if (function_exists('iconv_substr'))
  76.                 $help.=iconv_substr($umnik_vopros['otvet'], $_SESSION['rand']+1, 2, 'utf-8');
  77.         else
  78.                 $help.=substr($umnik_vopros['otvet'], $_SESSION['rand']+1, 4);
  79.  
  80.         for ($i=0;$i<mb_strlen($umnik_vopros['otvet'])-$_SESSION['rand']-2;$i++) {
  81.         $help.='*';
  82.         }
  83.  
  84.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br/>\n[b]Вторая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  85.         mysql_query("INSERT INTO `chat_posts` (`user_id`,`umnik_st`, `time`, `msg`, `chat_id`, `vopros`) values('2', '3', '$time', '$msg', '3', '$umnik_vopros[id]')");
  86. }
  87.  
  88. ?>
5. ALEN - 05 Декабря, 2010 - 23:10:37 - перейти к сообщению
Это действительно ужасный код, советую сначала его привести в вид
6. Coder1994 - 06 Декабря, 2010 - 15:02:48 - перейти к сообщению
Переписал код на mysqli, бот перестал выводить подсказки, т.е:
PHP:
скопировать код в буфер обмена
  1.  
  2. echo var_dump($umnik_vopros['otvet']);
  3. echo var_dump($umnik_vopros['vopros']);
  4.  

выводит: NULL NULL
Вот код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $set['umnik_help'] = '30';
  4. $set['umnik_new'] = '30';
  5. $set['umnik_time'] = '90';
  6. $umnik_last = $mysqli->query("SELECT * FROM `chat_rooms`, `chat_posts` WHERE (`chat_rooms`.`umnik` = '1') ORDER BY `chat_posts`.`id` DESC");
  7. $umnik_last = $umnik_last->fetch_assoc();
  8.  
  9. if ($umnik_last!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last['umnik_st']!=0)
  10. {
  11.         $umnik_vopros = $mysqli->query("SELECT * FROM `chat_quests` WHERE `id` = '$umnik_last[vopros]' LIMIT 1");
  12.         $umnik_vopros = $umnik_vopros->fetch_assoc();
  13.         $umnik_post = $mysqli->query("SELECT * FROM `chat_posts` WHERE `room_id` = '$_GET[id]' AND `text` like '%$umnik_vopros[otvet]%' AND `umnik_st` = '0' AND `time` >= '".($time-$umnik_last['time'])."' ORDER BY `id` ASC LIMIT 1");
  14.         $umnik_post = $umnik_post->fetch_assoc();
  15.         if($umnik_post!=NULL){
  16.                 $us = get_user($umnik_post['autor']);
  17.                 $add_credits=0;
  18.                 if ($umnik_last['umnik_st']==1){$add_credits=0.5;$pods='не используя подсказок';}
  19.                 if ($umnik_last['umnik_st']==2){$add_credits=0.1;$pods='используя одну подсказку';}
  20.                 if ($umnik_last['umnik_st']==3){$add_credits=0.05;$pods='используя обе посказки';}
  21.                 $msg="[b]$us[nick][/b] дал верный ответ на вопрос: [b]$umnik_vopros[vopros][/b] $pods.<br />\nЕго балланс увеличен на $add_credits кредитов.<br />\nСледующий вопрос будет через $set[umnik_new] секунд.";
  22.                 $mysqli->query("INSERT INTO `chat_posts` (`autor`, `umnik_st`, `time`, `text`, `room_id`, `quests`) values('0', '4', '$time', '$msg', '$_GET[id]', '$umnik_vopros[id]')");
  23.                 $mysqli->query("UPDATE `users` SET `credits` = '".($us['credits']+$add_credits)."' WHERE `id` = '$us[id]' LIMIT 1");
  24.         }
  25. }
  26.  
  27. $umnik_last1 = $mysqli->query("SELECT * FROM `chat_posts` WHERE `room_id` = '$_GET[id]' AND `umnik_st` = '1' ORDER BY id DESC");
  28. $umnik_last1 = $umnik_last1->fetch_assoc();
  29.  
  30. if ($umnik_last1!=NULL && $umnik_last['umnik_st']!=4 && $umnik_last1['time']<time()-$set['umnik_time'])
  31. {
  32.         $umnik_vopros = $mysqli->query("SELECT * FROM `chat_quests` WHERE `id` = '$umnik_last1[vopros]' LIMIT 1");
  33.         $umnik_vopros = $umnik_vopros->fetch_assoc();
  34.         $msg="На вопрос никто не ответил.<br />\nПравильный ответ: $umnik_vopros[otvet].<br />\nСледующий вопрос через $set[umnik_new] секунд.";
  35.         $mysqli->query("INSERT INTO `chat_posts` (`autor`, `umnik_st`, `time`, `text`, `room_id`, `quests`) values('0', '4', '$time', '$msg', '$_GET[id]', '$umnik_vopros[id]')");
  36. }
  37.  
  38. $umnik_last = $mysqli->query("SELECT * FROM `chat_posts` WHERE `room_id` = '$_GET[id]' AND `umnik_st` <> '0' ORDER BY id DESC");
  39. $umnik_last = $umnik_last->fetch_assoc();
  40.  
  41. if ($umnik_last==NULL || $umnik_last['umnik_st']==4 && $umnik_last['time']<time()-$set['umnik_new'])
  42. {
  43.         // задается вопрос
  44.         $k_vopr = $mysqli->query("SELECT * FROM `chat_quests`");
  45.         $k_vopr = $k_vopr->num_rows;
  46.         $umnik_vopros = $mysqli->query("SELECT * FROM `chat_quests` LIMIT ".rand(0,$k_vopr).", 1");
  47.         $umnik_vopros = $umnik_vopros->fetch_assoc();
  48.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br />\n[b]Ответ:[/b] слово из ".mb_strlen($umnik_vopros['otvet'])." букв.";
  49.         $mysqli->query("INSERT INTO `chat_posts` (`autor`,`umnik_st`, `time`, `text`, `room_id`, `quests`) values('0', '1', '$time', '$msg', '$_GET[id]', '$umnik_vopros[id]')");
  50. }
  51.  
  52. if ($umnik_last!=NULL && $umnik_last['umnik_st']==1 && $umnik_last['time']<time()-$set['umnik_help'])
  53. {
  54.         $umnik_vopros = $mysqli->query("SELECT * FROM `chat_quests` WHERE `id` = '$umnik_last[vopros]' LIMIT 1");
  55.         $umnik_vopros = $umnik_vopros->fetch_assoc();
  56.     $_SESSION['rand'] = rand(0, mb_strlen($umnik_vopros['otvet']) - 1);
  57.     $help = '';
  58.         for ($i=0;$i<$_SESSION['rand'];$i++ ) {
  59.         $help.='*';
  60.         }
  61.         if (function_exists('iconv_substr'))
  62.                 $help.=iconv_substr($umnik_vopros['otvet'], $_SESSION['rand'], 1, 'utf-8');
  63.         else
  64.                 $help.=substr($umnik_vopros['otvet'], $_SESSION['rand'], 2);
  65.  
  66.         for ($i=0;$i<mb_strlen($umnik_vopros['otvet'])-$_SESSION['rand'];$i++ ) {
  67.         $help.='*';
  68.         }
  69.  
  70.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br />\n[b]Первая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  71.         $mysqli->query("INSERT INTO `chat_posts` (`autor`,`umnik_st`, `time`, `text`, `room_id`, `quests`) values('0', '2', '$time', '$msg', '$_GET[id]', '$umnik_vopros[id]')");
  72. }
  73.  
  74. if ($umnik_last!=NULL && $umnik_last['umnik_st']==2 && $umnik_last['time']<time()-$set['umnik_help'])
  75. {
  76.         $umnik_vopros = $mysqli->query("SELECT * FROM `chat_quests` WHERE `id` = '$umnik_last[vopros]' LIMIT 1");
  77.         $umnik_vopros = $umnik_vopros->fetch_assoc();
  78.         $help = '';
  79.  
  80.         for ($i=0;$i<$_SESSION['rand'];$i++ ) {
  81.         $help.='*';
  82.         }
  83.  
  84.         if (function_exists('iconv_substr'))
  85.                 $help.=iconv_substr($umnik_vopros['otvet'], $_SESSION['rand']+1, 2, 'utf-8');
  86.         else
  87.                 $help.=substr($umnik_vopros['otvet'], $_SESSION['rand']+1, 4);
  88.  
  89.         for ($i=0;$i<mb_strlen($umnik_vopros['otvet'])-$_SESSION['rand']-2;$i++) {
  90.         $help.='*';
  91.         }
  92.  
  93.         $msg="[b]Вопрос:[/b] \"$umnik_vopros[vopros]\"<br />\n[b]Вторая подсказка:[/b] $help (".mb_strlen($umnik_vopros['otvet'])." букв)";
  94.         $mysqli->query("INSERT INTO `chat_posts` (`autor`,`umnik_st`, `time`, `text`, `room_id`, `quests`) values('0', '3', '$time', '$msg', '$_GET[id]', '$umnik_vopros[id]')");
  95. }
  96.  
  97. ?>

 

Powered by ExBB FM 1.0 RC1