Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] Zwiększanie danych w bazie danych, Co 1 min.
Plikownik
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 19.01.2006

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


Witam

Czy mógłby mi ktoś przedstawić na jakimś krótkim przykładzie jak napisać skrypt albo jak się zabrać za napisanie skryptu, który zwiększa wartość w pewnej tabeli mysql np. o 10 co minutę. Chcę zabrać się za stworzenie jakiejś prostej gry-online, i chciałbym, żeby każdemu użytkownikowi po rejestracji ziększała się ilość złota o 10 na min. Jak takie coś zrobić?
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Musisz uzyc CRONa.
Bylo to omawiane wiele razy wiec poradzasz sobie podszac wyszukiwania.
Go to the top of the page
+Quote Post
scanner
post
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




A ja bym na poczatku każdej strony dał:
  1. <?php
  2. $dbh = mysql_connect( 'localhost', 'scanner', '****' ) or die( mysql_error());
  3. mysql_select_db( 'test', $dbh ) or die( mysql_error());
  4. mysql_query( 'UPDATE zasoby
  5. SET currentTimestamp = NOW(),
  6. zloto = zloto + (10*((currentTimestamp - lastTimestamp) / 60)),
  7. lastTimestamp = currentTimestamp
  8. ', $dbh ) or die( mysql_error());
  9. $sqlresult = mysql_query( 'SELECT zloto FROM zasoby' ) or die( mysql_error());
  10. $x = mysql_fetch_row( $sqlresult );
  11. echo 'Zloto: '.$x[0];
  12.  
  13. // timestamp to sekundy od Epoch
  14. // current - last = ilosc sekund, jaka uplynela miedzy odswiezeniem
  15. // (current - last) /60 - ilosc minut
  16. // 10 * ( (current - last) /60 ) - tyle zlota dojdzie przez dany okres
  17. ?>
i mając takią tablicę:
  1. CREATE TABLE `zasoby` (
  2. `id` int(11) NOT NULL DEFAULT '0',
  3. `zloto` int(11) NOT NULL DEFAULT '0',
  4. `lastTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  5. `currentTimestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  7.  
  8. --
  9. -- Zrzut danych tabeli `zasoby`
  10. --
  11.  
  12. INSERT
  13. INTO `zasoby`
  14. VALUES (1, 174, '2006-03-18 00:52:15', '2006-03-18 00:52:15');
Oczywiście kazdy wiersz w tablicy to osobny gracz, a do UPDATE dodajemy WHERE id = id_gracza.

Przykład działający: http://www.scanner.eu.org/dev/zloto.php

Obywamy sie bez CRONa i aktualizujemy tylko graczy, którzy sa online.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 16:02