Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]dzialanie na time() z mysql
Forum PHP.pl > Forum > Przedszkole
nakers2
chciałbym zrobić tak by jednym poleceniem gracz mógł dodać do rekordu "t_tworzenie" czas... ale nie aktualny tylko jaki będzie za 24 godziny
mam coś takiego: (ale nie wiem czy dobrze) :

Kod
mysql_query("update law_gildie set t_status = 1, t_tworzenie = 24*3600 + ".time()." where nazwa ='".$nazwa_gildi."'");


i teraz 2 element, który chyba na pewno mam źle,
w cronie wlepiam te polecenie:

Kod
mysql_query("update law_gildie set t_status = 0, t_tworzenie = 0, deski = deski + 30 where t_tworzenie = ".time());


ma to dodać gildi 30 desek gdy już minie 24 godziny ustalone przez 1 polecenie

mógłby ktoś pomóc ?
Hpsi
jeśli dobrze rozumiem:
defakto chcesz zrobić coś takiego co 24h dodawać X desek; następnie zrobić update który zmieni t_tworzenie doda kolejne 24h tak ?
to można zrobić jednym zapytaniem- to moja propozycja w cronie wrzuć takie zapytanko
  1. mysql_query('UPDATE `law_gildie` SET `t_tworzenie`='.(24*3600)+time().', `deski`=`deski`+30 WHERE `t_tworzenie`<'.time();

TO zapytanie updatnie Ci tabele w sposób: do t_tworzenie wrzuci nowy czas, do desek doda wartosc+3 pod warunkiem ze t_tworzenie mniejsze od aktualnego czasu.
Dlaczego mniejsze?
Proste: nie jesteś w stanie crona włączać na zwyklych serwerach co sekundę, wiec warunek gdzie t_tworzenie=aktualny_czas jest troche nie adekwatny.

Nie wiem czy o to ci chodziło ale tak zrozumiałem Twój post defakto smile.gif
nakers2
chodziło mi o coś innego

ten 1 kod który dałem ładuje gracz (szef gildi) za pomocą GET'a:
konkretnie ma to być w grze produkcja desek w tartaku...

Kod
mysql_query("update law_gildie set t_status = 1, t_tworzenie = 24*3600 + ".time()." where nazwa ='".$nazwa_gildi."'");


i w cronie te 2 polecenie ma dawać wszystkim gildią deski u których mineło 24 godziny od zaakceptowania przez szefa produkcji tych desek
, ty zaś dałeś mi automatyczne dodawanie 30 desek po 24 godzinach, ja chce zaś w skrócie by to szef gildi uruchamiał produkcje.. nie cron
Hpsi
Pierwsze zapytanie na mój gust jest git.
Co do drugiego zmień przy warunku where z równego na mniejszy.

// Ja wiem co ja zrobiłem smile.gif po prostu źle Ciebie zrozumiałem
  1. mysql_query("update law_gildie set t_status = 0, t_tworzenie = 0, deski = deski + 30 where t_tworzenie < ".time());
nakers2
z moim pierwszym poleceniem i twoim 2 wychodzi to że od razu daje 30, w dodatku z każdym odświeżeniem strony
Hpsi
Hmm.

Do tabeli law_gildie dodajemy czas w postaci time()+(60*60*24)
Więc w czasie sprawdzenia law_glide, wartosc kolumny t_tworzenia musi być mniejsza od aktualnego czasu. jeśli się mylę popraw mnie.
Ale dodatkowo wypadało by sprawdzić jeden warunek procz where t_tworzenia<time() przydało by się jeszcze sprawdzenie warunku where t_status=1 (tego nie zauwazłem wcześniej)
nakers2
uwzględniłem status i nie działa,
Hpsi
Hm zechuj zapytanie i wklej bo nie chce mi się wierzyć, że tak się dzieje (albo ja czegoś nie widzę)
nakers2
jednak wszystko pięknie działa
wielkie dzięki za pomoc, pozdrawiam
....................

ps. przy okazji, mam jednak coś jeszcze

mam np. taki link: ?gra=gildia&pole=produkcja
mogę zrobić też w ramach tamtego coś takiego: ?gra=gildia&pole=produkcja&tartak

ale jak to wtedy zdefiniować w polu produkcja ?
zrobiłem tak, ale nie działa:

Kod
if ($_GET['pole'] == 'produkcja') {

if ($_GET['tartak']) {
...
}

}
Hpsi
get
I dobrze ze nie działa, bo to nie ma prawa działać , sprawdź jak działa funkcja którą wyżej ci podałem.
jeśli bys chciał zrobić na takiej zasadzie to link by musial wygladac ?gra=gildia&pole=produkcja&tartak=1;
wtedy
  1. if($_GET['pole'] == 'produkcja') { if($_GET['tartak'] == 1) {} }

Jednak takie rozwiązanie jest B. proste do obejścia do użytkowników którzy nie mają tartaku a znają linki wink.gif.
Dodatkowo, trochę dziurawy ten twój skrypt i łatwy do kombinacji przy nim; )
nakers2
Kod
Jednak takie rozwiązanie jest B. proste do obejścia do użytkowników którzy nie mają tartaku a znają linki wink.gif.

oczywiście tak to wygląda, ale w środku tego ifa dodaje dodaje jeszcze jednego ifa - warunek sprawdzający czy gracz w gildi ma tartak ^^
jeżeli nie ma przenosi
Hpsi
a sprawdzasz czy robisz update do odpowiedniej gildi , oraz czy wczesniej nie została już włączona produkcja?
nakers2
Kod
a sprawdzasz czy robisz update do odpowiedniej gildi

wiem o co chodzi, oczywiście

Kod
oraz czy wczesniej nie została już włączona produkcja?

tak, gracz wykona skrypt produkcji:

if ($g['t_status'] == 0)


aha i mam jeszcze jedno, hehe ^^ zrobiłem w systemie gildi wpłacanie złota i spostrzegłem się że można wpisać do formularza np. - 300 i wtedy odejmuje od liczby zlota gildi i dodaje graczowi, jak to zablokować? ^^
Hpsi
pokaz zapytanie + formularz
nakers2
Kod
function oddaj_zloto($oGracz, $zloto){
    if($zloto > $oGracz['zloto'] ) return "<div id='g6'><font color='#ffc5c5'>Nie masz tyle złota.</font></div>";
    else {
        $nazwa_gildi = $g['nazwa'];    
        mysql_query("update law_gildie set zloto = zloto + ".$zloto." where nazwa = '".$nazwa_gildi."'");
        mysql_query("update law_gracze set zloto = zloto - ".$zloto." where gracz = ".$oGracz['gracz']."");
        return "<div id='g6'><font color='#e0fedb'>Poprawnie oddano złoto.</font></div>";
    }
    }

        $graf2 = "<img src='grafika/gra/ikonki_inne/zloto.png'>";
        echo "<form action='?x=gildia&pole=magazyn' method='post'>
        ".$graf2." Złoto: ".$g['zloto']."<br>
        <font color='#c3b7a8'>Oddaj złoto dla gildii:</font><br>
        <input type='text' name='zloto' value='".$_GET['zloto']."'/> <input type='submit' value='Oddaj' name='oddaj_zloto'/></form>";
Hpsi
BBCODE!wstaw bo nie chce sie czytac. I jeszcze jedno nie wsadzaj php w code tylko w bbcode php tongue.gif

pozatym: http://pl2.php.net/abs
Magic WWW
Dodam tylko taką informację, że używanie funkcji time() jest trochę bezsensowne bo można z to użyć zmiennej $_SERVER['REQUEST_TIME'] wychodzi ten sam efekt, jednakże to drugie jest wiele szybsze w dużych ilościach od tego pierwszego smile.gif
mat-bi
Cytat(Magic WWW @ 17.06.2011, 22:17:34 ) *
Dodam tylko taką informację, że używanie funkcji time() jest trochę bezsensowne bo można z to użyć zmiennej $_SERVER['REQUEST_TIME'] wychodzi ten sam efekt, jednakże to drugie jest wiele szybsze w dużych ilościach od tego pierwszego smile.gif



Eeee, właśnie time() jest częściej używane..

@EDIT:

Tak w ogóle, jak coś, lepiej używać funkcji mysql - NOW()
thek
Mat-bi... Lepiej time wygenerować po stronie skryptu niż używać now() dla części zapytań, ponieważ użycie now() powoduje, że zapytanie nie zostanie wrzucone do cache'u bazy, ale za każdym razem będzie walone przez silnik na nowo. Przydatne zwłaszcza w mocniej obciążonych serwisach wink.gif
nakers2
czyli co w końcu $_SERVER['REQUEST_TIME'] czy time () ? ^^

a i co do tych minusów nie mogę się połapać
Hpsi
ja używam time() wink.gif
nakers2
jeszcze przy okazji mam pytanie, w ogóle nie ogarniam się w temacie wagi plików

gdy np. mam plik php ważący 30 kb, to zostanie on pobrany cały przez gracza czy tylko elementy jakie są mu wyświetlane z tego pliku
Magic WWW
Jeśli tworzysz jakiś większy serwis i chce aby działał on jak najszybciej to używaj $_SERVER['REQUEST_TIME'], użycie [i[time()[/i] to wywołanie funkcji. Poniżej masz mały pomiar czasu ładowania pustej strony przy 10.000 wywołań danej metody.

$_SERVER['REQUEST_TIME']
Kod
Czas ładowania: 0.04s


time()
Kod
Czas ładowania: 0.55s


Pozdrawiam Dawid smile.gif
nakers2
mam takie pytanie.. gdy mam np. to w CRONIE:

Kod
mysql_query("update law_gildie set t_status = 0, t_tworzenie = 0, deski = deski + 10 where t_tworzenie < ".time()." and t_status = 1 and poziom = 1");


to jest to optymalne? bo z każdym odświeżeniem strony przez gracza to sprawdza...
Hpsi
jak masz w cronie to nie sprawdza ci za kazdym razem ?tongue.gif
nakers2
a można jakoś sprawdzić czy sprawdza za kazdym razem? (na wszelki wypadek?) ^^
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.