Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wykonywanie dzialania co 20min
Forum PHP.pl > Forum > Przedszkole
klekot
Witam! Mam taki maly problem. Chce zrobic zeby co 20min. z bazy danych ubywala liczba.
Probowalem zrobic to za pomoca date() ale nie wychodzi mi to. Nie bede pokazywal skryptu bo skasowalem go, a poza tym nie ma tam nic sensownego, bo wogole nie mam pojecia jak sie za to zabrac.
Nie wiem czy zrozumieliscie o co chodzi, ale podam na przykladzie.
  1. TABELA W BAZIE : "LICZNIK"
  2.  
  3. Co 20min. ma byc "Licznik-10"

Mniej wiecej o to mi chodzi. Odjac potrafie, ale nie wiem jak zrobic ta petle.
Czytalem cos o cronie, ale ta opcja mi sie nie podoba, chce cos normalnego w php.
potreb
Hmm, chyba będziesz musiał mieć non stop włączony komputer żeby takie zadanie wykonać.

Do czego ci jest potrzebna taka funkcja??
bim2
Obok tego zapisuj time();
LICZNIK
|licz|time|
110 12235346

I później pobierasz z bazy kiedy ostatnio odejmowałeś (kolumna time) i to pobrane odejmujesz od teraźniejszego czasu

  1. <?php
  2. $time_old = $r['time'];
  3. $time_now = time();
  4.  
  5. $time = $time_now - $time_old;
  6.  
  7. $ile_odjac = round(10*($time/20));
  8. $ile odjac to ile masz odjąć z bazy danych
  9. ?>

Powinno działac smile.gif

EDIT: Pamiętaj że po takim czymś musisz zapisać do bazy teraźniejszy czas. smile.gif
klekot
hmm.. Za bardzo tego nie zrozumialem, a konkretnie chodzi o to

  1. <?php
  2. $time = $time_now - $time_old;
  3.  
  4. $ile_odjac = round(10*($time/20));
  5. ?>

Moglbys dodac do tego komentarze?
Myslalem ze lepiej bedzie to zrobic z wykorzystaniem if

Cytat(potreb @ 25.01.2008, 17:39:50 ) *
Hmm, chyba będziesz musiał mieć non stop włączony komputer żeby takie zadanie wykonać.

Do czego ci jest potrzebna taka funkcja??

Poniewaz pomyslalem ze lepiej jest sie uczyc w praktyce, wiec pomyslalem ze napisze sobie jakas prosta gre via www i wlasnie do tego jest mi to potrzebne, a komputera nie musze miec wlaczonego, bo przeciez php dziala na serwerze.
Aha i nie piszcie ze nie bede wstanie napisac gry, bo nie zamierzam pisac drugich the crims tylko cos prostego i stopniowo sie edukowac
bim2
Jak z if?
  1. <?php
  2. $time_old = $r['time']; // czas pobrany z bazy kiedy ostatnio aktualizowałeś wpis
  3. $time_now = time(); // teraźniejszy czas
  4.  
  5. $time = $time_now - $time_old; //ile mineło czasu kiedy aktualizowałes dane
  6.  
  7. $ile_odjac = round(10*($time/20)); //tutaj pierw dzielę czas przez 20 (co 20 sec będzie się odejmował o 10 wpis w bazie)
  8. mysql_query('UPDATE licznik SET lp=lp-10');
  9. ?>


AA ty chiales co 20 minut ;/ To zamiast $ile_odjac = round(10*($time/20)); daj $ile_odjac = round(10*($time/(20*60))); //*60 sec czyli minute czyli 20*min to 20 min biggrin.gif
bartg
Dodam że aby to robiło się co 20 minut musiałbyś mieć włączonego Crona
punkomuzykant
słaby jestem w php bo programuję we flashu więc podam tylko sugestię. A czy nie będzie lepiej ustalić datę początkową i dodać funkcję która sprawdzi aktualną ? czyli np po wywołaniu funkcja stwierdza że różnica wynosi 3 godziny czyli 180 min/20 = 9 czyli liczba początkowa = liczba początkowa - 10*9 smile.gif
bim2
A co myślisz napisałem wyżej? Identycznie co powiedziałeś w php sciana.gif
punkomuzykant
hehe sorry smile.gif tak czy inaczej według nas obu to najlepsze wyjście.
klekot
Ok poskladalem sobie ten kod, raczej jest wszystko ok, ale mam problem nie zwiazany z tematem. Nie chce mi sie zapisywac do bazy. Probowalem na wszystkie sposoby, kopiowalem inne polecenia ktore dzialaja na 100%, pozniej z php my admin kopiowalem polecenia, i nadal nie chce sie zapisywac. Moze krasnal ma jakies ograniczenia co do ilosci tabel. Tu podaje moj kod
  1. $time_old = $fetch['time']; // czas pobrany z bazy kiedy ostatnio aktualizowałeś wpis
  2. $time_now = time(); // teraźniejszy czas $time = $time_now - $time_old; //ile mineło czasu kiedy aktualizowałes dane
  3.  
  4. $ile_odjac = round(10*($time/(20*60))); //tutaj pierw dzielę czas przez 20 (co 20 sec będzie się odejmował o 10 wpis w bazie)
  5. $m = "UPDATE 'user' SET 'time' = '$time_now' WHERE 'login' = '$login' LIMIT 1 ";
  6. mysql_query($m);
  7. mysql_query("UPDATE 'user' SET jedzenie_krowy=jedzenie_krowy-20 WHERE 'login' = '$login' LIMIT 1 ");
  8. print($fetch['time']);
  9. print('<br>'.$time_now);
1010
  1. <?
  2. $time_old = $fetch['time']; // czas pobrany z bazy kiedy ostatnio aktualizowałeś wpis
  3. $time_now = time(); // teraźniejszy czas $time = $time_now - $time_old; //ile mineło czasu kiedy aktualizowałes dane
  4.  
  5. $ile_odjac = round(10*($time/(20*60))); //tutaj pierw dzielę czas przez 20 (co 20 sec będzie się odejmował o 10 wpis w bazie)
  6. $m = "UPDATE user SET time='".$time_now."' WHERE login='".$login."' LIMIT 1 ";
  7. mysql_query("UPDATE user SET jedzenie_krowy=(jedzenie_krowy-20) WHERE login='".$login."' LIMIT 1 ");
  8. print($fetch['time']);
  9. print('<br>'.$time_now); 
  10. ?>




edit: a czemu nie wykonasz tego jednym zapytaniem skoro where jest to samo?

  1. <?
  2. $time_old = $fetch['time']; // czas pobrany z bazy kiedy ostatnio aktualizowałeś wpis
  3. $time_now = time(); // teraźniejszy czas $time = $time_now - $time_old; //ile mineło czasu kiedy aktualizowałes dane
  4.  
  5. $ile_odjac = round(10*($time/(20*60))); //tutaj pierw dzielę czas przez 20 (co 20 sec będzie się odejmował o 10 wpis w bazie)
  6.  
  7. mysql_query("UPDATE user SET jedzenie_krowy=(jedzenie_krowy-20), time='".$time_now."' WHERE login='".$login."' LIMIT 1 ");
  8. print($fetch['time']);
  9. print('<br>'.$time_now); 
  10. ?>



edit2:

ps. Gra to nie najlepszy pomysł... To bardzo skomplikowany projekt... Ja bym radził uczyć się na czymś innym... Bo to po prostu nie ma sensu... Z kilkuletnim doświadczeniem w tej dziedzinie tworzyłem gre. Przez pewien czas była dość popularna (Wirtualne-miasto - może ktoś kojarzy). Ale potem upadła z powodu braku czasu... Nie polecam. Samemu takie coś to troche nie fajnie... Ale zrobisz i tak jak wolisz
klekot
Dzieki za pomoc.

ps. Bim2 chyba dostal dwie pomoce, bo nie przypominam sobie zebym wczesniej mu wystawial, a teraz zauwazylem ze osoba ktora dostaje plusa, to jego post swieci sie na żółto. Teraz jak wystawilem jeszcze jeden to sie o tym dowiedzialem biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.