Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt, który zmieni wartość rekordu w bazie danych danych i go zmieni po 2 sekundach
Machro
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Witam, szukam skryptu, który zmieni wartość rekordu w bazie danych danych i go zmieni po 2 sekundach.

Np. skrypt zmienia wartość na "tak", a jak miną 2 sekundy, to aby zmienił się on w bazie danych na "nie".

Da się tak zrobić?

Pozdrawiam.

Ten post edytował Machro 15.12.2007, 15:32:21
Go to the top of the page
+Quote Post
.chudy.
post
Post #2





Grupa: Zarejestrowani
Postów: 70
Pomógł: 3
Dołączył: 15.06.2003
Skąd: kosmosu?

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


Możesz zrobić tak:
1. zapytanie do bazy danych
2. sleep(2);
3. zapytanie do bazy danych
Go to the top of the page
+Quote Post
Machro
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Cytat(.chudy. @ 15.12.2007, 15:52:54 ) *
Możesz zrobić tak:
1. zapytanie do bazy danych
2. sleep(2);
3. zapytanie do bazy danych


A skąd to wie, które instrukcje pod sleep ma wykonywać?
2 linijki instrukcji, 10, czy może wszystkie?
Nie za bardzo jasne to jest ... ; \

Ma ktoś może inny sposób?

Ten post edytował Machro 15.12.2007, 18:14:32
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #4





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


  1. <?php
  2. sleep($ilosc_sekund);
  3. ?>

Wstrzymuje wykonywanie całego skryptu na czas podany jako argument (w sekundach). Więc wykonywane jest wszystko do momentu Sleep, odczekane dwie sekundy i skrypt leci dalej. Inne rozwiązanie ociera się już o AJAXa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

A do czego potrzebne Ci takie coś? Może uda się zaleźć inne rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam,
-- Nattfarinn

Ten post edytował Nattfarinn 15.12.2007, 18:17:11
Go to the top of the page
+Quote Post
Machro
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Dobra, napiszę po co mi to jest, ale pewnie i tak nikt nie zrozumie :-)

Piszę grę internetową pod przeglądarkę i mam tam dział Miasto, gdzie gracze mogą chodzić i się spotykac online, jednak chcę wlasnie zrobic ograniczenia ruchu, czyli jeden ruch co 2 sekundy.

1. Osoba wykonuje ruch
2. Zapytanie robi blokadę na chodzenie na "tak"
3. Mijają 2 sekundy podczas ktorych gracz nie moze chodzic
4. Blokada w mysql zmienia się na "nie"
5. Gracz moze wykonac kolejny ruch
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #6





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


Cytat(Machro @ 15.12.2007, 18:23:09 ) *
1. Osoba wykonuje ruch
2. Zapytanie robi blokadę na chodzenie na "tak"
3. Mijają 2 sekundy podczas ktorych gracz nie moze chodzic
4. Blokada w mysql zmienia się na "nie"
5. Gracz moze wykonac kolejny ruch

Trochę bez sensu to rozwiązanie. O wiele lepiej będzie przechowywać w bazie czas, kiedy nastepny ruch jest możliwy i zamiast zmieniać wartość w bazie wielokrotnie, poprostu sprawdzać czy gracz nie wykonał ruchu za wcześnie (porównać obecny czas wykonywania ruchu z wartością z bazy mówiącą kiedy będzie mógł wykonać). Po poprawnym ruchu zmienić w bazie blokadę ruchu na czas: teraz + 2 sekundy i tak w kółko. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawim,
-- Nattfarinn

Ten post edytował Nattfarinn 15.12.2007, 18:28:37
Go to the top of the page
+Quote Post
ayeo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Sorry, ale to bezsensu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
W tabeli z USERAMI zrób sobie kolumnę last_move i tam dawaj (może być time_stamp) poprostu datę i czas. Później tylko sprawdzasz czy minęły 2 sekundy od ostatniego ruchu, jeśli nie to dajesz komunikat lub czekasz sleep(2) i to tyle...
Po co wstawiać tak/nie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

EDIT: Nattfarinn mnie ubiegł (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował ayeo 15.12.2007, 18:29:26
Go to the top of the page
+Quote Post
Machro
post
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Już tak robiłem jak piszecie, ale spotkalem sie z problemem - jak sprawdzić czy minęły 2 sekundy?

Ten post edytował Machro 15.12.2007, 18:35:32
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #9





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


Cytat(Machro @ 15.12.2007, 18:33:50 ) *
Już tak robiłem jak piszecie, ale spotkalem sie z problemem - jak sprawdzić czy minęły 2 sekundy?

Nie napiszę przecież:

NOW() + 2 sekundy

A po co Ci sprawdzać czy upłynęły już dwie sekundy? Wystarczy sprawdzić czy czas już dawno minął czy jeszcze nie. Dla przykładu, jeśli przechowujesz w bazie czas w postaci Uniksowej, to po wykonanym ruchu zmieniasz starą wartość na: "time()+2;". Później jak osoba chce się poruszyć to sprawdasz czy time() jest większe czy mniejsze od wartości w bazie. Jeśli jest większe to znaczy że minęlo już wiecej niż 2 sekundy, jeśli jest mniejsze to ktoś klika zbyt szybko.

Pozdrawiam,
-- Nattfarinn
Go to the top of the page
+Quote Post
Machro
post
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Cytat(Nattfarinn @ 15.12.2007, 18:37:27 ) *
A po co Ci sprawdzać czy upłynęły już dwie sekundy? Wystarczy sprawdzić czy czas już dawno minął czy jeszcze nie. Dla przykładu, jeśli przechowujesz w bazie czas w postaci Uniksowej, to po wykonanym ruchu zmieniasz starą wartość na: "time()+2;". Później jak osoba chce się poruszyć to sprawdasz czy time() jest większe czy mniejsze od wartości w bazie. Jeśli jest większe to znaczy że minęlo już wiecej niż 2 sekundy, jeśli jest mniejsze to ktoś klika zbyt szybko.

Pozdrawiam,
-- Nattfarinn


Mogę sobie sprawdzać, czy 4 < 5, ale to chyba nie będzie przecież działać z czasem?

if (time() > $row[mozliwy_ruch] )

Przecież to wykaże błąd :] Bo to nie są liczby, tylko mają jeszcze dwukropki itp ..
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #11





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


Cytat(Machro @ 15.12.2007, 18:40:19 ) *
if (time() > $row[mozliwy_ruch] )

Przecież to wykaże błąd :] Bo to nie są liczby, tylko mają jeszcze dwukropki itp ..

Jesteś pewien? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) time() zwraca czas uniksowy, czyli liczbę sekund które upłynęły od 1 stycznia 1970 roku. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) To jest aktualnie bodajże 32-bitowy signed integer (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Machro
post
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Zaraz to sprawdzę : ) I dam znac

Edit:

Mm, wygląda na to, że działa :-)
Zaraz tego użyję w grze.

Edit2:

Działa tylko, gdy
time() jest mniejsze od $linia[Mapa_mozliwy_ruch]

A powinno być większe .. Nie rozumiem

Edit3:

Dziala tylko tak:

  1. <?php
  2. if(time() < $linia[Mapa_mozliwy_ruch])
  3.  {
  4.  $blad_ruchu = "Mozliwy tylko jeden ruch na sekunde!";
  5.  }
  6. ?>


Gdy jest:

  1. <?php
  2. if(time() > $linia[Mapa_mozliwy_ruch])
  3.  {
  4.  $blad_ruchu = "Mozliwy tylko jeden ruch na sekunde!";
  5.  }
  6. ?>


To błąd pokazuje się zawsze gdy chcę sie ruszyc.

Ten post edytował Machro 15.12.2007, 19:51:12
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #13





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


I działa dobrze. Nie wiem o co Ci chodzi właściwie teraz. Time() zwraca czas Teraz. W pierwszym przypadku komunikat wyświetli się tylko gdy czas odpowiedzialny za ruch jeszcze nie minął. W drugim pokaże się za każdym razem gdy czas minął. W czym więc rzecz?
Go to the top of the page
+Quote Post
Machro
post
Post #14





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 25.11.2007

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


Tak, już zauwazylem, ze to jednak nie jest błąd :-)
Troche za duzo w tym mieszalem i mi się wszystko pomieszalo

Dzieki z rady :-)
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: 23.08.2025 - 10:27