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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: В нужное мне время......

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Про время
DEO000
Отправлено: 21 Февраля, 2011 - 21:22:36
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Вобщем суть проблемы такова: есть небольшой скрип - профиль пользователя. Ну в нем всякая информация о пользователе и есть такая переменная как рейтинг(баллы). каждые 6 часов у человека прибавляется колличество очков на 1 единицу, по крайней мере так задумано. Но проблема в том, что скрипт работает много раз при каждом обновлении страницы. использовал date. как сделать чтобы рейтинг поднимался даже если человека нет на сайте и только один раз в заданное время?
Вот кусок нужного кода:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. ................
  3. include("conection.php");
  4. $bd="SELECT * FROM game WHERE id='$_SESSION[id]'";
  5. $q_bd=mysql_query($db);
  6. $res=mysql_fetch_array($q_db);
  7. ................
  8. $reit=res[reit];
  9. if(date("H")==0 OR date("H")==6 OR date("H")==12 OR date("H")==18)
  10. $reit=$reit+1;
  11. $tm="UPDATE `table` SET `reit` = '$reit' WHERE `table`.`id` ='$_SESSION[id]'";
  12. $q_tm=mysql_query($tm,$dblink) or die(mysql_error());
  13. ..................
  14. ?>

Надеюсь на вашу помощь Улыбка
(Добавление)
Если кто не понял что мне надо, то можно провести аналогию с добычей ресурсов в какой нибудь браузерной игре, принцип тот же.
 
 Top
Джур
Отправлено: 21 Февраля, 2011 - 21:25:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 423
Дата рег-ции: Март 2007  


Помог: 0 раз(а)




Самый простой вариант, это так называемый cron.


-----
Тамбовский каджит тебе товарищ
 
 Top
DEO000
Отправлено: 21 Февраля, 2011 - 21:56:43
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




И что это за зверь такой? ps в 4 строке кода там таблица не game, а table
 
 Top
OrmaJever Модератор
Отправлено: 21 Февраля, 2011 - 22:07:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




cron это планировщик в unix системах. Если используете хостинг спросите у хостера может ли он датьдоступ к нему. Или на крайняк http://setcronjob[dot]com

(Отредактировано автором: 21 Февраля, 2011 - 22:08:02)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DEO000
Отправлено: 22 Февраля, 2011 - 07:10:19
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




А где нибудь можно достать cron для денвера?
 
 Top
Мелкий Супермодератор
Отправлено: 22 Февраля, 2011 - 09:44:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DEO000, nncron ( http://nncron[dot]ru/index_ru[dot]shtml ) , например. Или воспользуйтесь штатным виндовым планировщиком. Он вроде бы всё-таки предусмотрен в винде.


-----
PostgreSQL DBA
 
 Top
DEO000
Отправлено: 23 Февраля, 2011 - 13:01:13
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Думаю что можно обойтись и без крона. Есть кое-какие мысли... Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 23 Февраля, 2011 - 13:09:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ну извращаться можно по разному, но наиболее красивое решение как правило - крон.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 23 Февраля, 2011 - 18:55:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




DEO000 Для осуществления оптимального и простого решения предполагаемой задачи, включающей запуск целевого web-приложения с заданными параметрами в повторяющиеся синхронные временные интервалы, достаточно использование базовых средств PHP-приложений без включения дополнительных системных объектов, обеспечивающих планирование и переназначение исполняемых процессов; основная схема алгоритмизации предполагаемого решения основана на осуществлении выполнения списка требуемых действий, выполнение которых должно быть обеспечено в произошедший временной период, и обеспечения расстановки результатов исполнения в соответсвии с оригинальной последовательностью и предполагаемыми слотами включения потока


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
DEO000
Отправлено: 23 Февраля, 2011 - 19:16:00
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Да, я это сделал Улыбка вот что натворил
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. ................
  4. include("conection.php");
  5. $bd="SELECT * FROM table WHERE id='$_SESSION[id]'";
  6. $q_bd=mysql_query($db);
  7. $res=mysql_fetch_array($q_db);
  8. ................
  9. $time_y=date("Y");  //время сейчас
  10. $time_m=date("m");
  11. $time_d=date("d");
  12. $time_h=date("H");
  13. $time_min=date("i");
  14. $time_s=date("s");
  15. $ptime_y=$res[time_y]; //время последней активности
  16. $ptime_m=$res[time_m];
  17. $ptime_d=$res[time_d];
  18. $ptime_h=$res[time_h];
  19. $ptime_min=$res[time_min];
  20. $ptime_s=$res[time_s];
  21. $rtime_y=$time_y-$ptime_y; //вычисление времени отсутствия пользователя
  22. $rtime_m=$time_m-$ptime_m;
  23. $rtime_d=$time_d-$ptime_d;
  24. $rtime_h=$time_h-$ptime_h;
  25. $rtime_min=$time_min-$ptime_min;
  26. $rtime_s=$time_s-$ptime_s;
  27. if ($rtime_s<0)                      //проверки на корректность времени
  28. {$rtime_s=(60-$ptime_s)+$time_s;
  29. $rtime_min=$rtime_min-1;}
  30. if ($rtime_s>=0 AND $rtime_s<10)
  31. $zero_s=0;
  32. if ($rtime_min<0)
  33. {$rtime_min=(60-$ptime_min)+$time_min;
  34. $rtime_h=$rtime_h-1;}
  35. if ($rtime_min>=0 AND $rtime_min<10)
  36. $zero_min=0;
  37. if ($rtime_h<0)
  38. {$rtime_h=(24-$ptime_h)+$time_h;
  39. $rtime_d=$rtime_d-1;}
  40. if ($rtime_h>=0 AND $rtime_h<10)
  41. $zero_h=0;
  42. if ($rtime_d<0)
  43. {$rtime_d=date("t",$time_m-1)-$ptime_d+$time_m;
  44. $rtime_m=$rtime_m-1;}
  45. if ($rtime_d>=0 AND $rtime_d<10)
  46. $zero_d=0;
  47. if ($rtime_m<0)
  48. {$rtime_m=(12-$ptime_m)+$time_m;
  49. $rtime_y=$rtime_y-1;}
  50. if ($rtime_m>=0 AND $rtime_m<10)
  51. $zero_m=0;
  52. $rtime_sec=$rtime_s+$rtime_min*60+$rtime_h*3600+$rtime_d*86400+$rtime_m*31*86400;
  53. //надо исправить ошибку с днями в месяце
  54. $rtime_int= floor($rtime_sec/15);
  55. echo 'сейчас ' .$time_y.'-'.$time_m.'-'.$time_d.' '.$time_h.':'.$time_min.':'.$time_s.'
  56. было '.$ptime_y.'-'.$ptime_m.'-'.$ptime_d.' '.$ptime_h.':'.$ptime_min.':'.$ptime_s.
  57. ' Разница: ' .$rtime_y.'-'.$zero_m.$rtime_m.'-'.$zero_d.$rtime_d.' '.$zero_h.$rtime_h.
  58. ':'.$zero_min.$rtime_min.':'.$zero_s.$rtime_s.
  59. '<br>с последнего обновления прошло '.$rtime_sec.' секунд и '.$rtime_int.' интервалов.
  60. интервал из базы данных '.$res[time_int];
  61. $tm="UPDATE table SET time_y='$time_y',time_m='$time_m',time_d='$time_d',
  62. time_h='$time_h',time_min='$time_min',time_s='$time_s'
  63. WHERE `table`.`id` ='$_SESSION[id]'";
  64. $q_tm=mysql_query($tm,$dblink) or die(mysql_error());
  65. $reit=$res[reit];
  66. if ($time_s>=0 AND $time_s<15)
  67. {$time_int=1;}
  68. if ($time_s>=15 AND $time_s<30)
  69. {$time_int=2;}
  70. if($time_s>=30 AND $time_s<45)
  71. {$time_int=3;}
  72. if ($time_s>=45 AND $time_s<=59)
  73. {$time_int=4;}
  74. if ($rtime_sec<=15 AND $rtime_min==0 AND $rtime_h==0 AND $rtime_d==0 AND $rtime_m==0
  75. AND $rtime_y==0 AND $res[time_int]!=$time_int){
  76. echo ' первый цикл';
  77. $reit=$reit+1;}
  78. else {
  79. if ($rtime_sec>15)
  80. {echo ' второй цикл';
  81. $reit=$reit+$rtime_int;}}
  82. echo '<br>Сейчас интервал времени '.$time_int.'<br> теперь металла '.$metal;  
  83. $tm="UPDATE `table` SET reit= '$reit', time_int='$time_int' WHERE `game`.`id` ='$_SESSION[id]'";
  84. $q_tm=mysql_query($tm,$dblink) or die(mysql_error());
  85. ..................
  86. ?>

Сильно не ругайтесь,я только учусь. скрипт сыроват, но работает. вместо переменных можно все запихать в массивы. Принцип таков: беру время которое у нас сейчас(года, месяцы и т.д. распределены по своим переменным) и время последней активности из бд. нахожу разницу во времени и у меня получается время неактивности пользователя. Рейтинг прибавляется каждые 15 секунд. 1 минуту разделил на интервалы(по 15 секунд) и при помощи интервалов и циклов создается иллюзия постоянного прибавления рейтинга. Улыбка Может тут что-то и перемудрил, но это работает.
(Добавление)
вывод данных делал для отслеживания, их потом можно будет убрать когда все отрегулировать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB