Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Wykonywanie dzialania co 20min
klekot
post 25.01.2008, 17:31:37
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 16.08.2005

Ostrzeżenie: (0%)
-----


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.

Ten post edytował klekot 25.01.2008, 17:32:35
Go to the top of the page
+Quote Post
potreb
post 25.01.2008, 17:39:50
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Hmm, chyba będziesz musiał mieć non stop włączony komputer żeby takie zadanie wykonać.

Do czego ci jest potrzebna taka funkcja??

Ten post edytował potreb 25.01.2008, 17:43:22


--------------------

Go to the top of the page
+Quote Post
bim2
post 25.01.2008, 17:48:08
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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

Ten post edytował bim2 25.01.2008, 17:49:17


--------------------
Go to the top of the page
+Quote Post
klekot
post 25.01.2008, 18:15:05
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 16.08.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował klekot 25.01.2008, 18:18:41
Go to the top of the page
+Quote Post
bim2
post 25.01.2008, 18:19:00
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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

Ten post edytował bim2 25.01.2008, 18:20:00


--------------------
Go to the top of the page
+Quote Post
bartg
post 25.01.2008, 19:59:35
Post #6





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 4.07.2007
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Dodam że aby to robiło się co 20 minut musiałbyś mieć włączonego Crona


--------------------
Go to the top of the page
+Quote Post
punkomuzykant
post 25.01.2008, 20:36:37
Post #7





Grupa: Zarejestrowani
Postów: 147
Pomógł: 3
Dołączył: 28.12.2007
Skąd: toronto

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bim2
post 25.01.2008, 20:53:03
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


A co myślisz napisałem wyżej? Identycznie co powiedziałeś w php sciana.gif


--------------------
Go to the top of the page
+Quote Post
punkomuzykant
post 25.01.2008, 21:18:25
Post #9





Grupa: Zarejestrowani
Postów: 147
Pomógł: 3
Dołączył: 28.12.2007
Skąd: toronto

Ostrzeżenie: (0%)
-----


hehe sorry smile.gif tak czy inaczej według nas obu to najlepsze wyjście.
Go to the top of the page
+Quote Post
klekot
post 26.01.2008, 18:42:18
Post #10





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 16.08.2005

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
1010
post 26.01.2008, 22:04:44
Post #11





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


  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

Ten post edytował 1010 26.01.2008, 22:08:21


--------------------
Go to the top of the page
+Quote Post
klekot
post 27.01.2008, 14:03:20
Post #12





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 16.08.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował klekot 27.01.2008, 14:06:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 03:47