Добавяне на стойност през час

b0nb0n40

Registered
1. Как да направя така че на всеки час на всеки потребител да се добавя стойност +10 в БД
таблицата ми е users колоната ми е nrg
Обобщение за тези които не са ми разбрали въпроса:
На всеки 1 час да се добавя +10 в users, nrg!

2.
PHP:
Как да станеш PRO:<br />
1. Копуваш си кредити от <a href="index.php?a=buycredit">тук</a> <br />
2. Трябва да имаш 100<img src="images/credit.gif""> <br />
3. Натискаш бутона "Стани PRO"
<hr color='white' width='300' align='center' />
<?
$session = $_SESSION['name'];
$s = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE name='$name'"));
if ( $s[namepro] != '1' ) {
if($session == null){
echo 'logg! ';
}else{
if ( isset($_POST[pro]) )
{

if ( $s[credits] >= '100' ) 
{
$q = mysql_query("UPDATE users SET credits=credits-100 ,maxnrg=200 ,namepro=1 WHERE name='$name'") or die(mysql_error()); if ($q) echo '<font color=red><b>Ти успешно стана PRO!</b></font>'; else echo 'no';} 
}
else
{
echo '<form action="" method="post"><input type="submit" name="pro" value="Стани PRO"></form>';
} }} else echo '<br /><font color=red><b>Ти си PRO!</b></font></br><br />';
?>
<hr color='white' width='300' align='center' />


<font color=yellow><u><b><h2>След като станеш PRO получаваш</b></h2></font> </u>

<font color=orange><u><b><h2>200 Енергия</b></h2></font> </u>	
<font color=orange><u><b><h2>Правиш си профила цветен</b></h2></font> </u>
<font color=orange><u><b><h2>Правиш си името цветно</b></h2></font> </u>
<font color=orange><u><b><h2>Рестартираш си Уменията</b></h2></font> </u>
<font color=orange><u><b><h2>Имаш коли който са само за PRO-та</b></h2></font> </u>
<font color=orange><u><b><h2>Можеш да теглиш подарък през 3 часа а не през 6 часа.</b></h2></font> </u>  
<font color=orange><u><b><h3>В състезанията се състезаваш за 15 минути а не за 20 минути.</b></h3></font> </u><br />
Това ми е php кода. искам като ми сложи стойност 1 в колоната namepro след 7 дни реално време стойността отново да става 0

Благодаря предварително!
 
правиш един cron job, във файла слагаш една заявка да обвноява на всички узери стойността с +10 и това е
 
извинявам се но досега не съм чувал за cron job. До колкото прочетох това е само за линукс дали ще може да ми обясниш как ще стане за windows
 
за уиндоус не знам, ама мисля, че с javascript да прави проверка, на всеки кръгъл час да изпълнява някакъв файл и да го обновява друг вариянт не виждам, ама трябва постоянно да е пуснат браузъра на компа
 
embaka каза:
за уиндоус не знам, ама мисля, че с javascript да прави проверка, на всеки кръгъл час да изпълнява някакъв файл и да го обновява друг вариянт не виждам, ама трябва постоянно да е пуснат браузъра на компа
Няма как с JS. Нито с PHP. Тогава все някой, трябва да му стартира скрипта.
 
Не ти трябва да го добавяш на всеки час. Просто като влезе гледаш колко часа са минали от последното обновяване и добавяш тогава. Просто си записвай някъде когато обновиш и после гледай това време.
 
Точно така! Съгласен съм с StormBreaker. Правиш поле vreme в таблицата, като в него записваш в колко часа трябва да вземе кредит. След логването на потребителя правиш проверка дали е изтекъл този час. Ако е изтекъл - то колко пъти по един час са изтекли?
Тоест:

PHP:
$timestamp=time();
$qury = mysql_query("select * from users where user_id = '$_SESSION[user_id]'");
	$rez = mysql_fetch_array($qury);
	
if($rez[vreme] > $timestamp) {

	while($rez[vreme]>$timestamp) {
	$rez[credits] = $rez[credits]+ 10;
	$rez[vreme]  = $rez[vreme] + 3600;
	}
	mysql_query("update users set credits=credits+$rez[credits], vreme='rez[vreme]' where user_id = '$_SESSION[user_id]'");
}
Едит: бях объркал името на 2 променливи
 
@Stormbreaker, @HeLL_OwNeR - съгласен съм, ок. Но някой трябва да ти стартира скрипта, ако той не фигурира из страниците и изобщо е в друг файл няма как да се разчита на потребители.

Пък това с timestamp което си дал, няма как да стане. Представи си, че са минали 5 часа и кьорав потребител не е стъпил в сайта и в момента когато някой влезе, вместо 5 ще добави само една, защото дефакто пак timestamp е по-голям от този в DB, това го каза попринцип, но не го видях в кода ти.

Друго е това, да го правиш по този начин, ако провериш, че timestamp е по-голям с повече от един час, да видиш колко часа са минали и да добавиш толкова точки. Може да стане и така, но мисля, че си усложняваш живота като разполагаш в почти всички нормални споделени хостове с CronJobs, да не говорим, че и ако използваш домашен сървър под Windows, също има такова нещо. Нарича се "Task Scheduler".
 
Идеята е не един потребител да стартира за всичките, а само за себе си.
Когато е логнат, се прави проверка само за него. Защо да е толкова зле? Добавя го в header файла и готово. Ако си погледнал ще направи една заявка към SQL, но с нея добавя всичките кредити. Това го прави цикъла отгоре.
 
HeLL_OwNeR каза:
Идеята е не един потребител да стартира за всичките, а само за себе си.
Когато е логнат, се прави проверка само за него. Защо да е толкова зле? Добавя го в header файла и готово. Ако си погледнал ще направи една заявка към SQL, но с нея добавя всичките кредити. Това го прави цикъла отгоре.

Ами от кода ти не се разбират някои неща. Каква е тази променлива $rez. Откъде идва, преди да му дадеш резултата от заявката?
Но айде майната му, така ще стане, ок. Но например аз съм потребител и не съм играл тази игра цяла година и изведнъж влизам и ми се струпват 8487 заявки. Едва ли ще вляза пак. Има и по-добър начин само с една заявка, а не да слагаш заявката в цикли, които не знаеш колко пъти ще се завъртят, но пак ако са изминали няколко дена дори, може би ще забави и по този начин.

Както и да е.
 
Имай милост де.. писал съм го нощес. :D Разменил съм редовете.. А колкото до 8487 нещо не се разбрахме... в цикъла виждаш ли заявка? Тя е след него и добавя изчислените стойности.
 
HeLL_OwNeR каза:
Имай милост де.. писал съм го нощес. :D Разменил съм редовете.. А колкото до 8487 нещо не се разбрахме... в цикъла виждаш ли заявка? Тя е след него и добавя изчислените стойности.

Хмм, аз съм сънен, може би наистина не е била там преди малко, но това пак ще направи толкова итерации, дори и да няма вътре заявка, не съм ли прав? Дори и един месец да не е влизал това ще се завърти 700+ пъти.
 
Заявката за update си беше там. Другата я бях вкарал под if по невнимание.
Да ще има итерация, нормално е. Но все пак е решение ако не се поддържат cron jobs.

Пример: http://faq.host.bg/HL332939

Да, поддържа се Cronjob и може да се ползва през SSH със следните команди:
дотук добре, но
Имайте предвид, че Host.bg предоставя SSH достъп само на клиенти ползващи "Бизнес Про хостинг пакет" и "Корпоративен хостинг пакет".
А ако хостинг плана не е от изброените?
 
@HeLL_OwNeR Прочети ми може би първото или второто мнение изцяло. Ще се повтарям. Зависи от него и от това хоста му, ако няма възможност с него да стартира скрипта - да решение е, но лично аз бих използвал Cron.

Айде, аз няма да спамя повече.
 
Айде край на темата! Оправих се, Karcho благодаря за участието, но ще дам точка на HeLL_OwNeR, защото той се опита да напише код и беше активен!
Благодаря на всички които се опитаха да ми помогнат! :)
 
@Karo

PHP:
$to4ki = floor((time() - $posledenUpdate) / 3600);

if ( $to4ki > 0 )
mysql_update(.....);

без цикли :P Малко математика :)

Съгласен съм, че тоя цикъл не му е там мястото, но дори и така да го беше направил 700 пъти няма да ги усети въобще.

PHP:
$to4ki = 0;
for ($i = 0; $i < 10000; $i++)
	$to4ki += 10;

Това се завърта 10 000 пъти, а се изпълнява за 8ms. 700 пъти за 0.2ms
 
StormBreaker каза:
@Karo

PHP:
$to4ki = floor((time() - $posledenUpdate) / 3600);

if ( $to4ki > 0 )
mysql_update(.....);

без цикли :P Малко математика :)

Съгласен съм, че тоя цикъл не му е там мястото, но дори и така да го беше направил 700 пъти няма да ги усети въобще.

PHP:
$to4ki = 0;
for ($i = 0; $i < 10000; $i++)
	$to4ki += 10;

Това се завърта 10 000 пъти, а се изпълнява за 8ms. 700 пъти за 0.2ms

Хехехе, луд си. Математиката му е майката :D Не всички вадят 6.00 на матурите, та да се сещат така :D
 

Back
Горе